]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/WwwStream.pm
wwwstream: always show multi-line cloning instructions
[public-inbox.git] / lib / PublicInbox / WwwStream.pm
index 01f7b31ba186001723d21dcbe2d3291e5f4383bc..d39f551176dfe2ecf266ebe8c221512903691cca 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 all contributors <meta@public-inbox.org>
+# Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 #
 # HTML body stream for which yields getline+close methods
@@ -72,22 +72,52 @@ sub _html_end {
        my $obj = $ctx->{-inbox};
        my $desc = ascii_html($obj->description);
 
+       my (%seen, @urls);
        my $http = $obj->base_url($ctx->{env});
-       chop $http;
-       my %seen = ( $http => 1 );
-       my @urls = ($http);
+       chop $http; # no trailing slash for clone
+       my $part = $obj->max_git_part;
+       my $dir = (split(m!/!, $http))[-1];
+       if (defined($part)) { # v2
+               $seen{$http} = 1;
+               for my $i (0..$part) {
+                       # old parts my be deleted:
+                       -d "$obj->{mainrepo}/git/$i.git" or next;
+                       my $url = "$http/$i";
+                       $seen{$url} = 1;
+                       push @urls, "$url $dir/git/$i.git";
+               }
+       } else { # v1
+               $seen{$http} = 1;
+               push @urls, $http;
+       }
+
+       # FIXME: partitioning in can be different in other repositories,
+       # use the "cloneurl" file as-is for now:
        foreach my $u (@{$obj->cloneurl}) {
                next if $seen{$u};
                $seen{$u} = 1;
                push @urls, $u =~ /\Ahttps?:/ ? qq(<a\nhref="$u">$u</a>) : $u;
        }
-       if (scalar(@urls) == 1) {
-               $urls .= " git clone --mirror $http";
-       } else {
+
+       if (defined($part) || scalar(@urls) > 1) {
                $urls .= "\n" .
                        join("\n", map { "\tgit clone --mirror $_" } @urls);
+       } else {
+               $urls .= " git clone --mirror $urls[0]";
        }
+       if (defined $part) {
+               my $addrs = $obj->{address};
+               $addrs = join(' ', @$addrs) if ref($addrs) eq 'ARRAY';
+               $urls .=  <<EOF
 
+
+       # If you have public-inbox 1.1+ installed, you may
+       # initialize and index your mirror using the following commands:
+       public-inbox-init -V2 $obj->{name} $dir/ $http \\
+               $addrs
+       public-inbox-index $dir
+EOF
+       }
        my @nntp = map { qq(<a\nhref="$_">$_</a>) } @{$obj->nntp_url};
        if (@nntp) {
                $urls .= "\n\n";