chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
git-debrebase: document that breakwater merges always have single parent
[dgit.git]
/
git-debrebase
diff --git
a/git-debrebase
b/git-debrebase
index f73bf0c1d8489e7a1535231a3eb6eab5de93d4ed..5808cf33f7f1b702f29c5e57b1ef01e707a0428f 100755
(executable)
--- a/
git-debrebase
+++ b/
git-debrebase
@@
-154,7
+154,8
@@
sub in_workarea ($) {
my ($sub) = @_;
changedir $workarea;
my $r = eval { $sub->(); };
my ($sub) = @_;
changedir $workarea;
my $r = eval { $sub->(); };
- changedir $maindir;
+ { local $@; changedir $maindir; }
+ die $@ if $@;
}
sub fresh_workarea () {
}
sub fresh_workarea () {
@@
-282,7
+283,7
@@
sub calculate_committer_authline () {
#
# BreakwaterUpstreamMerge
# has additional entry in classification result
#
# BreakwaterUpstreamMerge
# has additional entry in classification result
-# OrigParents = [ subset of Parents ]
+# OrigParents = [ subset of Parents ]
# singleton list
sub classify ($) {
my ($objid) = @_;
sub classify ($) {
my ($objid) = @_;
@@
-627,9
+628,14
@@
sub walk ($;$$) {
my $committer_authline = calculate_committer_authline();
my $committer_authline = calculate_committer_authline();
+ printdebug "WALK REBUILD $build ".(scalar @processed)."\n";
+
+ confess "internal error" unless $build eq (pop @processed)->{CommitId};
+
in_workarea sub {
mkdir $rd or $!==EEXIST or die $!;
my $current_method;
in_workarea sub {
mkdir $rd or $!==EEXIST or die $!;
my $current_method;
+ runcmd @git, qw(read-tree), $build;
foreach my $cl (qw(Debian), (reverse @brw_cl),
{ SpecialMethod => 'RecordBreakwaterTip' },
qw(Upstream), (reverse @upp_cl)) {
foreach my $cl (qw(Debian), (reverse @brw_cl),
{ SpecialMethod => 'RecordBreakwaterTip' },
qw(Upstream), (reverse @upp_cl)) {
@@
-640,6
+646,8
@@
sub walk ($;$$) {
my $method = $cl->{SpecialMethod} // $current_method;
my @parents = ($build);
my $cltree = $cl->{CommitId};
my $method = $cl->{SpecialMethod} // $current_method;
my @parents = ($build);
my $cltree = $cl->{CommitId};
+ printdebug "WALK BUILD ".($cltree//'undef').
+ " $method (rewriting=$rewriting)\n";
if ($method eq 'Debian') {
$read_tree_debian->($cltree);
} elsif ($method eq 'Upstream') {
if ($method eq 'Debian') {
$read_tree_debian->($cltree);
} elsif ($method eq 'Upstream') {
@@
-659,13
+667,19
@@
sub walk ($;$$) {
} else {
confess "$method ?";
}
} else {
confess "$method ?";
}
- $rewriting ||= $cl ne pop @processed;
+ if (!$rewriting) {
+ my $procd = (pop @processed) // 'UNDEF';
+ if ($cl ne $procd) {
+ $rewriting = 1;
+ printdebug "WALK REWRITING NOW cl=$cl procd=$procd\n";
+ }
+ }
my $newtree = cmdoutput @git, qw(write-tree);
my $ch = $cl->{Hdr};
$ch =~ s{^tree .*}{tree $newtree}m or confess "$ch ?";
$ch =~ s{^parent .*\n}{}m;
$ch =~ s{(?=^author)}{
my $newtree = cmdoutput @git, qw(write-tree);
my $ch = $cl->{Hdr};
$ch =~ s{^tree .*}{tree $newtree}m or confess "$ch ?";
$ch =~ s{^parent .*\n}{}m;
$ch =~ s{(?=^author)}{
- map { "parent $_\n" } @parents
+
join '',
map { "parent $_\n" } @parents
}me or confess "$ch ?";
if ($rewriting) {
$ch =~ s{^committer .*$}{$committer_authline}m
}me or confess "$ch ?";
if ($rewriting) {
$ch =~ s{^committer .*$}{$committer_authline}m
@@
-684,7
+698,9
@@
sub walk ($;$$) {
}
};
}
};
- runcmd @git, qw(diff-tree --quiet), $input, $build;
+ my $final_check = get_differs $build, $input;
+ die sprintf "internal error %#x %s %s", $final_check, $build, $input
+ if $final_check & ~D_PAT_ADD;
return ($build, $breakwater);
}
return ($build, $breakwater);
}
@@
-709,8
+725,9
@@
sub cmd_launder () {
my ($tip,$breakwater) = walk $old;
update_head $old, $tip, 'launder';
# no tree changes except debian/patches
my ($tip,$breakwater) = walk $old;
update_head $old, $tip, 'launder';
# no tree changes except debian/patches
- runcmd @git, qw(rm --quiet -rf debian/patches);
+ runcmd @git, qw(rm --quiet -
-ignore-unmatch -
rf debian/patches);
printf "# breakwater tip\n%s\n", $breakwater;
printf "# breakwater tip\n%s\n", $breakwater;
+ printf "# working tip\n%s\n", $tip;
}
sub cmd_analyse () {
}
sub cmd_analyse () {