X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=dgit;h=2c72213a56bd04ace2af90aaa6514ee164de5a9e;hb=e17b7eb17ed4aa309c1a1b3757db1e0fc123df68;hp=97bd283170e833209d36f2e0bbd3546cf0bea17a;hpb=6ea481cc3ed14084a6917b16443d228dc124bbe5;p=dgit.git diff --git a/dgit b/dgit index 97bd2831..2c72213a 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 <>', ".pc/applied-patches") { $!==&ENOENT or die $!;