Force re-write of config file when format changes.
diff --git a/infocalypse/config.py b/infocalypse/config.py --- a/infocalypse/config.py +++ b/infocalypse/config.py @@ -38,6 +38,9 @@ else: DEFAULT_CFG_PATH = '~/%s' % CFG_NAME +# hg version that the format last changed in. +FORMAT_VERSION = '8c1f129b1df3' + def normalize(usk_or_id): """ Returns a USK hash. """ if usk_or_id.startswith('USK'): @@ -82,6 +85,8 @@ class Config: self.defaults['FMS_ID'] = None # User must set this in config. self.defaults['FMSNOTIFY_GROUP'] = DEFAULT_NOTIFICATION_GROUP + self.defaults['FORMAT_VERSION'] = 'Unknown' # Read from file. + def get_index(self, usk_or_id): """ Returns the highest known USK version for a USK or None. """ return self.version_table.get(normalize(usk_or_id)) @@ -147,6 +152,9 @@ class Config: def update_defaults(cls, parser, cfg): """ INTERNAL: Helper function to simplify from_file. """ if parser.has_section('default'): + if parser.has_option('default', 'format_version'): + cfg.defaults['FORMAT_VERSION'] = parser.get('default', + 'format_version') if parser.has_option('default','host'): cfg.defaults['HOST'] = parser.get('default','host') if parser.has_option('default','port'): @@ -242,6 +250,7 @@ class Config: file_name = os.path.expanduser(file_name) parser = ConfigParser() parser.add_section('default') + parser.set('default', 'format_version', FORMAT_VERSION) parser.set('default', 'host', cfg.defaults['HOST']) parser.set('default', 'port', cfg.defaults['PORT']) parser.set('default', 'tmp_dir', cfg.defaults['TMP_DIR']) diff --git a/infocalypse/infcmds.py b/infocalypse/infcmds.py --- a/infocalypse/infcmds.py +++ b/infocalypse/infcmds.py @@ -43,7 +43,7 @@ from updatesm import UpdateStateMachine, REQUESTING_URI_4_INSERT, INSERTING_BUNDLES, INSERTING_GRAPH, \ INSERTING_URI, FAILING, REQUESTING_URI_4_COPY, CANCELING, CleaningUp -from config import Config, DEFAULT_CFG_PATH, normalize +from config import Config, DEFAULT_CFG_PATH, FORMAT_VERSION, normalize DEFAULT_PARAMS = { # FCP params @@ -186,6 +186,14 @@ def get_config_info(ui_, opts): or command line options. """ cfg = Config.from_ui(ui_) + if cfg.defaults['FORMAT_VERSION'] != FORMAT_VERSION: + ui_.warn(('Updating config file: %s\n' + + 'From format version: %s\nTo format version: %s\n') % + (str(cfg.file_name), + cfg.defaults['FORMAT_VERSION'], + FORMAT_VERSION)) + Config.to_file(cfg) + ui_.warn('Converted OK.\n') if opts.get('fcphost') != '': cfg.defaults['HOST'] = opts['fcphost']