chiark / gitweb /
quilt innards: Break out uilt_make_fake_dsc (nfc)
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 7708fb545e777c025c79e6d38d241f17548628ba..97274e9e6890a98d3fe223438b6eca1a16381c74 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -102,6 +102,7 @@ our %opts_opt_map = ('dget' => \@dget, # accept for compatibility
                      'dpkg-source' => \@dpkgsource,
                      'dpkg-buildpackage' => \@dpkgbuildpackage,
                      'dpkg-genchanges' => \@dpkggenchanges,
+                     'gbp' => \@gbp,
                      'ch' => \@changesopts,
                      'mergechanges' => \@mergechanges);
 
@@ -1447,7 +1448,7 @@ END
     my $cversion = getfield $clogp, 'Version';
     progress "synthesised git commit from .dsc $cversion";
     if ($lastpush_hash) {
-       runcmd @git, qw(reset --hard), $lastpush_hash;
+       runcmd @git, qw(reset -q --hard), $lastpush_hash;
        runcmd qw(sh -ec), 'dpkg-parsechangelog >>../changelogold.tmp';
        my $oldclogp = parsecontrol('../changelogold.tmp','previous changelog');
        my $oversion = getfield $oldclogp, 'Version';
@@ -1849,11 +1850,15 @@ sub get_source_format () {
 sub madformat ($) {
     my ($format) = @_;
     return 0 unless $format eq '3.0 (quilt)';
+    our $quilt_mode_warned;
     if ($quilt_mode eq 'nocheck') {
-       progress "Not doing any fixup of \`$format' due to --no-quilt-fixup";
+       progress "Not doing any fixup of \`$format' due to".
+           " ----no-quilt-fixup or --quilt=nocheck"
+           unless $quilt_mode_warned++;
        return 0;
     }
-    progress "Format \`$format', checking/updating patch stack";
+    progress "Format \`$format', need to check/update patch stack"
+       unless $quilt_mode_warned++;
     return 1;
 }
 
@@ -2556,11 +2561,11 @@ sub quiltify_tree_sentinelfiles ($) {
         qw(-- debian/rules debian/control);
     $r =~ s/\n/,/g;
     return $r;
-                                }
+}
 
 sub quiltify_splitbrain_needed () {
     if (!$split_brain) {
-       progress "creating dgit view";
+       progress "dgit view: changes are required...";
        runcmd @git, qw(checkout -q -b dgit-view);
        $split_brain = 1;
     }
@@ -2594,7 +2599,7 @@ sub quiltify_splitbrain ($$$$$$) {
     if ($quilt_mode =~ m/gbp|unapplied/ &&
        ($diffbits->{O2A} & 01)) { # some patches
        quiltify_splitbrain_needed();
-       progress "creating patches-applied version using gbp pq";
+       progress "dgit view: creating patches-applied version using gbp pq";
        runcmd shell_cmd 'exec >/dev/null', @gbp, qw(pq import);
        # gbp pq import creates a fresh branch; push back to dgit-view
        runcmd @git, qw(update-ref refs/heads/dgit-view HEAD);
@@ -2603,7 +2608,7 @@ sub quiltify_splitbrain ($$$$$$) {
     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";
+       progress "dgit view: creating patch to represent .gitignore changes";
         ensuredir "debian/patches";
        my $gipatch = "debian/patches/auto-gitignore";
        open GIPATCH, ">>", "$gipatch" or die "$gipatch: $!";
@@ -2643,7 +2648,7 @@ END
     runcmd @git, qw(update-ref -m), $cachekey, "refs/$splitbraincache",
        $dgitview;
 
-    progress "created dgit view (commit id $dgitview)";
+    progress "dgit view: created (commit id $dgitview)";
 
     changedir '.git/dgit/unpack/work';
 }
@@ -2942,14 +2947,55 @@ sub quilt_fixup_singlepatch ($$$) {
 
     chdir "work";
     commit_quilty_patch();
+}
+
+sub quilt_make_fake_dsc ($) {
+    my ($upstreamversion) = @_;
+
+    my $fakeversion="$upstreamversion-~~DGITFAKE";
+
+    my $fakedsc=new IO::File 'fake.dsc', '>' or die $!;
+    print $fakedsc <<END or die $!;
+Format: 3.0 (quilt)
+Source: $package
+Version: $fakeversion
+Files:
+END
+
+    my $dscaddfile=sub {
+        my ($b) = @_;
+        
+       my $md = new Digest::MD5;
+
+       my $fh = new IO::File $b, '<' or die "$b $!";
+       stat $fh or die $!;
+       my $size = -s _;
+
+       $md->addfile($fh);
+       print $fakedsc " ".$md->hexdigest." $size $b\n" or die $!;
+    };
+
+    quilt_fixup_linkorigs($upstreamversion, $dscaddfile);
+
+    my @files=qw(debian/source/format debian/rules
+                 debian/control debian/changelog);
+    foreach my $maybe (qw(debian/patches debian/source/options
+                          debian/tests/control)) {
+        next unless stat_exists "../../../$maybe";
+        push @files, $maybe;
+    }
+
+    my $debtar= srcfn $fakeversion,'.debian.tar.gz';
+    runcmd qw(env GZIP=-1n tar -zcf), "./$debtar", qw(-C ../../..), @files;
 
-    
+    $dscaddfile->($debtar);
+    close $fakedsc or die $!;
 }
 
 sub quilt_fixup_multipatch ($$$) {
     my ($clogp, $headref, $upstreamversion) = @_;
 
-    progress "starting quiltify (multiple patches, $quilt_mode mode)";
+    progress "examining quilt state (multiple patches, $quilt_mode mode)";
 
     # Our objective is:
     #  - honour any existing .pc in case it has any strangeness
@@ -3020,47 +3066,12 @@ sub quilt_fixup_multipatch ($$$) {
     # afterwards with dpkg-source --before-build.  That lets us save a
     # tree object corresponding to .origs.
 
-    my $fakeversion="$upstreamversion-~~DGITFAKE";
-
-    my $fakedsc=new IO::File 'fake.dsc', '>' or die $!;
-    print $fakedsc <<END or die $!;
-Format: 3.0 (quilt)
-Source: $package
-Version: $fakeversion
-Files:
-END
-
-    my $dscaddfile=sub {
-        my ($b) = @_;
-        
-       my $md = new Digest::MD5;
-
-       my $fh = new IO::File $b, '<' or die "$b $!";
-       stat $fh or die $!;
-       my $size = -s _;
-
-       $md->addfile($fh);
-       print $fakedsc " ".$md->hexdigest." $size $b\n" or die $!;
-    };
-
-    quilt_fixup_linkorigs($upstreamversion, $dscaddfile);
-
-    my @files=qw(debian/source/format debian/rules
-                 debian/control debian/changelog);
-    foreach my $maybe (qw(debian/patches debian/source/options
-                          debian/tests/control)) {
-        next unless stat_exists "../../../$maybe";
-        push @files, $maybe;
-    }
-
-    my $debtar= srcfn $fakeversion,'.debian.tar.gz';
-    runcmd qw(env GZIP=-1 tar -zcf), "./$debtar", qw(-C ../../..), @files;
-
-    $dscaddfile->($debtar);
-    close $fakedsc or die $!;
+    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);
@@ -3102,13 +3113,12 @@ END
            my $cachehit = $1;
            quilt_fixup_mkwork($headref);
            if ($cachehit ne $headref) {
-               progress "quilt fixup ($quilt_mode mode) found cached tree";
+               progress "dgit view: found cached (commit id $cachehit)";
                runcmd @git, qw(checkout -q -b dgit-view), $cachehit;
                $split_brain = 1;
                return;
            }
-           progress "quilt fixup ($quilt_mode mode)".
-             " found cached indication that no changes needed";
+           progress "dgit view: found cached, no changes required";
            return;
        }
        die $! if GC->error;
@@ -3203,6 +3213,7 @@ END
        return;
     }
 
+    progress "starting quiltify (multiple patches, $quilt_mode mode)";
     quiltify($clogp,$headref,$oldtiptree,\@failsuggestion);
 
     if (!open P, '>>', ".pc/applied-patches") {