This allows v1 tests to continue working on git 1.8.0 for
now. This allows git 2.1.4 packaged with Debian 8 ("jessie")
to run old tests, at least.
I suppose it's safe to drop Debian 7 ("wheezy") due to our
dependency on git 1.8.0 for "merge-base --is-ancestor".
Writing V2 repositories requires git 2.6 for "get-mark"
support, so mask out tests for older gits.
17 files changed:
Clients should use normal git-clone/git-fetch, or NNTP clients
if they want to import mail into their personal inboxes.
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
TODO: this still needs to be documented better,
also see the scripts/ and sa_config/ directories in the source tree
public-inbox requires a number of other packages to access its full
functionality. The core tools are, of course:
public-inbox requires a number of other packages to access its full
functionality. The core tools are, of course:
+* 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:
* SQLite (needed for Xapian use)
To accept incoming mail into a public inbox, you'll likely want:
--raw -r --no-abbrev/, $range);
}
--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);
sub is_ancestor ($$$) {
my ($git, $cur, $tip) = @_;
return 0 unless $git->check($cur);
use warnings;
use Test::More;
use File::Temp qw/tempdir/;
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 $@;
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
plan skip_all => "$mod missing for altid_v2.t" if $@;
+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;
+}
+
use Test::More;
use File::Temp qw/tempdir/;
use PublicInbox::MIME;
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";
my @mods = qw(DBD::SQLite Search::Xapian);
foreach my $mod (@mods) {
eval "require $mod";
use Fcntl qw(:DEFAULT);
use File::Temp qw/tempdir tempfile/;
my $dir = tempdir('pi-import-XXXXXX', TMPDIR => 1, CLEANUP => 1);
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);
is(system(qw(git init -q --bare), $dir), 0, 'git init successful');
my $git = PublicInbox::Git->new($dir);
],
body => "hello world\n",
);
],
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');
like($im->add($mime), qr/\A:\d+\z/, 'added one message');
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');
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');
use Test::More;
use PublicInbox::Config;
use File::Temp qw/tempdir/;
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;
my $tmpdir = tempdir('pi-init-XXXXXX', TMPDIR => 1, CLEANUP => 1);
use constant pi_init => 'blib/script/public-inbox-init';
use PublicInbox::Import;
eval "require $mod";
skip "$mod missing for v2", 2 if $@;
}
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",
local $ENV{PI_DIR} = "$tmpdir/.public-inbox/";
my $cfgfile = "$ENV{PI_DIR}/config";
my @cmd = (pi_init, '-V2', 'v2list', "$tmpdir/v2list",
use File::Temp qw/tempdir/;
use PublicInbox::MIME;
use PublicInbox::Config;
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";
my @mods = qw(DBD::SQLite Search::Xapian IPC::Run);
foreach my $mod (@mods) {
eval "require $mod";
use Sys::Hostname;
require './t/common.perl';
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";
my $tmpdir = tempdir('pi-nntpd-XXXXXX', TMPDIR => 1, CLEANUP => 1);
my $home = "$tmpdir/pi-home";
my $err = "$tmpdir/stderr.log";
use_ok 'PublicInbox::Import';
use_ok 'PublicInbox::Inbox';
use_ok 'PublicInbox::Git';
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,
my %opts = (
LocalAddr => '127.0.0.1',
ReuseAddr => 1,
use strict;
use warnings;
use Test::More;
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;
use File::Temp qw/tempdir/;
use PublicInbox::MIME;
use PublicInbox::Config;
use PublicInbox::ContentId qw(content_digest);
use File::Temp qw/tempdir/;
use File::Path qw(remove_tree);
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";
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
use Test::More;
use PublicInbox::MIME;
use File::Temp qw/tempdir/;
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";
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
use File::Temp qw/tempdir/;
use Fcntl qw(SEEK_SET);
use Cwd;
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)) {
my $V = 2;
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
use warnings;
use Test::More;
require './t/common.perl';
use warnings;
use Test::More;
require './t/common.perl';
# Integration tests for HTTP cloning + mirroring
foreach my $mod (qw(Plack::Util Plack::Builder Danga::Socket
# Integration tests for HTTP cloning + mirroring
foreach my $mod (qw(Plack::Util Plack::Builder Danga::Socket
use PublicInbox::ContentId qw(content_digest);
use File::Temp qw/tempdir/;
use File::Path qw(remove_tree);
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";
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
use PublicInbox::ContentId qw(content_digest);
use File::Temp qw/tempdir/;
require './t/common.perl';
use PublicInbox::ContentId qw(content_digest);
use File::Temp qw/tempdir/;
require './t/common.perl';
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
plan skip_all => "$mod missing for nntpd.t" if $@;
foreach my $mod (qw(DBD::SQLite Search::Xapian)) {
eval "require $mod";
plan skip_all => "$mod missing for nntpd.t" if $@;
use PublicInbox::MIME;
use Cwd;
use PublicInbox::Config;
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";
my @mods = qw(Filesys::Notify::Simple PublicInbox::V2Writable);
foreach my $mod (@mods) {
eval "require $mod";