summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdgit-badcommit-fixup31
1 files changed, 23 insertions, 8 deletions
diff --git a/dgit-badcommit-fixup b/dgit-badcommit-fixup
index 2708e1c..bab8605 100755
--- a/dgit-badcommit-fixup
+++ b/dgit-badcommit-fixup
@@ -79,6 +79,7 @@ sub rewrite_commit ($) {
my $m = \ $memo{$obj};
return $$m if defined $$m;
my $olddata = getobj $obj, 'commit';
+#print STDERR ">$obj|$olddata<\n";
$olddata =~ m/(?<=\n)(?=\n)/ or die "$obj ?";
my $msg = $';
local $_ = $`;
@@ -129,9 +130,12 @@ sub rewrite_tag ($) {
return hashobj $_, 'tag';
}
-sub rewrite_rewrite_map ($) {
+sub edit_rewrite_map ($) {
my ($old) = @_;
+ filter_updates();
+ return $old unless @updates;
+
my $td = 'dgit-broken-fixup.tmp';
runcmd qw(rm -rf), $td;
mkdir $td, 0700 or die "$td $!";
@@ -155,18 +159,21 @@ sub rewrite_rewrite_map ($) {
close M or die $!;
}
- filter_updates();
foreach my $up (@updates) {
- $map{ $_->[1] } = $_->[2];
+ $map{ $up->[1] } = $up->[2];
}
open M, ">", "map" or die $!;
- print M "%s%s\n",
+ printf M "%s%s\n",
$_, (defined $map{$_} ? " $map{$_}" : "")
- or die $!;
+ or die $!
foreach keys %map;
close M or die $!;
+ if (!$old) {
+ runcmd qw(git add map);
+ }
+
runcmd qw(git commit -q),
qw(-m), 'dgit-badcommit-fixup',
qw(map);
@@ -216,11 +223,17 @@ if ($bare eq 'true') {
my $new_rewrite_map = edit_rewrite_map($org_rewrite_map);
push @updates, [ 'refs/dgit-rewrite/map',
($org_rewrite_map // '0'x40),
- $new_rewrite_map ];
+ ($new_rewrite_map // '0'x40),
+ 1 ];
}
filter_updates();
+if (!@updates) {
+ print Dumper(\%count), "nothing to do\n";
+ exit 0;
+}
+
#print Dumper(\@updates);
open U, "|git update-ref -m 'dgit bad commit fixup' --stdin" or die $!;
@@ -231,12 +244,14 @@ if ($real && $bare eq 'false') {
}
for my $up (@updates) {
- my ($ref, $old, $new) = @$up;
+ my ($ref, $old, $new, $nobackup) = @$up;
my $otherref = $ref;
$otherref =~ s{^refs/}{};
if ($real) {
- print U <<END or die $!;
+ print U <<END or die $! unless $nobackup;
create refs/dgit-badcommit/$otherref $old
+END
+ print U <<END or die $!;
update $ref $new $old
END
} else {