diff --git a/features/data/configs/upgrade_from_195_with_missing_encrypted_journal.json b/features/data/configs/upgrade_from_195_with_missing_encrypted_journal.json new file mode 100644 index 00000000..5bbfb5b1 --- /dev/null +++ b/features/data/configs/upgrade_from_195_with_missing_encrypted_journal.json @@ -0,0 +1,11 @@ +{ +"default_hour": 9, +"timeformat": "%Y-%m-%d %H:%M", +"linewrap": 80, +"encrypt": true, +"editor": "", +"default_minute": 0, +"highlight": true, +"journals": {"default": "features/journals/encrypted_jrnl-1-9-5.journal", "missing": "features/journals/missing.journal"}, +"tagsymbols": "@" +} diff --git a/features/data/configs/upgrade_from_195_with_missing_journal.json b/features/data/configs/upgrade_from_195_with_missing_journal.json new file mode 100644 index 00000000..8d456159 --- /dev/null +++ b/features/data/configs/upgrade_from_195_with_missing_journal.json @@ -0,0 +1,11 @@ +{ +"default_hour": 9, +"timeformat": "%Y-%m-%d %H:%M", +"linewrap": 80, +"encrypt": false, +"editor": "", +"default_minute": 0, +"highlight": true, +"journals": {"default": "features/journals/simple_jrnl-1-9-5.journal", "missing": "features/journals/missing.journal"}, +"tagsymbols": "@" +} diff --git a/features/upgrade.feature b/features/upgrade.feature index e4377970..e05d4351 100644 --- a/features/upgrade.feature +++ b/features/upgrade.feature @@ -38,3 +38,21 @@ Feature: Upgrading Journals from 1.x.x to 2.x.x """ Then the journal should have 2 entries + Scenario: Upgrade with missing journal + Given we use the config "upgrade_from_195_with_missing_journal.json" + When we run "jrnl -ls" and enter + """" + Y + """ + Then the output should contain "Error: features/journals/missing.journal does not exist." + + Scenario: Upgrade with missing encrypted journal + Given we use the config "upgrade_from_195_with_missing_encrypted_journal.json" + When we run "jrnl -ls" and enter + """ + Y + bad doggie no biscuit + bad doggie no biscuit + """ + Then the output should contain "Error: features/journals/missing.journal does not exist." + and the output should contain "We're all done here" diff --git a/jrnl/upgrade.py b/jrnl/upgrade.py index e252d2d0..fe0e0f4b 100644 --- a/jrnl/upgrade.py +++ b/jrnl/upgrade.py @@ -11,10 +11,29 @@ import os def backup(filename, binary=False): print(f" Created a backup at {filename}.backup", file=sys.stderr) filename = os.path.expanduser(os.path.expandvars(filename)) - with open(filename, "rb" if binary else "r") as original: - contents = original.read() - with open(filename + ".backup", "wb" if binary else "w") as backup: - backup.write(contents) + + try: + with open(filename, "rb" if binary else "r") as original: + contents = original.read() + + with open(filename + ".backup", "wb" if binary else "w") as backup: + backup.write(contents) + except FileNotFoundError: + print(f"\nError: {filename} does not exist.") + try: + cont = util.yesno(f"\nCreate {filename}?", default=False) + if not cont: + raise KeyboardInterrupt + + except KeyboardInterrupt: + raise UserAbort("jrnl NOT upgraded, exiting.") + + +def check_exists(path): + """ + Checks if a given path exists. + """ + return os.path.exists(path) def upgrade_jrnl_if_necessary(config_path): @@ -56,7 +75,11 @@ older versions of jrnl anymore. encrypt = config.get("encrypt") path = journal_conf - path = os.path.expanduser(path) + if os.path.exists(os.path.expanduser(path)): + path = os.path.expanduser(path) + else: + print(f"\nError: {path} does not exist.") + continue if encrypt: encrypted_journals[journal_name] = path @@ -144,6 +167,7 @@ older versions of jrnl anymore. j.write() print("\nUpgrading config...", file=sys.stderr) + backup(config_path) print("\nWe're all done here and you can start enjoying jrnl 2.", file=sys.stderr)