* [PATCH 04/12] lei blob: support --no-mail switch
2021-03-28 9:01 7% [PATCH 00/12] lei blob and some yak-shaving Eric Wong
@ 2021-03-28 9:01 6% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-03-28 9:01 UTC (permalink / raw)
To: meta
It's possible for a abbreviated OID to be resolved unambiguously
to an email before we attempt to look at externals via xsearch;
so provide a way for a user to force searching coderepos.
If hints (--oid-a, --path-a, --path-b) are present, we'll
assume --no-mail by default, otherwise we'll assume the
user wants to look through mail for a matching blob.
---
lib/PublicInbox/LEI.pm | 4 ++--
lib/PublicInbox/LeiBlob.pm | 23 +++++++++++++----------
t/solver_git.t | 3 +++
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});
^ permalink raw reply related [relevance 6%]
* [PATCH 00/12] lei blob and some yak-shaving
@ 2021-03-28 9:01 7% Eric Wong
2021-03-28 9:01 6% ` [PATCH 04/12] lei blob: support --no-mail switch Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2021-03-28 9:01 UTC (permalink / raw)
To: meta
"lei blob" manages to work with HTTPS and HTTP .onion endpoints.
Eric Wong (12):
lei: simplify PktOp callers
lei init: split out into separate file
lei blob: dclose if already failed
lei blob: support --no-mail switch
lei blob: fail early if no git dirs
lei blob: some extra tests
lei help: show "NAME=VALUE" properly for -c
lei blob: flesh out help text
t/lei_store: ensure LeiSearch responds to ->isrch
lei blob: add remote external support
lei: drop coderepo placeholders, submodule TODO
treewide: shorten temporary filename
MANIFEST | 2 +
lib/PublicInbox/LEI.pm | 67 +++++++---------------------
lib/PublicInbox/LeiBlob.pm | 47 +++++++++++++-------
lib/PublicInbox/LeiConvert.pm | 4 +-
lib/PublicInbox/LeiHelp.pm | 2 +-
lib/PublicInbox/LeiImport.pm | 4 +-
lib/PublicInbox/LeiInit.pm | 41 +++++++++++++++++
lib/PublicInbox/LeiMark.pm | 4 +-
lib/PublicInbox/LeiMirror.pm | 4 +-
lib/PublicInbox/LeiOverview.pm | 2 +-
lib/PublicInbox/LeiP2q.pm | 4 +-
lib/PublicInbox/LeiRemote.pm | 81 ++++++++++++++++++++++++++++++++++
lib/PublicInbox/LeiXSearch.pm | 8 ++--
lib/PublicInbox/Msgmap.pm | 2 +-
lib/PublicInbox/PktOp.pm | 20 ++++++---
lib/PublicInbox/SolverGit.pm | 2 +-
lib/PublicInbox/TestCommon.pm | 2 +-
lib/PublicInbox/V2Writable.pm | 6 +--
lib/PublicInbox/Xapcmd.pm | 9 ++--
script/public-inbox-edit | 2 +-
script/public-inbox-init | 2 +-
scripts/ssoma-replay | 2 +-
t/check-www-inbox.perl | 2 +-
t/inbox.t | 2 +-
t/lei_store.t | 1 +
t/nodatacow.t | 2 +-
t/solver_git.t | 40 +++++++++++++++--
27 files changed, 254 insertions(+), 110 deletions(-)
create mode 100644 lib/PublicInbox/LeiInit.pm
create mode 100644 lib/PublicInbox/LeiRemote.pm
^ permalink raw reply [relevance 7%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-03-28 9:01 7% [PATCH 00/12] lei blob and some yak-shaving Eric Wong
2021-03-28 9:01 6% ` [PATCH 04/12] lei blob: support --no-mail switch Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).