summaryrefslogtreecommitdiff
path: root/Debian/Dgit.pm
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-08-02 19:14:40 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2017-08-03 09:57:52 +0100
commit780a7c95e17f7d467015070895cb1fc18e1daff4 (patch)
tree4d96cf1e9b4cdfa2c1becb1401ea539068bab152 /Debian/Dgit.pm
parent9b34c3e59ee77136f100c2514524e841c4b30eab (diff)
worktree support: Dgit.pm: Introduce $maindir_gitdir and _commondir
A "git worktree" separates out some of the things which used to be found in .git, into "common" things and "gitdir" things. In this patch we simply collect the relevant informaation. No-one uses it yet so there is no significant functional change. However, while we are here, we do improve an error message slightly. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'Debian/Dgit.pm')
-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;
}