From 77eadb96882721c03d9b517a28a6468f2fa362a8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 5 Feb 2017 23:04:45 +0000 Subject: [PATCH] git-debrebase: git-debrebase WIP minimal executable ? --- git-debrebase | 72 +++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/git-debrebase b/git-debrebase index c25c18d9..b306d60d 100755 --- a/git-debrebase +++ b/git-debrebase @@ -25,6 +25,10 @@ # git-debrebase new-upstream [-f] UPSTREAM # git-debrebase # does debrebase start if necessary # +#xxx +# when starting must record original start (for ff) +# and new rebase basis +# # git-ffrebase start [BASE] # records previous HEAD so it can be overwritten # # records base for future git-ffrebase # git-ffrebase set-base BASE @@ -197,8 +201,8 @@ sub classify ($) { return $unknown->("complex merge"); } -sub launder ($;$) { - my ($cur, $pseudos_must_overwrite, $wantdebonly) = @_; +sub launder ($$$) { + my ($input, $pseudos_must_overwrite_this, $wantdebonly) = @_; # go through commits backwards # we generate two lists of commits to apply my (@deb_cl, @ups_cl); @@ -214,6 +218,8 @@ sub launder ($;$) { return (Msg => $ms); }; + my $cur = $input; + for (;;) { $cl = classify $cur; my $ty = $cl->{Type}; @@ -241,7 +247,8 @@ sub launder ($;$) { $queue->(\@ups_cl, "upstream"); next; } elsif ($ty eq 'Pseudomerge') { - if (defined $pseudos_must_overwrite) { + if (defined $pseudos_must_overwrite_this) { + confess 'xxx actually check this'; } push @pseudomerges, $cl; $cur = $ty->{Contributor}; @@ -274,7 +281,7 @@ sub launder ($;$) { $xmsg->("convert dgit import: upstream changes") }; my $differs = get_differs $previous_breakwater, $cl->{Tree}; - $basis = launder $pseudomerges[0]{Overwritten}, 1; + $basis = launder $pseudomerges[0]{Overwritten}, undef, 1; last; } else { die "Reached difficult commit $cur: ".Dumper($cl); @@ -340,47 +347,34 @@ sub launder ($;$) { $build = $newcommit; } }; -} + runcmd @git, qw(diff-tree --quiet), + map { $wantdebonly ? "$_:debian" : $_ }, + $input, $build; - -chdir $GIT_DIR - - -if ($ARGV[0] eq 'launder') { - launder(); + return $build; } -use Data::Dumper; -print Dumper(cfg('wombat.foo.bar')); - - - ((git_cat_file "$t:debian/patches/series" - - - my @ - - - - return $r; - $r->{Type} = ' - $r->{Type} = ' - return - # changes on debian/patches, discard it - - $cur = $p[0]; - next; - } - if ($d & DPAT) { - - - ($r->{Tree},) = - - +sub get_head () { return git_rev_parse qw(HEAD); } +sub update_head ($$) { + my ($old, $new, $mrest) = @_; + runcmd @git, qw(update-ref -m), "git-debrebase $mrest", $new, $old; +} +sub cmd_launder () { + my $old = get_head(); + my $got = launder $old, 0, undef, 0; + update_head $old, $new, 'launder'; # no tree changes! +} +my $toplevel = runcmd @git, qw(rev-parse --show-toplevel); +chdir $toplevel or die "chdir $toplevel: $!"; - when starting must record original start (for ff) - and new rebase basis +my $cmd = shift @ARGV; +my $cmdfn = $cmd; +$cmdfn =~ y/-/_/; +$cmdfn = ${*::}{"cmd_$cmdfn"}; +$cmdfn or badusage "unknown git-debrebase sub-operation $cmd"; +$cmdfn->(); -- 2.30.2