diff options
-rw-r--r-- | Debian/Dgit.pm | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index de37261..b678ba5 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; } |