# Copyright (C) 2016 all contributors # License: AGPL-3.0+ # # Represents a public-inbox (which may have multiple mailing addresses) package PublicInbox::Inbox; use strict; use warnings; use Scalar::Util qw(weaken); use PublicInbox::Git; sub new { my ($class, $opts) = @_; bless $opts, $class; } sub weaken_all { my ($self) = @_; weaken($self->{$_}) foreach qw(git mm search); } sub git { my ($self) = @_; $self->{git} ||= eval { PublicInbox::Git->new($self->{mainrepo}) }; } sub mm { my ($self) = @_; $self->{mm} ||= eval { PublicInbox::Msgmap->new($self->{mainrepo}) }; } sub search { my ($self) = @_; $self->{search} ||= eval { PublicInbox::Search->new($self->{mainrepo}) }; } sub try_cat { my ($path) = @_; my $rv = ''; if (open(my $fh, '<', $path)) { local $/; $rv = <$fh>; } $rv; } sub description { my ($self) = @_; my $desc = $self->{description}; return $desc if defined $desc; $desc = try_cat("$self->{mainrepo}/description"); chomp $desc; $desc =~ s/\s+/ /smg; $desc = '($GIT_DIR/description missing)' if $desc eq ''; $self->{description} = $desc; } sub cloneurl { my ($self) = @_; my $url = $self->{cloneurl}; return $url if $url; $url = try_cat("$self->{mainrepo}/cloneurl"); my @url = split(/\s+/s, $url); chomp @url; $self->{cloneurl} = \@url; } sub footer_html { my ($self) = @_; my $footer = $self->{footer}; return $footer if defined $footer; $footer = try_cat("$self->{mainrepo}/public-inbox/footer.html"); chomp $footer; $self->{footer} = $footer; } 1;