-# Copyright (C) 2016-2019 all contributors <meta@public-inbox.org>
+# Copyright (C) 2016-2020 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
#
# Represents a public-inbox (which may have multiple mailing addresses)
sub cleanup_possible () {
# no need to require DS, here, if it were enabled another
# module would've require'd it, already
- eval { $PublicInbox::DS::in_loop } or return 0;
+ eval { PublicInbox::DS::in_loop() } or return 0;
eval {
require Devel::Peek; # needs separate package in Fedora
bless $opts, $class;
}
+sub version { $_[0]->{version} // 1 }
+
sub git_epoch {
my ($self, $epoch) = @_;
- ($self->{version} || 1) == 2 or return;
+ $self->version == 2 or return;
$self->{"$epoch.git"} ||= eval {
my $git_dir = "$self->{inboxdir}/git/$epoch.git";
my $g = PublicInbox::Git->new($git_dir);
my ($self) = @_;
$self->{git} ||= eval {
my $git_dir = $self->{inboxdir};
- $git_dir .= '/all.git' if (($self->{version} || 1) == 2);
+ $git_dir .= '/all.git' if $self->version == 2;
my $g = PublicInbox::Git->new($git_dir);
$g->{-httpbackend_limiter} = $self->{-httpbackend_limiter};
_cleanup_later($self);
sub max_git_epoch {
my ($self) = @_;
- my $v = $self->{version};
- return unless defined($v) && $v == 2;
+ return if $self->version < 2;
my $cur = $self->{-max_git_epoch};
my $changed = git($self)->alternates_changed;
if (!defined($cur) || $changed) {
require PublicInbox::Msgmap;
_cleanup_later($self);
my $dir = $self->{inboxdir};
- if (($self->{version} || 1) >= 2) {
+ if ($self->version >= 2) {
PublicInbox::Msgmap->new_file("$dir/msgmap.sqlite3");
} else {
PublicInbox::Msgmap->new($dir);
sub description {
my ($self) = @_;
- my $desc = $self->{description};
- return $desc if defined $desc;
- $desc = try_cat("$self->{inboxdir}/description");
- local $/ = "\n";
- chomp $desc;
- $desc =~ s/\s+/ /smg;
- $desc = '($INBOX_DIR/description missing)' if $desc eq '';
- $self->{description} = $desc;
+ $self->{description} //= do {
+ my $desc = try_cat("$self->{inboxdir}/description");
+ local $/ = "\n";
+ chomp $desc;
+ $desc =~ s/\s+/ /smg;
+ $desc eq '' ? '($INBOX_DIR/description missing)' : $desc;
+ };
}
sub cloneurl {
my ($self) = @_;
- my $url = $self->{cloneurl};
- return $url if $url;
- $url = try_cat("$self->{inboxdir}/cloneurl");
- my @url = split(/\s+/s, $url);
- local $/ = "\n";
- chomp @url;
- $self->{cloneurl} = \@url;
+ $self->{cloneurl} //=
+ [ split(/\s+/s, try_cat("$self->{inboxdir}/cloneurl")) ];
}
sub base_url {
# nntp://news.example.com/alt.example
push @m, $u;
}
- my %seen = map { $_ => 1 } @urls;
- foreach my $u (@m) {
- next if $seen{$u};
- $seen{$u} = 1;
- push @urls, $u;
- }
+
+ # List::Util::uniq requires Perl 5.26+, maybe we
+ # can use it by 2030 or so
+ my %seen;
+ @urls = grep { !$seen{$_}++ } (@urls, @m);
}
\@urls;
};
$ret;
}
+# for v1 users w/o SQLite only
sub msg_by_path ($$;$) {
my ($self, $path, $ref) = @_;
- # TODO: allow other refs:
my $str = git($self)->cat_file('HEAD:'.$path, $ref);
$$str =~ s/\A[\r\n]*From [^\r\n]*\r?\n//s if $str;
$str;