history --merge to properly interleave items

Fixes #2312
This commit is contained in:
ridiculousfish 2016-06-23 22:02:39 -07:00
parent 9c53019d95
commit 02cef2da23
2 changed files with 17 additions and 0 deletions

View File

@ -2721,6 +2721,17 @@ void history_tests_t::test_history_merge(void) {
for (size_t i = 0; i < count; i++) {
hists[i]->incorporate_external_changes();
}
// Everyone should also have items in the same order (#2312)
wcstring string_rep;
hists[0]->get_string_representation(&string_rep, L"\n");
for (size_t i = 0; i < count; i++) {
wcstring string_rep2;
hists[i]->get_string_representation(&string_rep2, L"\n");
do_test(string_rep == string_rep2);
}
// Add some more per-history items.
for (size_t i = 0; i < count; i++) {
hists[i]->add(alt_texts[i]);

View File

@ -1548,6 +1548,12 @@ void history_t::incorporate_external_changes() {
if (new_timestamp > this->boundary_timestamp) {
this->boundary_timestamp = new_timestamp;
this->clear_file_state();
// We also need to erase new_items, since we go through those first, and that means we
// will not properly interleave them with items from other instances.
// We'll pick them up from the file (#2312)
this->save_internal(false);
this->new_items.clear();
}
}