summaryrefslogtreecommitdiff
path: root/Debian
diff options
context:
space:
mode:
Diffstat (limited to 'Debian')
-rw-r--r--Debian/Dgit.pm24
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;
}