summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lesana/collection.py12
-rw-r--r--tests/test_collection.py25
2 files changed, 31 insertions, 6 deletions
diff --git a/lesana/collection.py b/lesana/collection.py
index d2f029d..457b732 100644
--- a/lesana/collection.py
+++ b/lesana/collection.py
@@ -421,12 +421,12 @@ class Collection(object):
xapian.DB_CREATE_OR_OPEN
)
for uid in uids:
- entry = self.entry_from_uid(uid)
- if entry is not None:
- cache.delete_document(entry.idterm)
- os.remove(os.path.join(self.itemdir, entry.fname))
- else:
- logging.warning("No such entry: {}, ignoring".format(uid))
+ for entry in self.entries_from_short_uid(uid):
+ if entry is not None:
+ cache.delete_document(entry.idterm)
+ os.remove(os.path.join(self.itemdir, entry.fname))
+ else:
+ logging.warning("No such entry: {}, ignoring".format(uid))
cache.commit()
cache.close()
diff --git a/tests/test_collection.py b/tests/test_collection.py
index 4160c5e..ab6d807 100644
--- a/tests/test_collection.py
+++ b/tests/test_collection.py
@@ -412,6 +412,31 @@ class testCollectionCreation(unittest.TestCase):
mset = collection._enquire.get_mset(0, 10)
self.assertEqual(mset.get_matches_estimated(), 0)
+ def test_partial_deletion(self):
+ tmpdir = tempfile.mkdtemp()
+ shutil.copy('tests/data/simple/settings.yaml', tmpdir)
+ shutil.copytree(
+ 'tests/data/simple/items',
+ os.path.join(tmpdir, 'items'),
+ )
+ collection = lesana.Collection.init(tmpdir)
+ # We start with one item indexed with the term "another"
+ collection.start_search('another')
+ mset = collection._enquire.get_mset(0, 10)
+ self.assertEqual(mset.get_matches_estimated(), 1)
+ # Then delete it, using the short id
+ collection.remove_entries(['11189ee4'])
+ # An now we should have none
+ self.assertFalse(os.path.exists(os.path.join(
+ tmpdir,
+ 'items',
+ '11189ee47ddf4796b718a483b379f976.yaml'
+ )))
+ collection.start_search('another')
+ mset = collection._enquire.get_mset(0, 10)
+ self.assertEqual(mset.get_matches_estimated(), 0)
+
+
def _find_file_in_git_index(self, fname, index):
found = False
for (path, stage) in index.entries: