]> Sergey Matveev's repositories - public-inbox.git/blob - script/public-inbox-fetch
tests: add tests for cloning coderepos w/ manifest
[public-inbox.git] / script / public-inbox-fetch
1 #!perl -w
2 # Copyright (C) all contributors <meta@public-inbox.org>
3 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
4 # Wrapper to git fetch remote public-inboxes
5 use v5.12;
6 use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
7 my $opt = {};
8 my $help = <<EOF; # the following should fit w/o scrolling in 80x24 term:
9 usage: public-inbox-fetch -C DESTINATION
10
11   fetch remote public-inboxes
12
13 options:
14
15   --torsocks VAL      whether or not to wrap git and curl commands with
16                       torsocks (default: `auto')
17                       Must be one of: `auto', `no' or `yes'
18   -T NAME             Name of remote(s) to try (may be repeated)
19                       default: `origin' and `_grokmirror'
20   --exit-code         exit with 127 if no updates
21   --verbose | -v      increase verbosity (may be repeated)
22     --quiet | -q      increase verbosity (may be repeated)
23     -C DIR            chdir to specified directory
24 EOF
25 GetOptions($opt, qw(help|h quiet|q verbose|v+ C=s@ c=s@ try-remote|T=s@
26         prune|p
27         no-torsocks torsocks=s exit-code)) or die $help;
28 if ($opt->{help}) { print $help; exit };
29 require PublicInbox::Fetch; # loads Admin
30 PublicInbox::Admin::do_chdir(delete $opt->{C});
31 PublicInbox::Admin::setup_signals();
32 $SIG{PIPE} = 'IGNORE';
33
34 my $lei = bless {
35         env => \%ENV, opt => $opt, cmd => 'public-inbox-fetch',
36         0 => *STDIN{GLOB}, 1 => *STDOUT{GLOB}, 2 => *STDERR{GLOB},
37 }, 'PublicInbox::LEI';
38 PublicInbox::Fetch->do_fetch($lei, '.');
39 exit(($lei->{child_error} // 0) >> 8);