Skip to content

Commit

Permalink
Fix for upgrade with missing journal (#796)
Browse files Browse the repository at this point in the history
* Fix for upgrade with missing journal
* add test, refactor solution
* add missing test config

Co-authored-by: Jonathan Wren <jonathan@nowandwren.com>
  • Loading branch information
dbxnr and wren committed Mar 28, 2020
1 parent df82652 commit 4b5eb16
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -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": "@"
}
11 changes: 11 additions & 0 deletions features/data/configs/upgrade_from_195_with_missing_journal.json
Original file line number Diff line number Diff line change
@@ -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": "@"
}
18 changes: 18 additions & 0 deletions features/upgrade.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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"
34 changes: 29 additions & 5 deletions jrnl/upgrade.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,29 @@
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):
Expand Down Expand Up @@ -56,7 +75,11 @@ def upgrade_jrnl_if_necessary(config_path):
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
Expand Down Expand Up @@ -144,6 +167,7 @@ def upgrade_jrnl_if_necessary(config_path):
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)
Expand Down

0 comments on commit 4b5eb16

Please sign in to comment.