chiark / gitweb /
Split brain: Further improvements to split brain patch application
[dgit.git] / dgit
diff --git a/dgit b/dgit
index e30a7889fa014710e8436af7e0d0bddaa9f60702..4edf9827fe181a3c00eedf895b021f3aa316329e 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -1321,6 +1321,7 @@ sub clogp_authline ($) {
     $authline =~ m/$git_authline_re/o or
        fail "unexpected commit author line format \`$authline'".
        " (was generated from changelog Maintainer field)";
+    return ($1,$2,$3) if wantarray;
     return $authline;
 }
 
@@ -2551,8 +2552,8 @@ sub quiltify_splitbrain_needed () {
     }
 }
 
-sub quiltify_splitbrain ($) {
-    my ($diffbits) = @_;
+sub quiltify_splitbrain ($$) {
+    my ($clogp, $diffbits) = @_;
     if ($quilt_mode !~ m/gbp|dpm/) {
        # treat .gitignore just like any other upstream file
        $diffbits = { %$diffbits };
@@ -2562,12 +2563,23 @@ sub quiltify_splitbrain ($) {
        ($diffbits->{O2A} & 01) && # some patches
        !($diffbits->{H2O} & 01)) { # but HEAD is like orig
        quiltify_splitbrain_needed();
-       runcmd @gbppq, qw(import);
-       die "SPLIT BRAIN";
-    }
+       progress "creating patches-applied version using gbp-pq";
+       my @authline = clogp_authline($clogp);
+       local $ENV{GIT_COMMITTER_NAME} =  $authline[0];
+       local $ENV{GIT_COMMITTER_EMAIL} = $authline[1];
+       local $ENV{GIT_COMMITTER_DATE} =  $authline[2];
+       open STDOUT, ">/dev/null" or die $!;
+       runcmd shell_cmd 'exec >/dev/null', @gbppq, qw(import);
+    }
+    if (($diffbits->{H2O} & 02) && # user has modified .gitignore
+       !($diffbits->{O2A} & 02)) { # patches do not change .gitignore
+       quiltify_splitbrain_needed();
+       progress "creating patch to represent .gitignore changes";
     die 'xxx gitignore';
+       
+    }
     die 'xxx memoisation via git-reflog';
-    die 'xxx fast forward';
+    die 'xxx fast forward (should not depend on quilt mode, but will always be needed if we did $split_brain)';
 }
 
 sub quiltify ($$$$) {
@@ -3057,7 +3069,7 @@ END
         " --quilt=gbp --quilt=dpm --quilt=unapplied ?";
 
     if ($quilt_mode =~ m/gbp|dpm|unapplied/) {
-       quiltify_splitbrain($diffbits);
+       quiltify_splitbrain($clogp, $diffbits);
        return;
     }