chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a23a044
)
git-debrebase: git-debrebase WIP minimal executable ?
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sun, 5 Feb 2017 23:04:45 +0000
(23:04 +0000)
committer
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000
(12:25 +0100)
git-debrebase
patch
|
blob
|
history
diff --git
a/git-debrebase
b/git-debrebase
index c25c18d9e91739b1f10dd392fac2ff93b135197b..b306d60d576ffb3feffba894c769009a6297d557 100755
(executable)
--- 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
#
# 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
# 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");
}
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);
# 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);
};
return (Msg => $ms);
};
+ my $cur = $input;
+
for (;;) {
$cl = classify $cur;
my $ty = $cl->{Type};
for (;;) {
$cl = classify $cur;
my $ty = $cl->{Type};
@@
-241,7
+247,8
@@
sub launder ($;$) {
$queue->(\@ups_cl, "upstream");
next;
} elsif ($ty eq 'Pseudomerge') {
$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};
}
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};
$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);
last;
} else {
die "Reached difficult commit $cur: ".Dumper($cl);
@@
-340,47
+347,34
@@
sub launder ($;$) {
$build = $newcommit;
}
};
$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->();