diff options
Diffstat (limited to 't/index-git-times.t')
-rw-r--r-- | t/index-git-times.t | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/t/index-git-times.t b/t/index-git-times.t new file mode 100644 index 00000000..eac2d650 --- /dev/null +++ b/t/index-git-times.t @@ -0,0 +1,110 @@ +#!perl -w +# Copyright (C) all contributors <meta@public-inbox.org> +# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> +use strict; +use v5.10.1; +use PublicInbox::TestCommon; +use PublicInbox::Config; +use PublicInbox::Admin; +use PublicInbox::Import; +use File::Path qw(remove_tree); +require PublicInbox::InboxWritable; + +require_mods(qw(DBD::SQLite Xapian)); +use_ok 'PublicInbox::Over'; + +my ($tmpdir, $for_destroy) = tmpdir(); +local $ENV{PI_CONFIG} = "$tmpdir/cfg"; +my $v1dir = "$tmpdir/v1"; +my $addr = 'x@example.com'; +my $default_branch = PublicInbox::Import::default_branch; +run_script(['-init', '--indexlevel=medium', 'v1', $v1dir, + 'http://example.com/x', $addr]) + or die "init failed"; + +{ + my $data = <<"EOF"; +blob +mark :1 +data 133 +From: timeless <t\@example.com> +To: x <x\@example.com> +Subject: can I haz the time? +Message-ID: <19700101000000-1234\@example.com> + +plz + +reset $default_branch +commit $default_branch +mark :2 +author timeless <t\@example.com> 749520000 +0100 +committer x <x\@example.com> 1285977600 -0100 +data 20 +can I haz the time? +M 100644 :1 53/256f6177504c2878d3a302ef5090dacf5e752c + +EOF + pipe(my($r, $w)) or die; + length($data) <= 512 or die "data too large to fit in POSIX pipe"; + print $w $data or die; + close $w or die; + my $cmd = ['git', "--git-dir=$v1dir", 'fast-import', '--quiet']; + xsys_e($cmd, undef, { 0 => $r }); +} + +run_script(['-index', '--skip-docdata', $v1dir]) or die 'v1 index failed'; + +my $smsg; +{ + my $cfg = PublicInbox::Config->new; + my $ibx = $cfg->lookup($addr); + my $lvl = PublicInbox::InboxWritable::detect_indexlevel($ibx); + is($lvl, 'medium', 'indexlevel detected'); + is($ibx->{-skip_docdata}, 1, '--skip-docdata flag set on -index'); + $smsg = $ibx->over->get_art(1); + is($smsg->{ds}, 749520000, 'datestamp from git author time'); + is($smsg->{ts}, 1285977600, 'timestamp from git committer time'); + my $mset = $ibx->search->mset("m:$smsg->{mid}"); + is($mset->size, 1, 'got one result for m:'); + my $res = $ibx->search->mset_to_smsg($ibx, $mset); + is($res->[0]->{ds}, $smsg->{ds}, 'Xapian stored datestamp'); + $mset = $ibx->search->mset('d:19931002..19931002'); + $res = $ibx->search->mset_to_smsg($ibx, $mset); + is(scalar @$res, 1, 'got one result for d:'); + is($res->[0]->{ds}, $smsg->{ds}, 'Xapian search on datestamp'); +} +SKIP: { + require_git(2.6, 10); + my $v2dir = "$tmpdir/v2"; + run_script(['-convert', $v1dir, $v2dir]) or die 'v2 conversion failed'; + + my $check_v2 = sub { + my $ibx = PublicInbox::Inbox->new({inboxdir => $v2dir, + address => $addr}); + my $lvl = PublicInbox::InboxWritable::detect_indexlevel($ibx); + is($lvl, 'medium', 'indexlevel detected after convert'); + is($ibx->{-skip_docdata}, 1, + '--skip-docdata preserved after convert'); + my $v2smsg = $ibx->over->get_art(1); + is($v2smsg->{ds}, $smsg->{ds}, + 'v2 datestamp from git author time'); + is($v2smsg->{ts}, $smsg->{ts}, + 'v2 timestamp from git committer time'); + my $mset = $ibx->search->mset("m:$smsg->{mid}"); + my $res = $ibx->search->mset_to_smsg($ibx, $mset); + is($res->[0]->{ds}, $smsg->{ds}, 'Xapian stored datestamp'); + $mset = $ibx->search->mset('d:19931002..19931002'); + $res = $ibx->search->mset_to_smsg($ibx, $mset); + is(scalar @$res, 1, 'got one result for d:'); + is($res->[0]->{ds}, $smsg->{ds}, 'Xapian search on datestamp'); + }; + $check_v2->(); + remove_tree($v2dir); + + # test non-parallelized conversion + run_script(['-convert', '-j0', $v1dir, $v2dir]) or + die 'v2 conversion failed'; + $check_v2->(); +} + +done_testing; |