X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=git-debrebase;h=74e50768deaac7d7d43b487254a6aade0dcc1a5e;hb=d94ac406e0f237759420caf6eca996c4ffee1ca9;hp=4a705854c1581754e6eea4c69b1c672ea83b8ea7;hpb=bd67a8122d87752668d1b5ee498359fcbcbe1ea5;p=dgit.git diff --git a/git-debrebase b/git-debrebase index 4a705854..74e50768 100755 --- a/git-debrebase +++ b/git-debrebase @@ -232,12 +232,13 @@ sub trees_diff_walk ($$$;$) { # $x and $y are as for get_tree # where $name, $ix, $iy are $name and $info from get_tree # opts are all call even for names same in both + # recurse call even for names same in both my $opts = shift @_ if @_>=4; my ($x,$y,$call) = @_; my $all = $opts->{all}; return if !$all and $x eq $y; - my @x = get_tree $x; - my @y = get_tree $y; + my @x = get_tree $x, 0, $opts->{recurse}; + my @y = get_tree $y, 0, $opts->{recurse}; printdebug "trees_diff_walk(..$x,$y..) ".Dumper(\@x,\@y) if $debuglevel >= 3; while (@x || @y) { @@ -309,13 +310,16 @@ sub get_differs ($$) { my $xp = $ix && "$xd/patches"; my $yp = $iy && "$yd/patches"; - trees_diff_walk $xp, $yp, sub { + trees_diff_walk { recurse=>1 }, $xp, $yp, sub { my ($n,$ix,$iy) = @_; # analyse difference in debian/patches my $ok; - if ($n !~ m/\.series$/s && !$ix && $plain->($iy)) { + if ($n =~ m{/$}s) { + # we are recursing; directories may appear and disappear + $ok = 1; + } elsif ($n !~ m/\.series$/s && !$ix && $plain->($iy)) { $ok = 1; } elsif ($n eq 'series' && $plain->($ix) && $plain->($iy)) { my $x_s = (git_cat_file "$xp/series", 'blob'); @@ -490,6 +494,7 @@ sub gbp_pq_export ($$$) { # must be run in a workarea. $bname and patch-queue/$bname # ought not to exist. Leaves you on patch-queue/$bname with # the patches staged but not committed. + # returns 1 if there were any patches printdebug "gbp_pq_export $bname $base $tip\n"; runcmd @git, qw(checkout -q -b), $bname, $base; runcmd @git, qw(checkout -q -b), "patch-queue/$bname", $tip; @@ -499,7 +504,9 @@ sub gbp_pq_export ($$$) { { local ($!,$?); copy('../gbp-pq-err', \*STDERR); } failedcmd @gbp_cmd; } - runcmd @git, qw(add -f debian/patches) if stat_exists 'debian/patches'; + return 0 unless stat_exists 'debian/patches'; + runcmd @git, qw(add -f debian/patches); + return 1; } @@ -1197,8 +1204,8 @@ sub walk ($;$$$) { my ($prose, $info) = @_; my $ms = $cl->{Msg}; chomp $ms; - $info //= ''; - $ms .= "\n\n[git-debrebase$info: $prose]\n"; + confess unless defined $info; + $ms .= "\n\n[git-debrebase $info: $prose]\n"; return (Msg => $ms); }; my $rewrite_from_here = sub { @@ -1279,7 +1286,7 @@ sub walk ($;$$$) { } elsif ($ty eq 'Mixed') { my $queue = sub { my ($q, $wh) = @_; - my $cls = { %$cl, $xmsg->("split mixed commit: $wh part") }; + my $cls = { %$cl, $xmsg->("mixed commit: $wh part",'split') }; push @$q, $cls; }; $queue->(\@brw_cl, "debian"); @@ -1332,12 +1339,12 @@ sub walk ($;$$$) { push @brw_cl, { %$cl, SpecialMethod => 'DgitImportDebianUpdate', - $xmsg->("convert dgit import: debian changes") + $xmsg->("debian changes", 'convert dgit import') }, { %$cl, SpecialMethod => 'DgitImportUpstreamUpdate', $xmsg->("convert dgit import: upstream update", - " anchor") + "anchor") }; $prline->(" Import"); $rewrite_from_here->(\@brw_cl); @@ -1530,7 +1537,7 @@ sub walk ($;$$$) { %$cl, SpecialMethod => 'MergeCreateMergedBreakwaters', $xmsg->('constructed from vanilla merge', - ' merged-breakwater'), + 'merged-breakwater'), }; push @upp_cl, { %$cl, @@ -2194,7 +2201,7 @@ END # Now we have the final new breakwater branch in the index $new_bw = make_commit [ $new_bw ], [ "Update changelog for new upstream $new_upstream_version", - "[git-debrebase: new upstream $new_upstream_version, changelog]", + "[git-debrebase changelog: new upstream $new_upstream_version]", ]; }; @@ -2391,9 +2398,11 @@ sub make_patches_staged ($) { # laundered. my ($secret_head, $secret_bw, $last_anchor) = walk $head; fresh_workarea(); + my $any; in_workarea sub { - gbp_pq_export 'bw', $secret_bw, $secret_head; + $any = gbp_pq_export 'bw', $secret_bw, $secret_head; }; + return $any; } sub make_patches ($) { @@ -2407,7 +2416,7 @@ sub make_patches ($) { read_tree_subdir 'debian/patches', $ptree; $out = make_commit [$head], [ 'Commit patch queue (exported by git-debrebase)', - '[git-debrebase: export and commit patches]', + '[git-debrebase make-patches: export and commit patches]', ]; }; return $out; @@ -2445,7 +2454,14 @@ sub check_series_has_all_patches ($) { [qw(blob missing)]; $series //= ''; my %series; + our $comments_snagged; foreach my $f (grep /\S/, grep {!m/^\s\#/} split /\n/, $series) { + if ($f =~ m/^\s*\#/) { + snag 'series-comments', + "$seriesfn contains comments, which will be discarded" + unless $comments_snagged++; + next; + } fail "patch $f repeated in $seriesfn !" if $series{$f}++; } foreach my $patchfile (get_tree "$head:debian/patches", 1,1) { @@ -2739,7 +2755,7 @@ Import effective orig tree for upstream version $version END This includes the contents of the .orig(s), minus any debian/ directory. -[git-debrebase import-from-dgit-view upstream-import-convert: $version] +[git-debrebase convert-from-dgit-view upstream-import-convert: $version] END ]; push @upstreams, { Commit => $ups_synth, @@ -2773,7 +2789,7 @@ END 'git-debrebase convert-from-dgit-view: drop upstream changes from breakwater', "Drop upstream changes, and delete debian/patches, as part of converting\n". "to git-debrebase format. Upstream changes will appear as commits.", - '[git-debrebase convert-from-dgit-view: drop patches from tree]' + '[git-debrebase convert-from-dgit-view drop-patches]' ]; } $work = make_commit [ $work, $u->{Commit} ], [ @@ -2827,6 +2843,18 @@ END 'convert-from-dgit-view'; } +sub cmd_forget_was_ever_debrebase () { + badusage "forget-was-ever-debrebase takes no further arguments" if @ARGV; + my ($ffqstatus, $ffq_msg, $current, $ffq_prev, $gdrlast) = + ffq_prev_branchinfo(); + fail "Not suitable for recording git-debrebaseness anyway: $ffq_msg" + if defined $ffq_msg; + push @deferred_updates, "delete $ffq_prev"; + push @deferred_updates, "delete $gdrlast"; + snags_maybe_bail(); + run_deferred_updates "forget-was-ever-debrebase"; +} + sub cmd_record_resolved_merge () { badusage "record-resolved-merge takes no further arguments" if @ARGV; # MERGE-TODO needs documentation