infocalypse

(djk)
2009-05-02: Force re-write of config file when format changes.

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']