From 29e93f8c1d3f61371bb1cea613257ce292b31d2b Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 27 Oct 2012 21:11:16 +0900 Subject: [PATCH] make sure we update guid in note object too --- anki/importing/anki2.py | 9 ++++----- tests/support/diffmodels2-1.apkg | Bin 0 -> 3070 bytes tests/support/diffmodels2-2.apkg | Bin 0 -> 3186 bytes tests/test_importing.py | 20 ++++++++++++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 tests/support/diffmodels2-1.apkg create mode 100644 tests/support/diffmodels2-2.apkg diff --git a/anki/importing/anki2.py b/anki/importing/anki2.py index 7ccd8835b..18c6fad6d 100644 --- a/anki/importing/anki2.py +++ b/anki/importing/anki2.py @@ -97,9 +97,10 @@ class Anki2Importer(Importer): note = list(note) guid, mid = note[1:3] duplicate = False - guidChange = False + first = True # do we have the same guid? if guid in self._notes: + first = False # and do they share the same model id? if self._notes[guid][2] == mid: # and do they share the same schema? @@ -109,9 +110,6 @@ class Anki2Importer(Importer): self.src.models.scmhash(dstM)): # then it's safe to treat as a duplicate duplicate = True - if not duplicate: - # not identical models, so we need to change guid - guidChange = True # missing from local col or divergent model? if not duplicate: # get corresponding local model @@ -129,8 +127,9 @@ class Anki2Importer(Importer): dirty.append(note[0]) # if it was originally the same as a note in this deck but the # models have diverged, we need to change the guid - if guidChange: + if not first: guid = guid64() + note[1] = guid # note we have the added note self._notes[guid] = (note[0], note[3], note[2]) else: diff --git a/tests/support/diffmodels2-1.apkg b/tests/support/diffmodels2-1.apkg new file mode 100644 index 0000000000000000000000000000000000000000..e3c85af8114518bded85823215f9f1fd21b475bd GIT binary patch literal 3070 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 I|L83K1!G+XApigX literal 0 HcmV?d00001 diff --git a/tests/test_importing.py b/tests/test_importing.py index 023996b3f..d06dc5aad 100644 --- a/tests/test_importing.py +++ b/tests/test_importing.py @@ -158,6 +158,26 @@ def test_anki1_diffmodels(): # as the model schemas differ, should have been imported as new model assert after == before + 1 +def test_anki2_diffmodels(): + # create a new empty deck + dst = getEmptyDeck() + # import the 1 card version of the model + tmp = getUpgradeDeckPath("diffmodels2-1.apkg") + imp = AnkiPackageImporter(dst, tmp) + imp.run() + before = dst.noteCount() + # repeating the process should do nothing + imp = AnkiPackageImporter(dst, tmp) + imp.run() + assert before == dst.noteCount() + # then the 2 card version + tmp = getUpgradeDeckPath("diffmodels2-2.apkg") + imp = AnkiPackageImporter(dst, tmp) + imp.run() + after = dst.noteCount() + # as the model schemas differ, should have been imported as new model + assert after == before + 1 + def test_csv(): deck = getEmptyDeck() file = unicode(os.path.join(testDir, "support/text-2fields.txt"))