]> scripts.mit.edu Git - wizard.git/blobdiff - wizard/resolve.py
Fix pylint errors.
[wizard.git] / wizard / resolve.py
index e2de1f217bce12bb16a0b41e33e73eabeae358b8..9259c245330c5d90140527f867d2ab65fa37cc17 100644 (file)
@@ -59,6 +59,7 @@ then the user matched globs.
 
 import re
 import itertools
+import logging
 
 re_var = re.compile("^\*\*\*(\d+)\*\*\*\\\n", re.MULTILINE)
 
@@ -97,7 +98,46 @@ def result_to_repl(result, mappings):
 
 def resolve(contents, spec, result):
     rstring, mappings = spec_to_regex(spec)
-    print rstring
     regex = re.compile(rstring, re.DOTALL)
     repl = result_to_repl(result, mappings)
-    return regex.sub(repl, contents)
+    ret = ""
+    conflict = ""
+    status = 0
+    for line in contents.splitlines(True):
+        if status == 0 and line.startswith("<<<<<<<"):
+            status = 1
+        elif status == 1 and line.startswith("======="):
+            status = 2
+        # ok, now process
+        if status == 2 and line.startswith(">>>>>>>"):
+            status = 0
+            conflict += line
+            ret += regex.sub(repl, conflict)
+            conflict = ""
+        elif status:
+            conflict += line
+        else:
+            ret += line
+    return ret
+
+def is_conflict(contents):
+    # Really really simple heuristic
+    return "<<<<<<<" in contents
+
+def fix_newlines(file, log=True):
+    """
+    Normalizes newlines in a file into UNIX file endings.  If
+    ``log`` is ``True`` an info log mesage is printed if
+    any normalization occurs.  Return value is ``True`` if
+    normalization occurred.
+    """
+    old_contents = open(file, "r").read()
+    contents = old_contents
+    while "\r\n" in contents:
+        contents = contents.replace("\r\n", "\n")
+    contents = contents.replace("\r", "\n")
+    if contents != old_contents:
+        logging.info("Converted %s to UNIX file endings" % file)
+        open(file, "w").write(contents)
+        return True
+    return False