summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
89537db)
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.
my @buf;
my $npurge = 0;
my @oids;
my @buf;
my $npurge = 0;
my @oids;
my $tree = $self->{-tree};
while (<$rd>) {
if (/^reset (?:.+)/) {
my $tree = $self->{-tree};
while (<$rd>) {
if (/^reset (?:.+)/) {
my $path = $1;
push @buf, $_ if $tree->{$path};
} elsif ($_ eq "\n") {
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 = ();
$w->print(@buf, "\n") or wfail;
@buf = ();
+ } elsif ($_ eq "done\n") {
+ $done = 1;
+ } elsif (/^mark :(\d+)$/) {
+ push @buf, $_;
+ $mark = $1;
} else {
push @buf, $_;
}
} else {
push @buf, $_;
}
if (@buf) {
$w->print(@buf) or wfail;
}
if (@buf) {
$w->print(@buf) or wfail;
}
+ 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}");
$self->done;
my @git = ('git', "--git-dir=$git->{git_dir}");
+ _update_git_info($self, 0);
die "Failed to purge $err object(s)\n" if $err;
die "Failed to purge $err object(s)\n" if $err;
my ($self, $purge) = @_; # $purge = { $object_id => 1, ... }
$self->done;
my $pfx = "$self->{-inbox}->{mainrepo}/git";
my ($self, $purge) = @_; # $purge = { $object_id => 1, ... }
$self->done;
my $pfx = "$self->{-inbox}->{mainrepo}/git";
foreach my $i (0..$self->{max_git}) {
my $git = PublicInbox::Git->new("$pfx/$i.git");
my $im = $self->import_init($git, 0);
foreach my $i (0..$self->{max_git}) {
my $git = PublicInbox::Git->new("$pfx/$i.git");
my $im = $self->import_init($git, 0);
- $im->purge_oids($purge);
+ $purges->[$i] = $im->purge_oids($purge);
$self->barrier;
}
if ($purge && scalar keys %$purge) {
$self->barrier;
}
if ($purge && scalar keys %$purge) {
- purge_oids($self, $purge);
+ return purge_oids($self, $purge);
{
ok($im->add($mime), 'add message to be purged');
local $SIG{__WARN__} = sub {};
{
ok($im->add($mime), 'add message to be purged');
local $SIG{__WARN__} = sub {};
- ok($im->purge($mime), 'purged message');
+ ok(my $cmts = $im->purge($mime), 'purged message');
+ like($cmts->[0], qr/\A[a-f0-9]{40}\z/, 'purge returned current commit');