user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [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).