Skip to content

Commit 1e08eeb

Browse files
committed
[session] redo filters if meta changed
Fix dupe test as well.
1 parent 2efba91 commit 1e08eeb

9 files changed

Lines changed: 53 additions & 16 deletions

src/lnav.indexing.cc

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ rebuild_indexes(std::optional<ui_clock::time_point> deadline)
363363
}
364364

365365
if (retval.rir_completed && !retval.rir_rescan_needed) {
366-
std::unordered_map<std::string, std::list<std::shared_ptr<logfile>>>
366+
std::unordered_map<std::string,
367+
std::vector<std::shared_ptr<logfile>>>
367368
id_to_files;
368369
auto reload = false;
369370

@@ -379,23 +380,25 @@ rebuild_indexes(std::optional<ui_clock::time_point> deadline)
379380
continue;
380381
}
381382

382-
lf.sort([](const auto& left, const auto& right) {
383-
const auto& lst = left->get_stat();
384-
const auto& rst = right->get_stat();
385-
return rst.st_size < lst.st_size
386-
|| (rst.st_size == lst.st_size
387-
&& rst.st_mtime < lst.st_mtime);
388-
});
389-
390-
const auto& dupe_name = lf.front()->get_unique_path();
383+
std::sort(lf.begin(),
384+
lf.end(),
385+
[](const auto& left, const auto& right) {
386+
const auto& lst = left->get_stat();
387+
const auto& rst = right->get_stat();
388+
return lst.st_size < rst.st_size
389+
|| (lst.st_size == rst.st_size
390+
&& rst.st_mtime < lst.st_mtime);
391+
});
392+
393+
const auto& dupe_name = lf.back()->get_unique_path();
391394
log_info(
392395
"Keeping duplicated file: %s; size=%lld; mtime=%ld; "
393396
"path=%s",
394-
lf.front()->get_content_id().c_str(),
395-
lf.front()->get_stat().st_size,
396-
lf.front()->get_stat().st_mtime,
397-
lf.front()->get_filename_as_string().c_str());
398-
lf.pop_front();
397+
lf.back()->get_content_id().c_str(),
398+
lf.back()->get_stat().st_size,
399+
lf.back()->get_stat().st_mtime,
400+
lf.back()->get_filename_as_string().c_str());
401+
lf.pop_back();
399402
std::for_each(
400403
lf.begin(), lf.end(), [&dupe_name, &reload](auto& lf) {
401404
if (lf->mark_as_duplicate(dupe_name)) {

src/session_data.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,7 @@ load_time_bookmarks()
470470
auto db_path = lnav::paths::dotlnav() / LOG_METADATA_NAME;
471471
auto_mem<sqlite3_stmt> stmt(sqlite3_finalize);
472472
bool reload_needed = false;
473+
bool meta_loaded = false;
473474
auto_mem<char, sqlite3_free> errmsg;
474475

475476
log_info("loading bookmark db: %s", db_path.c_str());
@@ -753,7 +754,9 @@ load_time_bookmarks()
753754
lf->set_logline_opid(line_number, opid_sf);
754755
meta = true;
755756
}
756-
if (!meta && part_name != nullptr) {
757+
if (meta) {
758+
meta_loaded = true;
759+
} else if (part_name != nullptr) {
757760
marked_session_lines.emplace_back(
758761
lf->original_line_time(line_iter),
759762
format->get_name(),
@@ -912,6 +915,10 @@ load_time_bookmarks()
912915
log_info("END select time_offset");
913916

914917
if (reload_needed) {
918+
if (meta_loaded) {
919+
lss.set_line_meta_changed();
920+
lss.text_filters_changed();
921+
}
915922
lnav_data.ld_views[LNV_LOG].reload_data();
916923
}
917924

test/expected/Makefile.am

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,10 @@ dist_noinst_DATA = \
812812
test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.out \
813813
test_sessions.sh_ee6e1b95e6b4d67eecb842dccb5830e78720a0d2.err \
814814
test_sessions.sh_ee6e1b95e6b4d67eecb842dccb5830e78720a0d2.out \
815+
test_sessions.sh_f02cc1d1dbd8e77ca386d79709a9f2037cbf24d3.err \
816+
test_sessions.sh_f02cc1d1dbd8e77ca386d79709a9f2037cbf24d3.out \
817+
test_sessions.sh_f3838c3a080fed8fdb4420f961feaa9cdec1263f.err \
818+
test_sessions.sh_f3838c3a080fed8fdb4420f961feaa9cdec1263f.out \
815819
test_sessions.sh_f7c38467cfbd76234192d5f641fa017e3a12cdb0.err \
816820
test_sessions.sh_f7c38467cfbd76234192d5f641fa017e3a12cdb0.out \
817821
test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err \

test/expected/test_sessions.sh_f02cc1d1dbd8e77ca386d79709a9f2037cbf24d3.err

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
log_line,log_tags
2+
0,<NULL>
3+
1,<NULL>

test/expected/test_sessions.sh_f3838c3a080fed8fdb4420f961feaa9cdec1263f.err

Whitespace-only changes.

test/expected/test_sessions.sh_f3838c3a080fed8fdb4420f961feaa9cdec1263f.out

Whitespace-only changes.

test/test_sessions.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,24 @@ run_cap_test ${lnav_test} -n \
243243
rm -rf ./sessions
244244
mkdir -p $HOME
245245

246+
# tag filter-expr saved in session
247+
run_cap_test ${lnav_test} -nq \
248+
-c ":goto 0" \
249+
-c ":tag #bad" \
250+
-c ":filter-expr not json_contains(:log_tags, '#bad')" \
251+
-c ":save-session" \
252+
${test_dir}/logfile_access_log.0
253+
254+
# tag filter-expr restored from session
255+
run_cap_test ${lnav_test} -n \
256+
-c ":load-session" \
257+
-c ";SELECT log_line, log_tags FROM access_log" \
258+
-c ":write-csv-to -" \
259+
${test_dir}/logfile_access_log.0
260+
261+
rm -rf ./sessions
262+
mkdir -p $HOME
263+
246264
# sticky header saved in session for text file
247265
run_cap_test ${lnav_test} -n \
248266
-c ':goto 1' \

test/test_sql_views_vtab.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ log,logfile_access_log.0,1
1515
log,logfile_access_log.1,1
1616
EOF
1717

18+
touch -t 200711030923 ${test_dir}/logfile_access_log.0
19+
1820
run_cap_test ${lnav_test} -n \
1921
-c ";SELECT view_name,basename(filepath),visible FROM lnav_view_files" \
2022
-c ":write-csv-to -" \

0 commit comments

Comments
 (0)