summaryrefslogtreecommitdiff
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
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>
-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;
}