From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id E84B31FA12 for ; Thu, 20 Aug 2020 20:24:58 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 05/23] init: support --newsgroup option Date: Thu, 20 Aug 2020 20:24:39 +0000 Message-Id: <20200820202457.21042-6-e@yhbt.net> In-Reply-To: <20200820202457.21042-1-e@yhbt.net> References: <20200820202457.21042-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We can reduce the need to edit the config file for NNTP group names this way. --- Documentation/public-inbox-config.pod | 2 +- Documentation/public-inbox-init.pod | 25 +++++++++++++++++++++---- script/public-inbox-init | 12 ++++++++++-- t/imapd.t | 6 ++---- t/nntpd.t | 9 +++------ 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Documentation/public-inbox-config.pod b/Documentation/public-inbox-config.pod index 05b84819..1dfb926e 100644 --- a/Documentation/public-inbox-config.pod +++ b/Documentation/public-inbox-config.pod @@ -63,7 +63,7 @@ Default: none, optional =item publicinbox..newsgroup The NNTP group name for use with L. This -may be any newsgroup name with hierarchies delimited by '.'. +may be any newsgroup name with hierarchies delimited by C<.>. For example, the newsgroup for L is: C diff --git a/Documentation/public-inbox-init.pod b/Documentation/public-inbox-init.pod index d0c87563..240959eb 100644 --- a/Documentation/public-inbox-init.pod +++ b/Documentation/public-inbox-init.pod @@ -39,6 +39,21 @@ See L for more information. Default: C +=item --ng, --newsgroup NEWSGROUP + +The NNTP group name for use with L. This +may be any newsgroup name with hierarchies delimited by C<.>. +For example, the newsgroup for L +is: C + +This may be set after-the-fact via C +in the configuration file. See L for more +info. + +Available since public-inbox 1.6.0 (PENDING). + +Default: none. + =item -N, --skip-artnum This option allows archivists to publish incomplete archives @@ -94,10 +109,12 @@ Used to override the default C<~/.public-inbox/config> value. =head1 LIMITATIONS -This tool predates NNTP support in public-inbox and is missing -C and many of the options documented in -L. See L for all the -options which may be applied to a given inbox. +Some of the options documented in L +require editing the config file. Old versions lack the +C<-n>/C<--newsgroup> parameter + +See L for all the options which may be applied +to a given inbox. =head1 CONTACT diff --git a/script/public-inbox-init b/script/public-inbox-init index 6852f64a..90b32be8 100755 --- a/script/public-inbox-init +++ b/script/public-inbox-init @@ -22,6 +22,7 @@ options: -V2 use scalable public-inbox-v2-format(5) -L LEVEL index level `basic', `medium', or `full' (default: full) + --ng NEWSGROUP set NNTP newsgroup name --skip-artnum=NUM NNTP article numbers to skip --skip-epoch=NUM epochs to skip (-V2 only) -J JOBS number of indexing jobs (-V2 only), (default: 4) @@ -33,12 +34,14 @@ require PublicInbox::Admin; PublicInbox::Admin::require_or_die('-base'); my ($version, $indexlevel, $skip_epoch, $skip_artnum, $jobs, $show_help); +my $ng = ''; my %opts = ( 'V|version=i' => \$version, 'L|index-level|indexlevel=s' => \$indexlevel, 'S|skip|skip-epoch=i' => \$skip_epoch, 'N|skip-artnum=i' => \$skip_artnum, 'j|jobs=i' => \$jobs, + 'ng|newsgroup=s' => \$ng, 'help|?' => \$show_help, ); my $usage_cb = sub { @@ -53,7 +56,11 @@ my $inboxdir = shift @ARGV or $usage_cb->(); my $http_url = shift @ARGV or $usage_cb->(); my (@address) = @ARGV; @address or $usage_cb->(); -my %seen; + +$ng =~ m![^A-Za-z0-9/_\.\-\~\@\+\=:]! and + die "--newsgroup `$ng' is not valid\n"; +($ng =~ m!\A\.! || $ng =~ m!\.\z!) and + die "--newsgroup `$ng' must not start or end with `.'\n"; require PublicInbox::Config; my $pi_config = PublicInbox::Config->default_file; @@ -84,7 +91,7 @@ sysopen($lockfh, $lockfile, O_RDWR|O_CREAT|O_EXCL) or do { exit(255); }; my $auto_unlink = UnlinkMe->new($lockfile); -my $perm; +my ($perm, %seen); if (-e $pi_config) { open(my $oh, '<', $pi_config) or die "unable to read $pi_config: $!\n"; my @st = stat($oh); @@ -185,6 +192,7 @@ PublicInbox::Import::run_die([@x, "$pfx.inboxdir", $inboxdir]); if (defined($indexlevel)) { PublicInbox::Import::run_die([@x, "$pfx.indexlevel", $indexlevel]); } +PublicInbox::Import::run_die([@x, "$pfx.newsgroup", $ng]) if $ng ne ''; # needed for git prior to v2.1.0 if (defined $perm) { diff --git a/t/imapd.t b/t/imapd.t index 6cfced41..4d627af7 100644 --- a/t/imapd.t +++ b/t/imapd.t @@ -39,11 +39,9 @@ for my $V (@V) { my $url = "http://example.com/i$V"; my $inboxdir = "$tmpdir/$name"; my $folder = "inbox.i$V"; - my $cmd = ['-init', "-V$V", "-L$level", $name, $inboxdir, $url, $addr]; + my $cmd = ['-init', "-V$V", "-L$level", "--ng=$folder", + $name, $inboxdir, $url, $addr]; run_script($cmd) or BAIL_OUT("init $name"); - xsys(qw(git config), "--file=$ENV{HOME}/.public-inbox/config", - "publicinbox.$name.newsgroup", $folder) == 0 or - BAIL_OUT("setting newsgroup $V"); if ($V == 1) { xsys(qw(git config), "--file=$ENV{HOME}/.public-inbox/config", 'publicinboxmda.spamcheck', 'none') == 0 or diff --git a/t/nntpd.t b/t/nntpd.t index b9b9a63d..74e21a41 100644 --- a/t/nntpd.t +++ b/t/nntpd.t @@ -46,14 +46,11 @@ my $ibx = { $ibx = PublicInbox::Inbox->new($ibx); { local $ENV{HOME} = $home; - my @cmd = ('-init', $group, $inboxdir, 'http://example.com/', $addr); - push @cmd, "-V$version", '-Lbasic'; + my @cmd = ('-init', $group, $inboxdir, 'http://example.com/', $addr, + "-V$version", '-Lbasic', '--newsgroup', $group); ok(run_script(\@cmd), 'init OK'); - is(xsys(qw(git config), "--file=$home/.public-inbox/config", - "publicinbox.$group.newsgroup", $group), - 0, 'enabled newsgroup'); - my $len; + my $len; $ibx = PublicInbox::InboxWritable->new($ibx); my $im = $ibx->importer(0);