From: Eric Wong Date: Wed, 31 Jan 2024 10:20:20 +0000 (+0000) Subject: lei: sort MH inputs sequentially by default X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58fea974d2857c69e15d974cb62f8cabeeb32792;p=thirdparty%2Fpublic-inbox.git lei: sort MH inputs sequentially by default MH sequence numbers can be analogous to IMAP UIDs and NNTP article numbers (or more like IMAP MSNs with clients which pack). In any case, sort then numerically by default to avoid surprising users who treat NNTP spools and mlmmj archives as MH folders. This gives more coherent git history and resulting NNTP/IMAP numbering when round-tripping MH -> v2 -> (NNTP|IMAP) -> MH --- diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm index 947a7a796..d003d9836 100644 --- a/lib/PublicInbox/LeiInput.pm +++ b/lib/PublicInbox/LeiInput.pm @@ -242,7 +242,7 @@ sub input_path_url { } } elsif (-d _ && $ifmt eq 'mh') { my $mhr = PublicInbox::MHreader->new($input.'/', $lei->{3}); - $mhr->{sort} = $lei->{opt}->{sort}; + $mhr->{sort} = $lei->{opt}->{sort} // [ 'sequence']; $mhr->mh_each_eml($self->can('input_mh_cb'), $self, @args); } elsif (-d _ && $ifmt =~ /\A(?:v1|v2)\z/) { my $ibx = PublicInbox::Inbox->new({inboxdir => $input}); diff --git a/lib/PublicInbox/MHreader.pm b/lib/PublicInbox/MHreader.pm index 033aa7404..3e7bbd5c0 100644 --- a/lib/PublicInbox/MHreader.pm +++ b/lib/PublicInbox/MHreader.pm @@ -54,7 +54,8 @@ sub mh_each_file { opendir(my $dh, my $dir = $self->{dir}); my $restore = PublicInbox::OnDestroy->new($$, \&chdir, $self->{cwdfh}); chdir($dh); - if (defined(my $sort = $self->{sort})) { + my $sort = $self->{sort}; + if (defined $sort && "@$sort" ne 'none') { my @sort = map { my @tmp = $_ eq '' ? ('sequence') : split(/[, ]/); # sorting by name alphabetically makes no sense for MH: diff --git a/t/mh_reader.t b/t/mh_reader.t index 711fc8aac..c81df32e3 100644 --- a/t/mh_reader.t +++ b/t/mh_reader.t @@ -7,6 +7,7 @@ use PublicInbox::IO qw(write_file); use PublicInbox::Lock; use PublicInbox::OnDestroy; use PublicInbox::Eml; +use File::Path qw(remove_tree); use autodie; opendir my $cwdfh, '.'; @@ -103,12 +104,17 @@ test_lei(sub { like $lei_out, qr/^Subject: msg 4\nStatus: RO\n\n\n/ms, "message retrieved after `lei index'"; + lei_ok qw(convert -s none -f text), "mh:$for_sort", \'--sort=none'; + # ensure sort works for _input_ when output disallows sort my $v2out = "$ENV{HOME}/v2-out"; - lei_ok qw(convert -s sequence), "mh:$for_sort", '-o', "v2:$v2out"; - my $git = PublicInbox::Git->new("$v2out/git/0.git"); - chomp(my @l = $git->qx(qw(log --pretty=oneline --format=%s))); - is_xdeeply \@l, [1, 22, 333], 'sequence order preserved for v2'; + for my $sort (['--sort=sequence'], []) { # sequence is the default + lei_ok qw(convert), @$sort, "mh:$for_sort", '-o', "v2:$v2out"; + my $g = PublicInbox::Git->new("$v2out/git/0.git"); + chomp(my @l = $g->qx(qw(log --pretty=oneline --format=%s))); + is_xdeeply \@l, [1, 22, 333], 'sequence order preserved for v2'; + File::Path::remove_tree $v2out; + } }); done_testing;