summaryrefslogtreecommitdiff
path: root/git-debrebase
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-02-05 23:04:45 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2018-06-16 12:25:49 +0100
commit77eadb96882721c03d9b517a28a6468f2fa362a8 (patch)
tree391c39b7ee3a513d33abe783a36eaa584f29a73d /git-debrebase
parenta23a044a9486d1aebdfaea9ff1c0ed2635339109 (diff)
git-debrebase: git-debrebase WIP minimal executable ?
Diffstat (limited to 'git-debrebase')
-rwxr-xr-xgit-debrebase72
1 files changed, 33 insertions, 39 deletions
diff --git a/git-debrebase b/git-debrebase
index c25c18d..b306d60 100755
--- a/git-debrebase
+++ b/git-debrebase
@@ -25,6 +25,10 @@
# git-debrebase new-upstream [-f] UPSTREAM
# git-debrebase <git-rebase options> # 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->();