From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH] search: expand "d:" to "dt:" for precision with approxidate
Date: Fri, 16 Apr 2021 18:43:06 -0500 [thread overview]
Message-ID: <20210416234306.28897-1-e@80x24.org> (raw)
If a user specifies "d:" with a higher precision than it was
traditionally able to handle, switch transparently to "dt:".
This lowers the learning curve and improves DWIM-ness.
---
lib/PublicInbox/Search.pm | 18 +++++++++++++++---
t/search.t | 9 +++++----
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/lib/PublicInbox/Search.pm b/lib/PublicInbox/Search.pm
index ab04d430..e0e8164d 100644
--- a/lib/PublicInbox/Search.pm
+++ b/lib/PublicInbox/Search.pm
@@ -275,7 +275,9 @@ sub date_parse_prepare {
# expand "d:20101002" => "d:20101002..20101003" and like
# n.b. git doesn't do YYYYMMDD w/o '-', it needs YYYY-MM-DD
+ # We upgrade "d:" to "dt:" to iff using approxidate
if ($pfx eq 'd') {
+ my $fmt = "\0%Y%m%d";
if (!defined($r[1])) {
if ($r[0] =~ /\A([0-9]{4})([0-9]{2})([0-9]{2})\z/) {
push @$to_parse, "$1-$2-$3";
@@ -283,14 +285,24 @@ sub date_parse_prepare {
# to parse anyways for "d+" below
} else {
push @$to_parse, $r[0];
+ if ($r[0] !~ /\A[0-9]{4}-[0-9]{2}-[0-9]{2}\z/) {
+ $pfx = 'dt';
+ $fmt = "\0%Y%m%d%H%M%S";
+ }
}
- $r[0] = "\0%Y%m%d$#$to_parse\0";
- $r[1] = "\0%Y%m%d+\0";
+ $r[0] = "$fmt+$#$to_parse\0";
+ $r[1] = "$fmt+\0";
} else {
for my $x (@r) {
next if $x eq '' || $x =~ /\A[0-9]{8}\z/;
push @$to_parse, $x;
- $x = "\0%Y%m%d$#$to_parse\0";
+ if ($x !~ /\A[0-9]{4}-[0-9]{2}-[0-9]{2}\z/) {
+ $pfx = 'dt';
+ }
+ $x = "$fmt$#$to_parse\0";
+ }
+ if ($pfx eq 'dt') {
+ s/\0%Y%m%d/\0%Y%m%d%H%M%S/ for @r;
}
}
} elsif ($pfx eq 'dt') {
diff --git a/t/search.t b/t/search.t
index 124c9acf..b63a7672 100644
--- a/t/search.t
+++ b/t/search.t
@@ -561,9 +561,9 @@ SKIP: {
is(strftime('%Y-%m-%d', gmtime($1//0)), '2010-10-02', 'rt: end expand');
$q = $s->query_argv_to_string($g, [qw(something dt:2010-10-02..)]);
like($q, qr/\Asomething dt:20101002\d{6}\.\./, 'dt: expansion');
- $q = $s->query_argv_to_string($g, [qw(x d:yesterday.. y)]);
- is($q, strftime('x d:%Y%m%d.. y', gmtime(time - 86400)),
- '"yesterday" handled');
+ $q = $s->query_argv_to_string($g, [qw(x dt:yesterday.. y)]);
+ my $exp = strftime('%Y%m%d', gmtime(time - 86400));
+ like($q, qr/x dt:$exp[0-9]{6}\.\. y/, '"yesterday" handled');
$q = $s->query_argv_to_string($g, [qw(x dt:20101002054123)]);
is($q, 'x dt:20101002054123..20101003054123', 'single dt: expanded');
$q = $s->query_argv_to_string($g, [qw(x dt:2010-10-02T05:41:23Z)]);
@@ -627,7 +627,8 @@ SKIP: {
my $x_days_ago = strftime('%Y%m%d', gmtime(time - (5 * 86400)));
$orig = $qs = qq[broken d:5.days.ago..];
$s->query_approxidate($g, $qs);
- is($qs, qq[broken d:$x_days_ago..], 'date.phrase.with.dots');
+ like($qs, qr/\Abroken dt:$x_days_ago[0-9]{6}\.\./,
+ 'date.phrase.with.dots');
$ENV{TEST_EXPENSIVE} or
skip 'TEST_EXPENSIVE not set for argv overflow check', 1;
next reply other threads:[~2021-04-16 23:43 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-16 23:43 Eric Wong [this message]
2021-04-17 0:00 ` [SQUASH] fix "d:YYYYMMDD..$NEEDS_APPROXIDATE" case Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://public-inbox.org/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210416234306.28897-1-e@80x24.org \
--to=e@80x24.org \
--cc=meta@public-inbox.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).