Prevent filtered delete from deleting journal (#935)

* Prevent filtered deletion from deleting entire journal #932 and add lots of deletion tests
* Undo removal of deletion feature
* Use more performant deletion
This commit is contained in:
Micah Jerome Ellison 2020-05-06 13:47:39 -07:00 committed by GitHub
parent cfbebe0d38
commit d9ebfe852b
6 changed files with 191 additions and 17 deletions

View file

@ -234,8 +234,14 @@ class Journal:
self.entries = result
def delete_entries(self, entries_to_delete):
"""Deletes specific entries from a journal."""
for entry in entries_to_delete:
self.entries.remove(entry)
def prompt_delete_entries(self):
"""Prompts for deletion of entries in a journal."""
"""Prompts for deletion of each of the entries in a journal.
Returns the entries the user wishes to delete."""
to_delete = []
@ -248,8 +254,7 @@ class Journal:
if ask_delete(entry):
to_delete.append(entry)
self.entries = [entry for entry in self.entries if entry not in to_delete]
self.write()
return to_delete
def new_entry(self, raw, date=None, sort=True):
"""Constructs a new entry from some raw text input.

View file

@ -187,14 +187,12 @@ def parse_args(args=None):
action="store_true",
)
# Disabling this momentarily due to critical bug
# @see https://github.com/jrnl-org/jrnl/issues/932
# exporting.add_argument(
# "--delete",
# dest="delete",
# action="store_true",
# help="Opens an interactive interface for deleting entries.",
# )
exporting.add_argument(
"--delete",
dest="delete",
action="store_true",
help="Opens an interactive interface for deleting entries.",
)
# Handle '-123' as a shortcut for '-n 123'
num = re.compile(r"^-(\d+)$")
@ -304,9 +302,6 @@ def configure_logger(debug=False):
def run(manual_args=None):
args = parse_args(manual_args)
# temporary until bring back --delete
args.delete = False # TODO: remove me
configure_logger(args.debug)
if args.version:
version_str = f"{jrnl.__title__} version {jrnl.__version__}"
@ -341,6 +336,7 @@ def run(manual_args=None):
config = util.scope_config(config, journal_name)
log.debug('Using journal "%s"', journal_name)
mode_compose, mode_export, mode_import = guess_mode(args, config)
# How to quit writing?
@ -484,5 +480,16 @@ def run(manual_args=None):
journal.write()
elif args.delete:
journal.prompt_delete_entries()
journal.write()
if journal.entries:
entries_to_delete = journal.prompt_delete_entries()
if entries_to_delete:
journal.entries = old_entries
journal.delete_entries(entries_to_delete)
journal.write()
else:
print(
"No entries deleted, because the search returned no results.",
file=sys.stderr,
)