mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-06-29 22:16:13 +02:00
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:
parent
cfbebe0d38
commit
d9ebfe852b
6 changed files with 191 additions and 17 deletions
|
@ -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.
|
||||
|
|
33
jrnl/cli.py
33
jrnl/cli.py
|
@ -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,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue