]> Sergey Matveev's repositories - public-inbox.git/commitdiff
Merge commit 'mem'
authorEric Wong <e@80x24.org>
Thu, 10 Jan 2019 21:41:55 +0000 (21:41 +0000)
committerEric Wong <e@80x24.org>
Thu, 10 Jan 2019 21:41:55 +0000 (21:41 +0000)
* commit 'mem':
  view: more culling for search threads
  over: cull unneeded fields for get_thread
  searchmsg: remove unused fields for PSGI in Xapian results
  searchview: drop unused {seen} hashref
  searchmsg: remove Xapian::Document field
  searchmsg: get rid of termlist scanning for mid
  httpd: remove psgix.harakiri reference

38 files changed:
INSTALL
lib/PublicInbox/AltId.pm
lib/PublicInbox/ContentId.pm
lib/PublicInbox/Daemon.pm
lib/PublicInbox/GetlineBody.pm
lib/PublicInbox/GitHTTPBackend.pm
lib/PublicInbox/HTTPD.pm
lib/PublicInbox/Import.pm
lib/PublicInbox/Mbox.pm
lib/PublicInbox/MsgIter.pm
lib/PublicInbox/MsgTime.pm
lib/PublicInbox/Reply.pm
lib/PublicInbox/SaPlugin/ListMirror.pm
lib/PublicInbox/SearchIdx.pm
lib/PublicInbox/SearchIdxPart.pm
lib/PublicInbox/SearchMsg.pm
lib/PublicInbox/Spamcheck.pm
lib/PublicInbox/Spamcheck/Spamc.pm
lib/PublicInbox/SpawnPP.pm
lib/PublicInbox/V2Writable.pm
lib/PublicInbox/WwwAtomStream.pm
lib/PublicInbox/WwwStream.pm
lib/PublicInbox/WwwText.pm
t/altid_v2.t
t/common.perl
t/convert-compact.t
t/import.t
t/init.t
t/mda_filter_rubylang.t
t/nntpd.t
t/psgi_v2.t
t/v1reindex.t
t/v2-add-remove-add.t
t/v2mda.t
t/v2mirror.t
t/v2reindex.t
t/v2writable.t
t/watch_maildir_v2.t

diff --git a/INSTALL b/INSTALL
index aa4afb57a880f56afc22acc63ba00be28dc57a6b..a89c8907e4552737366d382df972f4f5b3d318ce 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -5,6 +5,13 @@ This is for folks who want to setup their own public-inbox instance.
 Clients should use normal git-clone/git-fetch, or NNTP clients
 if they want to import mail into their personal inboxes.
 
+public-inbox is developed on Debian GNU/Linux systems and will
+never depend on packages outside of the "main" component of
+the "stable" distribution, currently Debian 9.x ("stretch")
+
+Most packages are available in other GNU/Linux distributions;
+and FreeBSD support can happen.
+
 TODO: this still needs to be documented better,
 also see the scripts/ and sa_config/ directories in the source tree
 
@@ -14,8 +21,8 @@ Requirements
 public-inbox requires a number of other packages to access its full
 functionality.  The core tools are, of course:
 
-* Git
-* Perl
+* Git (1.8.0+, 2.6+ for writing v2 repositories)
+* Perl 5.8+
 * SQLite (needed for Xapian use)
 
 To accept incoming mail into a public inbox, you'll likely want:
@@ -25,7 +32,7 @@ To accept incoming mail into a public inbox, you'll likely want:
 
 Beyond that, there is a long list of Perl modules required, starting with:
 
-* Date::Parse                   deb: libdatetime-perl
+* Date::Parse                   deb: libtimedate-perl
                                 rpm: perl-Time-ParseDate
 
 * Email::MIME                   deb: libemail-mime-perl
@@ -50,10 +57,6 @@ Where "deb" indicates package names for Debian-derived distributions and
 
 Numerous optional modules are likely to be useful as well:
 
-  - Socket6                    deb: libsocket6-perl
-                               rpm: perl-Socket6
-                               (for IPv6 support)
-
   - Search::Xapian             deb: libsearch-xapian-perl
                                rpm: perl-Search-Xapian
                                (for NNTP service or gzipped mbox over HTTP)
@@ -76,14 +79,15 @@ Numerous optional modules are likely to be useful as well:
 
   - Net::Server                deb: libnet-server-perl
                                rpm: perl-Net-Server
-                               (for HTTP/NNTP servers as standalone daemons)
+                               (for HTTP/NNTP servers as standalone daemons,
+                                not needed as systemd services)
 
   - Filesys::Notify::Simple    deb: libfilesys-notify-simple-perl
                                rpm: perl-Filesys-Notify-Simple
                                (for public-inbox-watch)
 
   - Inline::C[7]               deb: libinline-c-perl
-                               (speeds up spawning on Linux
+                               (speeds up spawning of git(1) on Linux
                                 (see public-inbox-daemon(8))
 
   - Plack::Middleware::ReverseProxy
@@ -99,6 +103,11 @@ Numerous optional modules are likely to be useful as well:
                                rpm: perl-Plack-Middleware-Deflater
                                (saves bandwidth on responses)
 
+  - Socket6                    deb: libsocket6-perl
+                               rpm: perl-Socket6
+                               (pulled in by SpamAssassin and Net::Server,
+                                only necessary if using IPv6 with
+                                Plack::Middleware::AccessLog or similar)
 
 On Fedora systems, you'll probably also end up wanting
 perl-Test-HTTP-Server-Simple, perl-Devel-Peek, and perl-IPC-Run to run the
index 4a6ff97cc5e4aca470504123bbc30ce68dac6744..300bdc0b49fbda3d561c4037ab812ce732ac79b1 100644 (file)
@@ -1,12 +1,21 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
+# Used for giving serial numbers to messages.  This can be tied to
+# the msgmap for live updates to living lists (see
+# PublicInbox::Filters::RubyLang), or kept separate for imports
+# of defunct NNTP groups (e.g. scripts/xhdr-num2mid)
+#
+# Introducing NEW uses of serial numbers is discouraged because of
+# it leads to reliance on centralization.  However, being able
+# to use existing serial numbers is beneficial.
 package PublicInbox::AltId;
 use strict;
 use warnings;
 use URI::Escape qw(uri_unescape);
 
 # spec: TYPE:PREFIX:param1=value1&param2=value2&...
+# The PREFIX will be a searchable boolean prefix in Xapian
 # Example: serial:gmane:file=/path/to/altmsgmap.sqlite3
 sub new {
        my ($class, $inbox, $spec, $writable) = @_;
index dd3155befefbd2d628683e6099847e72a34aec5a..9baf0e76a3e33c3d32502061c93ceb15b4028e33 100644 (file)
@@ -1,6 +1,11 @@
 # Copyright (C) 2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
+# Unstable internal API.
+# Used for on-the-fly duplicate detection in V2 inboxes.
+# This is not stored in any database anywhere and may change
+# as changes in duplicate detection are needed.
+# See L<public-inbox-v2-format(5)> manpage for more details.
 package PublicInbox::ContentId;
 use strict;
 use warnings;
index 6d2ae81bc1694dcc3c9fbf1ae2cbf7b249c3153d..6aa4a1943044ca4002eb38e84e0c470b7e734058 100644 (file)
@@ -234,6 +234,21 @@ sub sockname ($) {
        "$host:$port";
 }
 
+sub unpack_ipv6 ($) {
+       my ($addr) = @_;
+
+       # TODO: support IO::Socket::IP which comes with Perl 5.24
+       # (perl-modules-5.24 in Debian)
+
+       # SpamAssassin and Net::Server use Socket6, so it may be installed
+       # on our system, already:
+       eval { require Socket6 } or return ('???-Socket6-missing', 0);
+
+       my ($port, $host) = Socket6::unpack_sockaddr_in6($addr);
+       $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host);
+       ($host, $port);
+}
+
 sub host_with_port ($) {
        my ($addr) = @_;
        my ($port, $host);
@@ -241,9 +256,7 @@ sub host_with_port ($) {
        # this eval will die on Unix sockets:
        eval {
                if (length($addr) >= 28) {
-                       require Socket6;
-                       ($port, $host) = Socket6::unpack_sockaddr_in6($addr);
-                       $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host);
+                       ($host, $port) = unpack_ipv6($addr);
                        $host = "[$host]";
                } else {
                        ($port, $host) = Socket::sockaddr_in($addr);
index 7fcd7c03554cb7791136ad4a14dc3f917b890f8c..ea07f3d6dd0de1d031012c62372754dbc91acd49 100644 (file)
@@ -4,6 +4,10 @@
 # Wrap a pipe or file for PSGI streaming response bodies and calls the
 # end callback when the object goes out-of-scope.
 # This depends on rpipe being _blocking_ on getline.
+#
+# public-inbox-httpd favors "getline" response bodies to take a
+# "pull"-based approach to feeding slow clients (as opposed to a
+# more common "push" model)
 package PublicInbox::GetlineBody;
 use strict;
 use warnings;
index 6efe5b31d485086b0f4c4825a98b52c5180d9e60..54ccfa05c555ec193f7eea188806d449a9ab1515 100644 (file)
@@ -2,7 +2,7 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
 # when no endpoints match, fallback to this and serve a static file
-# or smart HTTP
+# or smart HTTP.  This is our wrapper for git-http-backend(1)
 package PublicInbox::GitHTTPBackend;
 use strict;
 use warnings;
index 905afbb89b345404135733c2edbd0dc1cf44a31a..38517710a414d00ee36d21b069de90953ffa4b08 100644 (file)
@@ -1,6 +1,8 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
+# wraps a listen socket for HTTP and links it to the PSGI app in
+# public-inbox-httpd
 package PublicInbox::HTTPD;
 use strict;
 use warnings;
index 29c482f9b4339b09089421723f3991b24e57f553..fd4255cf867d6ca1a40dcce1fe19265f536803e6 100644 (file)
@@ -2,8 +2,9 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 #
 # git fast-import-based ssoma-mda MDA replacement
-# This is only ever run by public-inbox-mda and public-inbox-learn,
-# not the WWW or NNTP code which only requires read-only access.
+# This is only ever run by public-inbox-mda, public-inbox-learn
+# and public-inbox-watch. Not the WWW or NNTP code which only
+# requires read-only access.
 package PublicInbox::Import;
 use strict;
 use warnings;
index 11b23022ff5ed8270af2f5f70ad0bbf3524c08af..78dbe27e30a0366c7788a6edc004728556312e0e 100644 (file)
@@ -1,8 +1,12 @@
 # Copyright (C) 2015-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
-# Streaming interface for formatting messages as an mboxrd.
-# Used by the web interface
+# Streaming (via getline) interface for formatting messages as an mboxrd.
+# Used by the PSGI web interface.
+#
+# public-inbox-httpd favors "getline" response bodies to take a
+# "pull"-based approach to feeding slow clients (as opposed to a
+# more common "push" model)
 package PublicInbox::Mbox;
 use strict;
 use warnings;
index 9e2d797fecc240d4f191ba8f3fe7fd84b410148e..eb94d621d73cdbcde4fee70d93a52fe3ba4d8f1d 100644 (file)
@@ -1,6 +1,7 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
-#
+
+# read-only utilities for Email::MIME
 package PublicInbox::MsgIter;
 use strict;
 use warnings;
index f3ebb6447a9cfe341b381beb9f19671b01caf331..62160233f78d627d0bfc9c2e24b72f634d42005b 100644 (file)
@@ -1,5 +1,7 @@
 # Copyright (C) 2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# Various date/time-related functions
 package PublicInbox::MsgTime;
 use strict;
 use warnings;
index 11e17ede716a0f7effc12080f2461e9ac6344748..0f6dd83bc3f5e3db9716cdce58f93d701dcdfd1f 100644 (file)
@@ -1,5 +1,7 @@
 # Copyright (C) 2014-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# For reply instructions and address generation in WWW UI
 package PublicInbox::Reply;
 use strict;
 use warnings;
index f2071dd56a5b8344d55a8feae824368ec3fb21ca..31f926fa7b11afe467f999d099b7dadeacc93c4f 100644 (file)
@@ -1,7 +1,7 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
-# Rules useful for running a mailing list mirror.  We want to:
+# SpamAssassin rules useful for running a mailing list mirror.  We want to:
 # * ensure Received: headers are really from the list mail server
 #   users expect.  This is to prevent malicious users from
 #   injecting spam into mirrors without going through the expected
index 7a8ebf356efe7cb2910cd5ee5f7e14d10a423f10..8810fe76450dde64728d715e4e63f14b3c6bb741 100644 (file)
@@ -646,6 +646,7 @@ sub _git_log {
                                --raw -r --no-abbrev/, $range);
 }
 
+# --is-ancestor requires git 1.8.0+
 sub is_ancestor ($$$) {
        my ($git, $cur, $tip) = @_;
        return 0 unless $git->check($cur);
index 078d2df18d931235bc0f0087e08c6f89342583eb..7fe2120a425488eb0c076aeb35825dd681101081 100644 (file)
@@ -1,5 +1,8 @@
 # Copyright (C) 2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# used to interface with a single Xapian partition in V2 repos.
+# See L<public-inbox-v2-format(5)> for more info on how we partition Xapian
 package PublicInbox::SearchIdxPart;
 use strict;
 use warnings;
index 722a1b9428fba760591452f67a044a1af8ba812d..ceb6edadded21431bf2ca3793b254ee0b1fcd7b7 100644 (file)
@@ -3,6 +3,8 @@
 # based on notmuch, but with no concept of folders, files or flags
 #
 # Wraps a document inside our Xapian search index.
+# There may be many of these objects loaded in memory at once
+# for large threads in our WWW UI.
 package PublicInbox::SearchMsg;
 use strict;
 use warnings;
index 062479d636f3c74785721b9cc96b9a57daa38860..54d54cbcf22989f14da3bda99b0cde924bf865b9 100644 (file)
@@ -1,5 +1,7 @@
 # Copyright (C) 2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# Spamchecking used by -watch and -mda tools
 package PublicInbox::Spamcheck;
 use strict;
 use warnings;
index a76e920f0210221a6345528c2c8fd8998033789f..88aa5315258c27b8ff7438d478148a29e0fc708d 100644 (file)
@@ -1,5 +1,7 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# Default spam filter class for wrapping spamc(1)
 package PublicInbox::Spamcheck::Spamc;
 use strict;
 use warnings;
index d0df94d0ded0f4cf179a2420a274e13da062be6d..743db224ad0b8609ce80927255c0c61f8f301baf 100644 (file)
@@ -1,5 +1,8 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# Pure-Perl implementation of "spawn".  This can't take advantage
+# of vfork, so no speedups under Linux for spawning from large processes.
 package PublicInbox::SpawnPP;
 use strict;
 use warnings;
index fbab8f70be8a3233f0b4cc2a6d776e7c02c13244..222df5c2ffa6d0cf3dae884ea734ee9973dc1619 100644 (file)
@@ -2,6 +2,7 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
 # This interface wraps and mimics PublicInbox::Import
+# Used to write to V2 inboxes (see L<public-inbox-v2-format(5)>).
 package PublicInbox::V2Writable;
 use strict;
 use warnings;
index 38eba2a044832b93c8d55672a92151c24a59da57..712c3dc88e34a3c210d6f74ac2ebd013c2863f91 100644 (file)
@@ -2,6 +2,9 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 #
 # Atom body stream for which yields getline+close methods
+# public-inbox-httpd favors "getline" response bodies to take a
+# "pull"-based approach to feeding slow clients (as opposed to a
+# more common "push" model)
 package PublicInbox::WwwAtomStream;
 use strict;
 use warnings;
index d39f551176dfe2ecf266ebe8c221512903691cca..e548f00f4a3ed024a9da56263860617b2638e60f 100644 (file)
@@ -2,6 +2,10 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 #
 # HTML body stream for which yields getline+close methods
+#
+# public-inbox-httpd favors "getline" response bodies to take a
+# "pull"-based approach to feeding slow clients (as opposed to a
+# more common "push" model)
 package PublicInbox::WwwStream;
 use strict;
 use warnings;
index e6d00ea9f00c48e27052f657a812a0e5bc3d3049..b5874cf6bad534a20daf060452884b463628440a 100644 (file)
@@ -1,6 +1,7 @@
 # Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
+# used for displaying help texts and other non-mail content
 package PublicInbox::WwwText;
 use strict;
 use warnings;
index 87f1452bf9ac4aec6a5a1038f089315639bbca20..e91a644c6dc06d8e3aef05db401ba9332ec40682 100644 (file)
@@ -4,6 +4,8 @@ use strict;
 use warnings;
 use Test::More;
 use File::Temp qw/tempdir/;
+require './t/common.perl';
+require_git(2.6);
 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
        eval "require $mod";
        plan skip_all => "$mod missing for altid_v2.t" if $@;
index 688e30ad99cbee6c39a186c289a42eca4d3465e3..e49a596524b17c5d559ed6f871bb80195e45fdef 100644 (file)
@@ -39,4 +39,18 @@ sub spawn_listener {
        $pid;
 }
 
+sub require_git ($;$) {
+       my ($req, $maybe) = @_;
+       my ($req_maj, $req_min) = split(/\./, $req);
+       my ($cur_maj, $cur_min) = (`git --version` =~ /version (\d+)\.(\d+)/);
+
+       my $req_int = ($req_maj << 24) | ($req_min << 16);
+       my $cur_int = ($cur_maj << 24) | ($cur_min << 16);
+       if ($cur_int < $req_int) {
+               return 0 if $maybe;
+               plan skip_all => "git $req+ required, have $git_ver";
+       }
+       1;
+}
+
 1;
index def03436231680c7b79e6fcc35939a7aca8a7fda..491486d5b05a8e2bdd99f7b604b81d70d99bfc75 100644 (file)
@@ -5,6 +5,8 @@ use warnings;
 use Test::More;
 use File::Temp qw/tempdir/;
 use PublicInbox::MIME;
+require './t/common.perl';
+require_git(2.6);
 my @mods = qw(DBD::SQLite Search::Xapian);
 foreach my $mod (@mods) {
        eval "require $mod";
index eee47447d3c9fbada1f9addee0f19423551e8cf4..e7733638f023fd4852963fe6d88b85da9f85e842 100644 (file)
@@ -11,6 +11,7 @@ use IO::File;
 use Fcntl qw(:DEFAULT);
 use File::Temp qw/tempdir tempfile/;
 my $dir = tempdir('pi-import-XXXXXX', TMPDIR => 1, CLEANUP => 1);
+require './t/common.perl';
 
 is(system(qw(git init -q --bare), $dir), 0, 'git init successful');
 my $git = PublicInbox::Git->new($dir);
@@ -27,11 +28,12 @@ my $mime = PublicInbox::MIME->create(
        ],
        body => "hello world\n",
 );
+my $v2 = require_git(2.6, 1);
 
-$im->{want_object_info} = 1 if 'v2';
+$im->{want_object_info} = 1 if $v2;
 like($im->add($mime), qr/\A:\d+\z/, 'added one message');
 
-if ('v2') {
+if ($v2) {
        my $info = $im->{last_object};
        like($info->[0], qr/\A[a-f0-9]{40}\z/, 'got last object_id');
        is($mime->as_string, ${$info->[2]}, 'string matches');
index 1551a304e6b7c7b28bb3b9e8b935f9a231f745cb..86b4eb5c72e67b74a3474b1aee2030e3d3b71cec 100644 (file)
--- a/t/init.t
+++ b/t/init.t
@@ -5,6 +5,7 @@ use warnings;
 use Test::More;
 use PublicInbox::Config;
 use File::Temp qw/tempdir/;
+require './t/common.perl';
 my $tmpdir = tempdir('pi-init-XXXXXX', TMPDIR => 1, CLEANUP => 1);
 use constant pi_init => 'blib/script/public-inbox-init';
 use PublicInbox::Import;
@@ -53,6 +54,7 @@ SKIP: {
                eval "require $mod";
                skip "$mod missing for v2", 2 if $@;
        }
+       require_git(2.6, 1) or skip "git 2.6+ required", 2;
        local $ENV{PI_DIR} = "$tmpdir/.public-inbox/";
        my $cfgfile = "$ENV{PI_DIR}/config";
        my @cmd = (pi_init, '-V2', 'v2list', "$tmpdir/v2list",
index 583a139f3b342ee7a6b55d85ae95c3563c327313..279afaac6e7c58d8928d7894217b6fc86f55232b 100644 (file)
@@ -6,6 +6,8 @@ use Test::More;
 use File::Temp qw/tempdir/;
 use PublicInbox::MIME;
 use PublicInbox::Config;
+require './t/common.perl';
+require_git(2.6);
 my @mods = qw(DBD::SQLite Search::Xapian IPC::Run);
 foreach my $mod (@mods) {
        eval "require $mod";
index d227b74d1835407507f1f83ba776d5dae796a804..6b13f81e7679f77a893442de74fadb4a48f0308e 100644 (file)
--- a/t/nntpd.t
+++ b/t/nntpd.t
@@ -18,6 +18,10 @@ use Net::NNTP;
 use Sys::Hostname;
 require './t/common.perl';
 
+# FIXME: make easier to test both versions
+my $version = $ENV{PI_VERSION} || 2;
+require_git('2.6') if $version == 2;
+
 my $tmpdir = tempdir('pi-nntpd-XXXXXX', TMPDIR => 1, CLEANUP => 1);
 my $home = "$tmpdir/pi-home";
 my $err = "$tmpdir/stderr.log";
@@ -30,10 +34,11 @@ my $init = 'blib/script/public-inbox-init';
 use_ok 'PublicInbox::Import';
 use_ok 'PublicInbox::Inbox';
 use_ok 'PublicInbox::Git';
-use_ok 'PublicInbox::V2Writable';
+SKIP: {
+       skip "git 2.6+ required for V2Writable", 1 if $version == 1;
+       use_ok 'PublicInbox::V2Writable';
+}
 
-# XXX FIXME: make it easier to test both versions
-my $version = int($ENV{PI_VERSION} || 1);
 my %opts = (
        LocalAddr => '127.0.0.1',
        ReuseAddr => 1,
index 65448dc435a3d9925942233c60f4fd98e3243d72..98112494b32cf90c202c02d103659961fd5fe6ad 100644 (file)
@@ -3,6 +3,8 @@
 use strict;
 use warnings;
 use Test::More;
+require './t/common.perl';
+require_git(2.6);
 use File::Temp qw/tempdir/;
 use PublicInbox::MIME;
 use PublicInbox::Config;
index 8be95149723c1539ef252c72147b6da739e4e287..33a36fad34b19791fcc20ef229e8ed3aa7d4c119 100644 (file)
@@ -7,6 +7,8 @@ use PublicInbox::MIME;
 use PublicInbox::ContentId qw(content_digest);
 use File::Temp qw/tempdir/;
 use File::Path qw(remove_tree);
+require './t/common.perl';
+require_git(2.6);
 
 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
        eval "require $mod";
index c8d12d34b5903ee64e7b39975d3f1c6365db1a94..1b700d760b92500d3837695bfe61a39da4659274 100644 (file)
@@ -5,6 +5,8 @@ use warnings;
 use Test::More;
 use PublicInbox::MIME;
 use File::Temp qw/tempdir/;
+require './t/common.perl';
+require_git(2.6);
 
 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
        eval "require $mod";
index d041ffd42e114948b022ba9037a2fb08355bac09..1c90a5b33fa91b5d0f5ba3fea7647258b50d3358 100644 (file)
--- a/t/v2mda.t
+++ b/t/v2mda.t
@@ -7,6 +7,8 @@ use PublicInbox::MIME;
 use File::Temp qw/tempdir/;
 use Fcntl qw(SEEK_SET);
 use Cwd;
+require './t/common.perl';
+require_git(2.6);
 
 my $V = 2;
 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
index 283b2b228852f132f5ab3a3bb2480d81fa3f876f..ef9a5405a0dff95cb631731a26280e9addc73f5b 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 use Test::More;
 require './t/common.perl';
+require_git(2.6);
 
 # Integration tests for HTTP cloning + mirroring
 foreach my $mod (qw(Plack::Util Plack::Builder Danga::Socket
index 2dda80e8c5e5adcf1c2e23a346e53c32165d378c..8a3071b734af5c763a8192cfafd74e3919e57f7a 100644 (file)
@@ -7,6 +7,8 @@ use PublicInbox::MIME;
 use PublicInbox::ContentId qw(content_digest);
 use File::Temp qw/tempdir/;
 use File::Path qw(remove_tree);
+require './t/common.perl';
+require_git(2.6);
 
 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
        eval "require $mod";
index c7eeee997bb7c189c71de5902c3a6105f74c3ec5..ec9f56d91657dbc50d5f97d72874075f8f6b4d3f 100644 (file)
@@ -7,6 +7,7 @@ use PublicInbox::MIME;
 use PublicInbox::ContentId qw(content_digest);
 use File::Temp qw/tempdir/;
 require './t/common.perl';
+require_git(2.6);
 foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
        eval "require $mod";
        plan skip_all => "$mod missing for nntpd.t" if $@;
@@ -201,13 +202,14 @@ EOF
 };
 {
        local $ENV{NPROC} = 2;
-       my @before = $git0->qx(qw(log --pretty=oneline));
-       my $before = $git0->qx(qw(log --pretty=raw --raw -r --no-abbrev));
+       my @log = qw(log --no-decorate --no-abbrev --no-notes --no-color);
+       my @before = $git0->qx(@log, qw(--pretty=oneline));
+       my $before = $git0->qx(@log, qw(--pretty=raw --raw -r));
        $im = PublicInbox::V2Writable->new($ibx, 1);
        is($im->{partitions}, 1, 'detected single partition from previous');
        my $smsg = $im->remove($mime, 'test removal');
        $im->done;
-       my @after = $git0->qx(qw(log --pretty=oneline));
+       my @after = $git0->qx(@log, qw(--pretty=oneline));
        my $tip = shift @after;
        like($tip, qr/\A[a-f0-9]+ test removal\n\z/s,
                'commit message propagated to git');
@@ -219,7 +221,7 @@ EOF
        my $srch = $ibx->search->reopen;
        my $mset = $srch->query('m:'.$smsg->mid, { mset => 1});
        is($mset->size, 0, 'no longer found in Xapian');
-       my @log1 = qw(log -1 --pretty=raw --raw -r --no-abbrev --no-renames);
+       my @log1 = (@log, qw(-1 --pretty=raw --raw -r --no-renames));
        is($srch->{over_ro}->get_art($num), undef,
                'removal propagated to Over DB');
 
index 3b5d2b85f3006db34dbb9256c9e5432e258335f3..5f968919dfff669080aa4af0909f5750d97965d0 100644 (file)
@@ -5,6 +5,8 @@ use File::Temp qw/tempdir/;
 use PublicInbox::MIME;
 use Cwd;
 use PublicInbox::Config;
+require './t/common.perl';
+require_git(2.6);
 my @mods = qw(Filesys::Notify::Simple PublicInbox::V2Writable);
 foreach my $mod (@mods) {
        eval "require $mod";