diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2017-08-02 19:14:40 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2017-08-03 09:57:52 +0100 |
commit | 780a7c95e17f7d467015070895cb1fc18e1daff4 (patch) | |
tree | 4d96cf1e9b4cdfa2c1becb1401ea539068bab152 /Debian | |
parent | 9b34c3e59ee77136f100c2514524e841c4b30eab (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')
-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; } |