X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=295bbdf1ed1c323cb48bdfe9c6cbb3de60fdce32;hb=561bf70f8de802ba788e3d2f3be787015e5b02c0;hp=5910c778f2f7d0798150cd2ac89aaa15171ccbfe;hpb=fbb665eaf5e2ca9d027128dd8838adc15c934b30;p=dgit.git diff --git a/dgit b/dgit index 5910c778..295bbdf1 100755 --- a/dgit +++ b/dgit @@ -2510,14 +2510,15 @@ END } } -sub quiltify_trees_differ ($$) { - my ($x,$y) = @_; +sub quiltify_trees_differ ($$;$) { + my ($x,$y,$ignoregitignore) = @_; # returns 1 iff the two tree objects differ other than in debian/ local $/=undef; my @cmd = (@git, qw(diff-tree --name-only -z), $x, $y); my $diffs= cmdoutput @cmd; foreach my $f (split /\0/, $diffs) { next if $f eq 'debian'; + next if $f eq '.gitignore' && $ignoregitignore; return 1; } return 0; @@ -2532,8 +2533,15 @@ sub quiltify_tree_sentinelfiles ($) { return $r; } -sub quiltify ($$$) { - my ($clogp,$target,$origtree) = @_; +sub quilt_could_gbp ($$$) { + my ($userhead,$unapplied,$applied) = @_; + return + !quiltify_trees_differ($userhead,$unapplied,1) && + quiltify_trees_differ($userhead,$applied,1); +} + +sub quiltify ($$$$) { + my ($clogp,$target,$unapplied,$oldtiptree) = @_; # Quilt patchification algorithm # @@ -2559,12 +2567,6 @@ sub quiltify ($$$) { # After traversing PT, we git commit the changes which # should be contained within debian/patches. - changedir '../fake'; - rmtree '.pc'; - runcmd @git, qw(add -Af .); - my $oldtiptree=git_write_tree(); - changedir '../work'; - # The search for the path S..T is breadth-first. We maintain a # todo list containing search nodes. A search node identifies a # commit, and looks something like this: @@ -2677,6 +2679,12 @@ sub quiltify ($$$) { foreach my $notp (@nots) { print STDERR "$us: ", $reportnot->($notp), "\n"; } + if (quilt_could_gbp($target,$unapplied,$oldtiptree)) { + print STDERR </dev/null'; changedir '..'; - my $origtree=''; - quilt_fixup_mkwork($headref); my $mustdeletepc=0; @@ -2963,7 +2988,13 @@ END rename '../fake/.pc','.pc' or die $!; } - quiltify($clogp,$headref,$origtree); + changedir '../fake'; + rmtree '.pc'; + runcmd @git, qw(add -Af .); + my $oldtiptree=git_write_tree(); + changedir '../work'; + + quiltify($clogp,$headref,$unapplied,$oldtiptree); if (!open P, '>>', ".pc/applied-patches") { $!==&ENOENT or die $!;