Skip to content

Commit 18ef53c

Browse files
committed
[reltime] handle "an hour before now"
1 parent c93ce7f commit 18ef53c

5 files changed

Lines changed: 36 additions & 1 deletion

File tree

src/cmds.filtering.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,15 @@ com_hide_line(exec_context& ec,
9797
} else if (dts.convert_to_timeval(all_args, tv_abs)) {
9898
tv_opt = tv_abs;
9999
} else {
100+
auto pe = parse_res.unwrapErr();
101+
if (!pe.pe_msg.empty()) {
102+
auto msg
103+
= lnav::console::user_message::error(
104+
attr_line_t("invalid time value: ").append(all_args))
105+
.with_reason(pe.pe_msg);
106+
return Err(msg);
107+
}
108+
100109
return ec.make_error(FMT_STRING("invalid time value: {}"),
101110
all_args);
102111
}

src/relative_time.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,11 @@ relative_time::from_str(string_fragment str)
345345
gettimeofday(&tv, nullptr);
346346
localtime_r(&tv.tv_sec, &tm.et_tm);
347347
tm.et_nsec = tv.tv_usec * 1000;
348+
if (base_token == RTT_BEFORE) {
349+
retval.negate();
350+
}
348351
tm = retval.adjust(tm);
352+
base_token = RTT_INVALID;
349353

350354
retval.rt_field[RTF_YEARS] = tm.et_tm.tm_year;
351355
retval.rt_field[RTF_MONTHS] = tm.et_tm.tm_mon;

src/session_data.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "hasher.hh"
5151
#include "lnav.events.hh"
5252
#include "lnav.hh"
53+
#include "lnav.indexing.hh"
5354
#include "log_format_ext.hh"
5455
#include "logfile.hh"
5556
#include "service_tags.hh"
@@ -1801,7 +1802,7 @@ reset_session()
18011802
lnav_data.ld_log_source.set_sql_filter("", nullptr);
18021803
lnav_data.ld_log_source.set_sql_marker("", nullptr);
18031804
lnav_data.ld_log_source.clear_bookmark_metadata();
1804-
lnav_data.ld_log_source.rebuild_index();
1805+
rebuild_indexes(std::nullopt);
18051806

18061807
lnav_data.ld_db_row_source.reset_user_state();
18071808

test/expected/test_cmds.sh_69bd25462cab0136f3c8195008568598f6f0e48c.err

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
✘ error: invalid time value: badbadbad
2+
reason: Unrecognized input
23
 --> command-option:1
34
 | :hide-lines-before badbadbad 
45
 = help: :hide-lines-before date

test/test_reltime.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,26 @@ static struct {
9191

9292
TEST_CASE("reltime")
9393
{
94+
setenv("TZ", "UTC", 1);
95+
96+
{
97+
auto rt_res = relative_time::from_str(
98+
string_fragment::from_const("an hour before now"));
99+
100+
if (rt_res.isErr()) {
101+
auto err = rt_res.unwrapErr();
102+
fprintf(stderr, "error %s\n", err.pe_msg.c_str());
103+
}
104+
105+
CHECK(rt_res.isOk());
106+
auto rt = rt_res.unwrap();
107+
108+
auto now_tv = current_timeval();
109+
auto ago_tv = rt.to_timeval();
110+
auto diff = now_tv - ago_tv;
111+
CHECK(diff.tv_sec == (60 * 60));
112+
}
113+
94114
{
95115
auto tv = timeval{1690440588, 0};
96116
auto parse_res = relative_time::from_str(

0 commit comments

Comments
 (0)