about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/LEI.pm4
-rw-r--r--lib/PublicInbox/LeiBlob.pm23
-rw-r--r--t/solver_git.t3
3 files changed, 18 insertions, 12 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index fdb0bbcf..bad7fad9 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -136,8 +136,8 @@ our %CMD = ( # sorted in order of importance/use:
         import-before! lock=s@ rsyncable alert=s@ mua=s verbose|v+), @c_opt,
         opt_dash('limit|n=i', '[0-9]+') ],
 
-'blob' => [ 'OID', 'display a git blob object, solving if necessary',
-        qw(git-dir=s@ cwd! verbose|v+ oid-a|A=s path-a|a=s path-b|b=s),
+'blob' => [ 'OID', 'show a git blob, reconstructing from mail if necessary',
+        qw(git-dir=s@ cwd! verbose|v+ mail! oid-a|A=s path-a|a=s path-b|b=s),
         @lxs_opt, @c_opt ],
 
 'add-external' => [ 'LOCATION',
diff --git a/lib/PublicInbox/LeiBlob.pm b/lib/PublicInbox/LeiBlob.pm
index 9b4c4f30..4bd86253 100644
--- a/lib/PublicInbox/LeiBlob.pm
+++ b/lib/PublicInbox/LeiBlob.pm
@@ -8,7 +8,6 @@ use v5.10.1;
 use parent qw(PublicInbox::IPC);
 use PublicInbox::Spawn qw(spawn popen_rd);
 use PublicInbox::DS;
-use PublicInbox::Eml;
 
 sub sol_done_wait { # dwaitpid callback
         my ($arg, $pid) = @_;
@@ -85,18 +84,22 @@ sub do_solve_blob { # via wq_do
 sub lei_blob {
         my ($lei, $blob) = @_;
         $lei->start_pager if -t $lei->{1};
+        my $opt = $lei->{opt};
+        my $has_hints = grep(defined, @$opt{qw(oid-a path-a path-b)});
 
-        # first, see if it's a blob returned by "lei q" JSON output:
-        my $rdr = { 1 => $lei->{1} };
-        open $rdr->{2}, '>', '/dev/null' or die "open: $!";
-        my $cmd = [ 'git', '--git-dir='.$lei->ale->git->{git_dir},
-                        'cat-file', 'blob', $blob ];
-        waitpid(spawn($cmd, $lei->{env}, $rdr), 0);
-        return if $? == 0;
+        # first, see if it's a blob returned by "lei q" JSON output:k
+        if ($opt->{mail} // ($has_hints ? 0 : 1)) {
+                my $rdr = { 1 => $lei->{1} };
+                open $rdr->{2}, '>', '/dev/null' or die "open: $!";
+                my $cmd = [ 'git', '--git-dir='.$lei->ale->git->{git_dir},
+                                'cat-file', 'blob', $blob ];
+                waitpid(spawn($cmd, $lei->{env}, $rdr), 0);
+                return if $? == 0;
+        }
 
         # maybe it's a non-email (code) blob from a coderepo
-        my $git_dirs = $lei->{opt}->{'git-dir'} //= [];
-        if ($lei->{opt}->{'cwd'} //= 1) {
+        my $git_dirs = $opt->{'git-dir'} //= [];
+        if ($opt->{'cwd'} // 1) {
                 my $cgd = get_git_dir('.');
                 unshift(@$git_dirs, $cgd) if defined $cgd;
         }
diff --git a/t/solver_git.t b/t/solver_git.t
index 22714ae5..7bf3ba21 100644
--- a/t/solver_git.t
+++ b/t/solver_git.t
@@ -34,6 +34,9 @@ test_lei({tmpdir => $tmpdir}, sub {
         lei_ok('blob', '69df7d5', '-I', $ibx->{inboxdir});
         is(sha1_hex("blob ".length($lei_out)."\0".$lei_out),
                 $expect, 'blob contents output');
+        my $prev = $lei_out;
+        lei_ok(qw(blob --no-mail 69df7d5 -I), $ibx->{inboxdir});
+        is($lei_out, $prev, '--no-mail works');
 
         # fallbacks
         lei_ok('blob', $v1_0_0_tag, '-I', $ibx->{inboxdir});