From 9c9170688649c975d866b5326b12623dc8f4604b Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 4 Jul 2018 10:50:25 +0000 Subject: v2: fill alternates with old epochs on init from mirrors 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 https://public-inbox.org/meta/871scj2vzi.fsf@xmission.com/ --- lib/PublicInbox/V2Writable.pm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lib') 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 } -- cgit v1.2.3-24-ge0c7