diff options
author | Eric Wong <e@80x24.org> | 2018-07-04 10:50:25 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2018-07-04 19:53:30 +0000 |
commit | 9c9170688649c975d866b5326b12623dc8f4604b (patch) | |
tree | 9d793a50bbf642354ab7ea6b349ff3c39944eb8e /lib/PublicInbox/V2Writable.pm | |
parent | 4cf7804c2b263e4a92447315f534f76416d4ffad (diff) | |
download | public-inbox-9c9170688649c975d866b5326b12623dc8f4604b.tar.gz |
For v2 repositories with multiple epochs, we must not forget about earlier epochs in clones. Ensure we update the alternates file with all known epochs up to the current one. Reported-by: Eric W. Biederman <ebiederm@xmission.com> https://public-inbox.org/meta/871scj2vzi.fsf@xmission.com/
Diffstat (limited to 'lib/PublicInbox/V2Writable.pm')
-rw-r--r-- | lib/PublicInbox/V2Writable.pm | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index d8d75ec2..412eb6a9 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -495,15 +495,21 @@ sub git_init { PublicInbox::Import::run_die(\@cmd); my $alt = "$all/objects/info/alternates"; - my $new_obj_dir = "../../git/$epoch.git/objects"; my %alts; + my @add; if (-e $alt) { open(my $fh, '<', $alt) or die "open < $alt: $!\n"; %alts = map { chomp; $_ => 1 } (<$fh>); } - return $git_dir if $alts{$new_obj_dir}; + foreach my $i (0..$epoch) { + my $dir = "../../git/$i.git/objects"; + push @add, $dir if !$alts{$dir} && -d "$pfx/$i.git"; + } + return $git_dir unless @add; open my $fh, '>>', $alt or die "open >> $alt: $!\n"; - print $fh "$new_obj_dir\n" or die "print >> $alt: $!\n"; + foreach my $dir (@add) { + print $fh "$dir\n" or die "print >> $alt: $!\n"; + } close $fh or die "close $alt: $!\n"; $git_dir } |