properly update grml-versions when updating a grml flavour
[grml2usb.git] / grml2usb
index 440cd4a..6c74a52 100755 (executable)
--- a/grml2usb
+++ b/grml2usb
@@ -1116,26 +1116,29 @@ def update_grml_versions(iso_mount, target):
     @target: path of the target mount point
     """
     grml_target = target + '/grml/'
-    new_grml_version = search_file('grml-version', grml_target)
-    if new_grml_version:
-        orig_grml_version = search_file('grml-version', iso_mount)
-        if not orig_grml_version:
-            logging.warn("Warning: %s could not be found - can not install it", orig_grml_version)
+    target_grml_version_file = search_file('grml-version', grml_target)
+    if target_grml_version_file:
+        iso_grml_version_file = search_file('grml-version', iso_mount)
+        if not iso_grml_version_file:
+            logging.warn("Warning: %s could not be found - can not install it", iso_grml_version_file)
             return False
         try:
-            new_file = open(new_grml_version, 'a+')
-            new_flavours = [ get_flavour(l) for l in new_file.readlines() ]
-
-            old_file = open(orig_grml_version, 'r')
-            old_lines = old_file.readlines()
-            for line in old_lines:
-                if not get_flavour(line) in new_flavours:
-                    new_file.write(line)
+            iso_versions = {}
+            iso_file = open(iso_grml_version_file, 'r')
+            for line in iso_file:
+                iso_versions[get_flavour(line)] = line.strip()
+
+            for line in fileinput.input([target_grml_version_file], inplace=1):
+                flavour = get_flavour(line)
+                if flavour in iso_versions.keys():
+                    print iso_versions[flavour]
+                else:
+                    print line.strip()
         except IOError:
             logging.warn("Warning: Could not write file")
         finally:
-            new_file.close()
-            old_file.close()
+            iso_file.close()
+            fileinput.close()
         return True
     else:
         return False