if e.errno != errno.ENOENT:
raise e
raise NoSuchFile(path)
-
-
-def split_diff3(this, other, f):
- """Split a file or string with diff3 conflicts into two files.
-
- :param this: The THIS file to write. May be a utility.FileString
- :param other: The OTHER file to write. May be a utility.FileString
- :param f: The file or string to split.
- :return: True if there were conflicts
-
- >>> split_diff3(utility.FileString(), utility.FileString(),
- ... "a\\nb\\nc\\nd\\n")
- False
- >>> this = utility.FileString()
- >>> other = utility.FileString()
- >>> split_diff3(this, other, "<<<<<<< values1\\nstatus=closed\\n=======\\nstatus=closedd\\n>>>>>>> values2\\n")
- True
- >>> this.str
- 'status=closed\\n'
- >>> other.str
- 'status=closedd\\n'
- """
- f = utility.get_file(f)
- this_active = True
- other_active = True
- conflicts = False
- for line in f:
- if line.startswith("<<<<<<<"):
- conflicts = True
- this_active = True
- other_active = False
- elif line.startswith("======="):
- this_active = False
- other_active = True
- elif line.startswith(">>>>>>>"):
- this_active = True
- other_active = True
- else:
- if this_active:
- this.write(line)
- if other_active:
- other.write(line)
- return conflicts
-
-def split_diff3_str(f):
- """Split a file/string with diff3 conflicts into two strings. If there
- were no conflicts, one string is returned.
-
- >>> result = split_diff3_str("<<<<<<< values1\\nstatus=closed\\n=======\\nstatus=closedd\\n>>>>>>> values2\\n")
- >>> len(result)
- 2
- >>> result[0] != result[1]
- True
- >>> result = split_diff3_str("<<<<<<< values1\\nstatus=closed\\n=======\\nstatus=closed\\n>>>>>>> values2\\n")
- >>> len(result)
- 2
- >>> result[0] == result[1]
- True
- >>> result = split_diff3_str("a\\nb\\nc\\nd\\n")
- >>> len(result)
- 1
- >>> result[0]
- 'a\\nb\\nc\\nd\\n'
- """
- this = utility.FileString()
- other = utility.FileString()
- if split_diff3(this, other, f):
- return (this.str, other.str)
- else:
- return (this.str,)