chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
test suite: lib-core: Provide DGIT_BADCOMMIT_FIXUP
[dgit.git]
/
dgit-badcommit-fixup
diff --git
a/dgit-badcommit-fixup
b/dgit-badcommit-fixup
index cd62e6820f9155f29d299aa4b3a2b5cd266857c1..bab8605aed270ea83d96f8f3c47ea8896b96fd10 100755
(executable)
--- 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';
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 $_ = $`;
$olddata =~ m/(?<=\n)(?=\n)/ or die "$obj ?";
my $msg = $';
local $_ = $`;
@@
-129,9
+130,12
@@
sub rewrite_tag ($) {
return hashobj $_, 'tag';
}
return hashobj $_, 'tag';
}
-sub
rewrite
_rewrite_map ($) {
+sub
edit
_rewrite_map ($) {
my ($old) = @_;
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 $!";
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 $!;
}
close M or die $!;
}
- filter_updates();
foreach my $up (@updates) {
foreach my $up (@updates) {
- $map{ $
_->[1] } = $_
->[2];
+ $map{ $
up->[1] } = $up
->[2];
}
open M, ">", "map" or die $!;
}
open M, ">", "map" or die $!;
- print M "%s%s\n",
+ print
f
M "%s%s\n",
$_, (defined $map{$_} ? " $map{$_}" : "")
$_, (defined $map{$_} ? " $map{$_}" : "")
- or die $!
;
+ or die $!
foreach keys %map;
close M 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);
runcmd qw(git commit -q),
qw(-m), 'dgit-badcommit-fixup',
qw(map);
@@
-196,7
+203,7
@@
foreach my $rline (split /\n/, $refs) {
my ($obj, $type, $refname) =
$rline =~ m/^(\w+)\s+(\w+)\s+(\S.*)/
or die "$_ ?";
my ($obj, $type, $refname) =
$rline =~ m/^(\w+)\s+(\w+)\s+(\S.*)/
or die "$_ ?";
- if ($refname eq 'refs/dgit-rewrite
-
map') {
+ if ($refname eq 'refs/dgit-rewrite
/
map') {
$org_rewrite_map = $obj;
continue;
}
$org_rewrite_map = $obj;
continue;
}
@@
-214,13
+221,19
@@
foreach my $rline (split /\n/, $refs) {
if ($bare eq 'true') {
my $new_rewrite_map = edit_rewrite_map($org_rewrite_map);
if ($bare eq 'true') {
my $new_rewrite_map = edit_rewrite_map($org_rewrite_map);
- push @updates, [ 'refs/dgit-rewrite
-
map',
+ push @updates, [ 'refs/dgit-rewrite
/
map',
($org_rewrite_map // '0'x40),
($org_rewrite_map // '0'x40),
- $new_rewrite_map ];
+ ($new_rewrite_map // '0'x40),
+ 1 ];
}
filter_updates();
}
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 $!;
#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) {
}
for my $up (@updates) {
- my ($ref, $old, $new) = @$up;
+ my ($ref, $old, $new
, $nobackup
) = @$up;
my $otherref = $ref;
$otherref =~ s{^refs/}{};
if ($real) {
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
create refs/dgit-badcommit/$otherref $old
+END
+ print U <<END or die $!;
update $ref $new $old
END
} else {
update $ref $new $old
END
} else {