@@ -170,7 +170,8 @@ bind_line(sqlite3* db,
170170 sqlite3_clear_bindings (stmt);
171171
172172 auto line_iter = lf->begin () + cl;
173- auto read_result = lf->read_line (line_iter);
173+ auto fr = lf->get_file_range (line_iter, false );
174+ auto read_result = lf->read_range (fr);
174175
175176 if (read_result.isErr ()) {
176177 return false ;
@@ -556,8 +557,8 @@ load_time_bookmarks()
556557 = (const char *) sqlite3_column_text (stmt.in (), 7 );
557558 const auto annotations = sqlite3_column_text (stmt.in (), 8 );
558559 const auto log_opid = sqlite3_column_text (stmt.in (), 9 );
559- struct timeval log_tv;
560- struct exttm log_tm;
560+ timeval log_tv;
561+ exttm log_tm;
561562
562563 if (last_mark_time == -1 ) {
563564 last_mark_time = mark_time;
@@ -601,7 +602,8 @@ load_time_bookmarks()
601602
602603 auto cl = content_line_t (
603604 std::distance (lf->begin (), line_iter));
604- auto read_result = lf->read_line (line_iter);
605+ auto fr = lf->get_file_range (line_iter, false );
606+ auto read_result = lf->read_range (fr);
605607
606608 if (read_result.isErr ()) {
607609 break ;
@@ -616,8 +618,29 @@ load_time_bookmarks()
616618 .to_string ();
617619
618620 if (line_hash != log_hash) {
619- ++line_iter;
620- continue ;
621+ // Using the formatted line for JSON-lines logs was
622+ // a mistake in earlier versions. To carry forward
623+ // older bookmarks, we need to replicate the bad
624+ // behavior.
625+ auto hack_read_res
626+ = lf->read_line (line_iter, {false , true });
627+ if (hack_read_res.isErr ()) {
628+ break ;
629+ }
630+ auto hack_sbr = hack_read_res.unwrap ();
631+ auto hack_hash = hasher ()
632+ .update (hack_sbr.get_data (),
633+ hack_sbr.length ())
634+ .update (cl)
635+ .to_string ();
636+ if (hack_hash == log_hash) {
637+ log_trace (" needed hack to match line: %s:%d" ,
638+ lf->get_filename_as_string ().c_str (),
639+ cl);
640+ } else {
641+ ++line_iter;
642+ continue ;
643+ }
621644 }
622645 auto & bm_meta = lf->get_bookmark_metadata ();
623646 auto line_number = static_cast <uint32_t >(
@@ -1037,7 +1060,8 @@ save_user_bookmarks(sqlite3* db,
10371060 sqlite3_clear_bindings (stmt);
10381061
10391062 const auto line_iter = lf->begin () + cl;
1040- auto read_result = lf->read_line (line_iter);
1063+ auto fr = lf->get_file_range (line_iter, false );
1064+ auto read_result = lf->read_range (fr);
10411065
10421066 if (read_result.isErr ()) {
10431067 continue ;
@@ -1089,7 +1113,8 @@ save_meta_bookmarks(sqlite3* db, sqlite3_stmt* stmt, logfile* lf)
10891113 sqlite3_clear_bindings (stmt);
10901114
10911115 auto line_iter = lf->begin () + cl;
1092- auto read_result = lf->read_line (line_iter);
1116+ auto fr = lf->get_file_range (line_iter, false );
1117+ auto read_result = lf->read_range (fr);
10931118
10941119 if (read_result.isErr ()) {
10951120 continue ;
@@ -1485,11 +1510,6 @@ save_time_bookmarks()
14851510
14861511 auto line_iter = lf->begin () + lf->get_time_offset_line ();
14871512 auto offset = lf->get_time_offset ();
1488- auto read_result = lf->read_line (line_iter);
1489-
1490- if (read_result.isErr ()) {
1491- return ;
1492- }
14931513
14941514 bind_values (stmt.in (),
14951515 lf->original_line_time (line_iter),
0 commit comments