X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=git-debrebase;h=22cdfa6405b4c8c884a7f017f4e143e06658fa0c;hp=139602fcff8e5fa22f8f48f378afbdcdaa6f96a6;hb=31ca5cbc38b975621d01dd5c5fd5cf6b8f539ee4;hpb=c4a29f2072aa18aa1d916c61afd723b38ace7838 diff --git a/git-debrebase b/git-debrebase index 139602fc..22cdfa64 100755 --- a/git-debrebase +++ b/git-debrebase @@ -154,7 +154,8 @@ sub in_workarea ($) { my ($sub) = @_; changedir $workarea; my $r = eval { $sub->(); }; - changedir $maindir; + { local $@; changedir $maindir; } + die $@ if $@; } sub fresh_workarea () { @@ -627,9 +628,14 @@ sub walk ($;$$) { 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; + runcmd @git, qw(read-tree), $build; 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}; + printdebug "WALK BUILD ".($cltree//'undef'). + " $method (rewriting=$rewriting)\n"; if ($method eq 'Debian') { $read_tree_debian->($cltree); } elsif ($method eq 'Upstream') { @@ -685,7 +693,7 @@ sub walk ($;$$) { }; my $final_check = get_differs $build, $input; - die sprintf "internal error %#x", $final_check + die sprintf "internal error %#x %s %s", $final_check, $build, $input if $final_check & ~D_PAT_ADD; return ($build, $breakwater);