]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_mirror: handle forkgroup changes
authorEric Wong <e@80x24.org>
Mon, 28 Nov 2022 05:32:32 +0000 (05:32 +0000)
committerEric Wong <e@80x24.org>
Mon, 28 Nov 2022 23:39:00 +0000 (23:39 +0000)
Forkgroups for projects are not static and may change at
the whim of the remote sysadmin.  Ensure we can migrate
to the new forkgroup.

Old forkgroups do not get pruned, yet, and their entries
stay in alternates.

lib/PublicInbox/LeiMirror.pm

index d4b146997c368876298d83f03f59e39aefa385a8..33cf55aba2536dfc0f3d298cea9a8849e42a0a06 100644 (file)
@@ -428,20 +428,9 @@ sub forkgroup_prep {
        my $key = $self->{-key} // die 'BUG: no -key';
        my $rn = substr(sha256_hex($key), 0, 16);
        if (!-d $self->{cur_dst} && !$self->{dry_run}) {
-               my $alt = File::Spec->rel2abs("$dir/objects");
                PublicInbox::Import::init_bare($self->{cur_dst});
-               my $o = "$self->{cur_dst}/objects";
-               my $f = "$o/info/alternates";
-               my $l = File::Spec->abs2rel($alt, File::Spec->rel2abs($o));
-               open my $fh, '+>>', $f or die "open($f): $!";
-               seek($fh, SEEK_SET, 0) or die "seek($f): $!";
-               chomp(my @cur = <$fh>);
-               if (!grep(/\A\Q$l\E\z/, @cur)) {
-                       say $fh $l or die "say($f): $!";
-               }
-               close $fh or die "close($f): $!";
-               $f = "$self->{cur_dst}/config";
-               open $fh, '+>>', $f or die "open:($f): $!";
+               my $f = "$self->{cur_dst}/config";
+               open my $fh, '+>>', $f or die "open:($f): $!";
                print $fh <<EOM or die "print($f): $!";
 ; rely on the "$rn" remote in the
 ; $fg fork group for fetches
@@ -453,6 +442,19 @@ sub forkgroup_prep {
 EOM
                close $fh or die "close($f): $!";
        }
+       if (!$self->{dry_run}) {
+               my $alt = File::Spec->rel2abs("$dir/objects");
+               my $o = "$self->{cur_dst}/objects";
+               my $f = "$o/info/alternates";
+               my $l = File::Spec->abs2rel($alt, File::Spec->rel2abs($o));
+               open my $fh, '+>>', $f or die "open($f): $!";
+               seek($fh, SEEK_SET, 0) or die "seek($f): $!";
+               chomp(my @cur = <$fh>);
+               if (!grep(/\A\Q$l\E\z/, @cur)) {
+                       say $fh $l or die "say($f): $!";
+               }
+               close $fh or die "close($f): $!";
+       }
        bless {
                %$self, -osdir => $dir, -remote => $rn, -uri => $uri
        }, __PACKAGE__;