chiark / gitweb /
Split brain: Fix grammar in a message
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 97274e9e6890a98d3fe223438b6eca1a16381c74..ddcde9acc16148a4a6c1e97d290ef677110ab1e1 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -1995,6 +1995,8 @@ END
     my $format = getfield $dsc, 'Format';
     printdebug "format $format\n";
 
+    my $head = git_rev_parse('HEAD');
+
     if (madformat($format)) {
        # user might have not used dgit build, so maybe do this now:
        commit_quilty_patch();
@@ -2025,7 +2027,6 @@ END
            failedcmd @diffcmd;
        }
     }
-    my $head = git_rev_parse('HEAD');
     if (!$changesfile) {
        my $pat = changespat $cversion;
        my @cs = glob "$buildproductsdir/$pat";
@@ -2992,6 +2993,74 @@ END
     close $fakedsc or die $!;
 }
 
+sub quilt_check_splitbrain_cache ($$) {
+    my ($headref, $upstreamversion) = @_;
+    # Called only if we are in (potentially) split brain mode.
+    # Called in $ud.
+    # Computes the cache key and looks in the cache.
+    # Returns ($dgit_view_commitid, $cachekey) or (undef, $cachekey)
+
+    my $splitbrain_cachekey;
+    
+    progress
+ "dgit: split brain (separate dgit view) may be needed (--quilt=$quilt_mode).";
+    # we look in the reflog of dgit-intern/quilt-cache
+    # we look for an entry whose message is the key for the cache lookup
+    my @cachekey = (qw(dgit), $our_version);
+    push @cachekey, $upstreamversion;
+    push @cachekey, $quilt_mode;
+    push @cachekey, $headref;
+
+    push @cachekey, hashfile('fake.dsc');
+
+    my $srcshash = Digest::SHA->new(256);
+    my %sfs = ( %INC, '$0(dgit)' => $0 );
+    foreach my $sfk (sort keys %sfs) {
+       next unless m/^\$0\b/ || m{^Debian/Dgit\b};
+       $srcshash->add($sfk,"  ");
+       $srcshash->add(hashfile($sfs{$sfk}));
+       $srcshash->add("\n");
+    }
+    push @cachekey, $srcshash->hexdigest();
+    $splitbrain_cachekey = "@cachekey";
+
+    my @cmd = (@git, qw(reflog), '--pretty=format:%H %gs',
+              $splitbraincache);
+    printdebug "splitbrain cachekey $splitbrain_cachekey\n";
+    debugcmd "|(probably)",@cmd;
+    my $child = open GC, "-|";  defined $child or die $!;
+    if (!$child) {
+       chdir '../../..' or die $!;
+       if (!stat ".git/logs/refs/$splitbraincache") {
+           $! == ENOENT or die $!;
+           printdebug ">(no reflog)\n";
+           exit 0;
+       }
+       exec @cmd; die $!;
+    }
+    while (<GC>) {
+       chomp;
+       printdebug ">| ", $_, "\n" if $debuglevel > 1;
+       next unless m/^(\w+) (\S.*\S)$/ && $2 eq $splitbrain_cachekey;
+           
+       my $cachehit = $1;
+       quilt_fixup_mkwork($headref);
+       if ($cachehit ne $headref) {
+           progress "dgit view: found cached (commit id $cachehit)";
+           runcmd @git, qw(checkout -q -b dgit-view), $cachehit;
+           $split_brain = 1;
+           return ($cachehit, $splitbrain_cachekey);
+       }
+       progress "dgit view: found cached, no changes required";
+       return ($headref, $splitbrain_cachekey);
+    }
+    die $! if GC->error;
+    failedcmd unless close GC;
+
+    printdebug "splitbrain cache miss\n";
+    return (undef, $splitbrain_cachekey);
+}
+
 sub quilt_fixup_multipatch ($$$) {
     my ($clogp, $headref, $upstreamversion) = @_;
 
@@ -3066,65 +3135,15 @@ sub quilt_fixup_multipatch ($$$) {
     # afterwards with dpkg-source --before-build.  That lets us save a
     # tree object corresponding to .origs.
 
+    my $splitbrain_cachekey;
+
     quilt_make_fake_dsc($upstreamversion);
 
-    my $splitbrain_cachekey;
     if (quiltmode_splitbrain()) {
-       progress
- "dgit: split brain (separate dgit view) may needed (--quilt=$quilt_mode).";
-       # we look in the reflog of dgit-intern/quilt-cache
-       # we look for an entry whose message is the key for the cache lookup
-       my @cachekey = (qw(dgit), $our_version);
-       push @cachekey, $upstreamversion;
-       push @cachekey, $quilt_mode;
-       push @cachekey, $headref;
-
-       push @cachekey, hashfile('fake.dsc');
-
-       my $srcshash = Digest::SHA->new(256);
-       my %sfs = ( %INC, '$0(dgit)' => $0 );
-       foreach my $sfk (sort keys %sfs) {
-           $srcshash->add($sfk,"  ");
-           $srcshash->add(hashfile($sfs{$sfk}));
-           $srcshash->add("\n");
-       }
-       push @cachekey, $srcshash->hexdigest();
-       $splitbrain_cachekey = "@cachekey";
-
-       my @cmd = (@git, qw(reflog), '--pretty=format:%H %gs',
-                  $splitbraincache);
-       printdebug "splitbrain cachekey $splitbrain_cachekey\n";
-       debugcmd "|(probably)",@cmd;
-       my $child = open GC, "-|";  defined $child or die $!;
-       if (!$child) {
-           chdir '../../..' or die $!;
-           if (!stat ".git/logs/refs/$splitbraincache") {
-               $! == ENOENT or die $!;
-               printdebug ">(no reflog)\n";
-               exit 0;
-           }
-           exec @cmd; die $!;
-       }
-       while (<GC>) {
-           chomp;
-           printdebug ">| ", $_, "\n" if $debuglevel > 1;
-           next unless m/^(\w+) (\S.*\S)$/ && $2 eq $splitbrain_cachekey;
-           
-           my $cachehit = $1;
-           quilt_fixup_mkwork($headref);
-           if ($cachehit ne $headref) {
-               progress "dgit view: found cached (commit id $cachehit)";
-               runcmd @git, qw(checkout -q -b dgit-view), $cachehit;
-               $split_brain = 1;
-               return;
-           }
-           progress "dgit view: found cached, no changes required";
-           return;
-       }
-       die $! if GC->error;
-       failedcmd unless close GC;
-
-       printdebug "splitbrain cache miss\n";
+       my $cachehit;
+       ($cachehit, $splitbrain_cachekey) =
+           quilt_check_splitbrain_cache($headref, $upstreamversion);
+       return if $cachehit;
     }
 
     runcmd qw(sh -ec),