From b37cefbea1251855ea61535ca859e3aad9acbf53 Mon Sep 17 00:00:00 2001 From: Manuel Ebert Date: Sun, 5 Apr 2015 02:19:19 +0400 Subject: [PATCH] Upgrade old time stamps to fix #317 --- jrnl/upgrade.py | 75 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/jrnl/upgrade.py b/jrnl/upgrade.py index 85ad9365..96f4869d 100644 --- a/jrnl/upgrade.py +++ b/jrnl/upgrade.py @@ -1,8 +1,19 @@ -import util +from __future__ import absolute_import, unicode_literals + from . import __version__ from . import Journal -import sys +from . import util from .EncryptedJournal import EncryptedJournal +import sys +import os + + +def backup(filename, binary=False): + util.prompt(" Created a backup at {}.backup".format(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) def upgrade_jrnl_if_necessary(config_path): @@ -30,41 +41,61 @@ older versions of jrnl anymore. """.format(__version__)) encrypted_journals = {} plain_journals = {} - for journal, journal_conf in config['journals'].items(): + other_journals = {} + + for journal_name, journal_conf in config['journals'].items(): if isinstance(journal_conf, dict): - if journal_conf.get("encrypt"): - encrypted_journals[journal] = journal_conf.get("journal") - else: - plain_journals[journal] = journal_conf.get("journal") + path = journal_conf.get("journal") + encrypt = journal_conf.get("encrypt") else: - if config.get('encrypt'): - encrypted_journals[journal] = journal_conf - else: - plain_journals[journal] = journal_conf + encrypt = config.get('encrypt') + path = journal_conf + + if encrypt: + encrypted_journals[journal_name] = path + elif os.path.isdir(path): + other_journals[journal_name] = path + else: + plain_journals[journal_name] = path + if encrypted_journals: longest_journal_name = max([len(journal) for journal in config['journals']]) util.prompt("\nFollowing encrypted journals will be upgraded to jrnl {}:".format(__version__)) for journal, path in encrypted_journals.items(): util.prompt(" {:{pad}} -> {}".format(journal, path, pad=longest_journal_name)) - if plain_journals: - util.prompt("\nFollowing plain text journals will be not be touched:") - for journal, path in plain_journals.items(): - util.prompt(" {:{pad}} -> {}".format(journal, path, pad=longest_journal_name)) - cont = util.yesno("Continue upgrading jrnl?", default=False) + if plain_journals: + util.prompt("\nFollowing plain text journals will upgraded to jrnl {}:".format(__version__)) + for journal, path in plain_journals.items(): + util.prompt(" {:{pad}} -> {}".format(journal, path, pad=longest_journal_name)) + + if other_journals: + util.prompt("\nFollowing journals will be not be touched:") + for journal, path in other_journals.items(): + util.prompt(" {:{pad}} -> {}".format(journal, path, pad=longest_journal_name)) + + cont = util.yesno("\nContinue upgrading jrnl?", default=False) if not cont: util.prompt("jrnl NOT upgraded, exiting.") sys.exit(1) for journal_name, path in encrypted_journals.items(): - util.prompt("Upgrading {} journal (stored in {}).".format(journal_name, path)) + util.prompt("\nUpgrading encrypted '{}' journal stored in {}...".format(journal_name, path)) + backup(path, binary=True) old_journal = Journal.open_journal(journal_name, config, legacy=True) new_journal = EncryptedJournal.from_journal(old_journal) new_journal.write() - # util.get_password(keychain=journal, validator=lambda pwd: upgrade_encrypted_journal(path, pwd)) + util.prompt(" Done.") - with open(config_path + ".backup", 'w') as config_backup: - config_backup.write(config_file) + for journal_name, path in plain_journals.items(): + util.prompt("\nUpgrading plain text '{}' journal stored in {}...".format(journal_name, path)) + backup(path) + old_journal = Journal.open_journal(journal_name, config, legacy=True) + new_journal = Journal.PlainJournal.from_journal(old_journal) + new_journal.write() + util.prompt(" Done.") - util.prompt("""\n\nYour old config has been backed up to {}.backup. -We're all done here and you can start enjoying jrnl 2.""".format(config_path)) + util.prompt("\nUpgrading config...") + backup(config_path) + + util.prompt("\nWe're all done here and you can start enjoying jrnl 2.".format(config_path))