diff options
author | Eric Wong (Contractor, The Linux Foundation) <e@80x24.org> | 2018-04-04 21:24:58 +0000 |
---|---|---|
committer | Eric Wong (Contractor, The Linux Foundation) <e@80x24.org> | 2018-04-04 21:54:42 +0000 |
commit | b4d127cb83230fe5cee0dcecb573107ad96a7c4c (patch) | |
tree | 764d61dc4043e368248165d75dd3dbd4312c2ce4 /lib/PublicInbox/Import.pm | |
parent | 89537db2ca4b506a7b7500dcd7b7c5430a0a6dc7 (diff) | |
download | public-inbox-b4d127cb83230fe5cee0dcecb573107ad96a7c4c.tar.gz |
We do not need to rewrite old commits unaffected by the object_id purge, only newer commits. This was a state management bug :x We will also return the new commit ID of rewritten history to aid in incremental indexing of mirrors for the next change.
Diffstat (limited to 'lib/PublicInbox/Import.pm')
-rw-r--r-- | lib/PublicInbox/Import.pm | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm index b2aae9a7..73290eed 100644 --- a/lib/PublicInbox/Import.pm +++ b/lib/PublicInbox/Import.pm @@ -476,6 +476,7 @@ sub purge_oids { my @buf; my $npurge = 0; my @oids; + my ($done, $mark); my $tree = $self->{-tree}; while (<$rd>) { if (/^reset (?:.+)/) { @@ -506,14 +507,20 @@ sub purge_oids { my $path = $1; push @buf, $_ if $tree->{$path}; } elsif ($_ eq "\n") { - my $out = join('', @buf); - $out =~ s/^/# /sgm; - warn "purge rewriting\n", $out, "\n"; - clean_purge_buffer(\@oids, \@buf); - $out = join('', @buf); + if (@oids) { + my $out = join('', @buf); + $out =~ s/^/# /sgm; + warn "purge rewriting\n", $out, "\n"; + clean_purge_buffer(\@oids, \@buf); + $npurge++; + } $w->print(@buf, "\n") or wfail; @buf = (); - $npurge++; + } elsif ($_ eq "done\n") { + $done = 1; + } elsif (/^mark :(\d+)$/) { + push @buf, $_; + $mark = $1; } else { push @buf, $_; } @@ -521,7 +528,9 @@ sub purge_oids { if (@buf) { $w->print(@buf) or wfail; } - $w = $r = undef; + die 'done\n not seen from fast-export' unless $done; + chomp(my $cmt = $self->get_mark(":$mark")) if $npurge; + $self->{nchg} = 0; # prevent _update_git_info until update-ref: $self->done; my @git = ('git', "--git-dir=$git->{git_dir}"); @@ -540,7 +549,9 @@ sub purge_oids { $err++; } } + _update_git_info($self, 0); die "Failed to purge $err object(s)\n" if $err; + $cmt; } 1; |