X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=Debian%2FDgit.pm;h=b678ba53ead7cba05a4d579ebef5ae1f5f5df6c9;hp=de37261d1820b86d54e874860932be631ab2f135;hb=780a7c95e17f7d467015070895cb1fc18e1daff4;hpb=9b34c3e59ee77136f100c2514524e841c4b30eab diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index de37261d..b678ba53 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -64,6 +64,7 @@ BEGIN { # implicitly uses $main::us %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO NOCOMMITCHECK)], playground => [qw(record_maindir $maindir $local_git_cfg + $maindir_gitdir $maindir_gitcommon fresh_playground $playground ensure_a_playground)]); @EXPORT_OK = ( @{ $EXPORT_TAGS{policyflags} }, @@ -509,11 +510,29 @@ sub git_slurp_config_src ($) { # ----- maindir ----- +# these three all go together our $maindir; +our $maindir_gitdir; +our $maindir_gitcommon; + our $local_git_cfg; sub record_maindir () { - $maindir //= must_getcwd(); + if (!defined $maindir) { + $maindir = must_getcwd(); + if (!stat "$maindir/.git") { + fail "cannot stat $maindir/.git: $!"; + } + if (-d _) { + # we fall back to this in case we have a pre-worktree + # git, which may not know git rev-parse --git-common-dir + $maindir_gitdir = "$maindir/.git"; + $maindir_gitcommon = "$maindir/.git"; + } else { + $maindir_gitdir = cmdoutput qw(git rev-parse --git-dir); + $maindir_gitcommon = cmdoutput qw(git rev-parse --git-common-dir); + } + } $local_git_cfg //= git_slurp_config_src 'local'; } @@ -526,7 +545,8 @@ sub ensure_a_playground_parent ($) { record_maindir(); $spc = ".git/$spc"; my $parent = dirname $spc; - mkdir $parent or $!==EEXIST or fail "failed to mkdir $parent: $!"; + mkdir $parent or $!==EEXIST + or fail "failed to mkdir playground parent $parent: $!"; return $spc; }