chiark / gitweb /
worktree support: dgit: Fix for .git/logs/refs/
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 2 Aug 2017 18:29:53 +0000 (19:29 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 3 Aug 2017 21:41:51 +0000 (22:41 +0100)
Experimentally, both the common dir and the worktree's git dir have a
.git/logs.  But, as might be expected, the worktree's one has the
reflog for its HEAD and not any of the refs/ reflogs.

Implicitly, we are deciding here that the dgit quilt cache is shared
between all worktrees.  That seems fine.  I think we don't ever rely
on its actual current value, so even concurrent dgit runs ought to be
fine.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
dgit

diff --git a/dgit b/dgit
index 83013b8..6c1d5bc 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -5020,8 +5020,8 @@ END
     changedir $maindir;
     # When we no longer need to support squeeze, use --create-reflog
     # instead of this:
-    ensuredir ".git/logs/refs/dgit-intern";
-    my $makelogfh = new IO::File ".git/logs/refs/$splitbraincache", '>>'
+    ensuredir "$maindir_gitcommon/logs/refs/dgit-intern";
+    my $makelogfh = new IO::File "$maindir_gitcommon/logs/refs/$splitbraincache", '>>'
       or die $!;
 
     my $oldcache = git_get_ref "refs/$splitbraincache";
@@ -5499,7 +5499,7 @@ sub quilt_check_splitbrain_cache ($$) {
     my $child = open GC, "-|";  defined $child or die $!;
     if (!$child) {
        chdir $maindir or die $!;
-       if (!stat ".git/logs/refs/$splitbraincache") {
+       if (!stat "$maindir_gitcommon/logs/refs/$splitbraincache") {
            $! == ENOENT or die $!;
            printdebug ">(no reflog)\n";
            exit 0;