Ensure we clear first_unwritten_new_item_index after history::merge

Prevents an issue where we think we've written out history items,
but we haven't, and so they get lost. Fixes #3496
This commit is contained in:
ridiculousfish 2016-11-19 22:39:58 -08:00
parent 13a4ef80b3
commit 9b4310b10f
2 changed files with 19 additions and 0 deletions

View file

@ -2820,6 +2820,24 @@ void history_tests_t::test_history_merge(void) {
} }
} }
// Make sure incorporate_external_changes doesn't drop items! (#3496)
history_t * const writer = hists[0];
history_t * const reader = hists[1];
const wcstring more_texts[] = {
L"Item_#3496_1", L"Item_#3496_2", L"Item_#3496_3", L"Item_#3496_4",
L"Item_#3496_5", L"Item_#3496_6"
};
for (size_t i=0; i < sizeof more_texts / sizeof *more_texts; i++) {
// time_barrier because merging will ignore items that may be newer
if (i > 0) time_barrier();
writer->add(more_texts[i]);
writer->incorporate_external_changes();
reader->incorporate_external_changes();
for (size_t j=0; j < i; j++) {
do_test(history_contains(reader, more_texts[j]));
}
}
// Clean up. // Clean up.
for (size_t i = 0; i < 3; i++) { for (size_t i = 0; i < 3; i++) {
delete hists[i]; delete hists[i];

View file

@ -1652,6 +1652,7 @@ void history_t::incorporate_external_changes() {
// We'll pick them up from the file (#2312) // We'll pick them up from the file (#2312)
this->save_internal(false); this->save_internal(false);
this->new_items.clear(); this->new_items.clear();
this->first_unwritten_new_item_index = 0;
} }
} }