[Updated] D12193: filemerge: make `_maketempfiles()` more reusable

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Wed Feb 16 10:31:34 UTC 2022


Closed by commit rHGf90337706ce7: filemerge: make `_maketempfiles()` more reusable (authored by martinvonz).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D12193?vs=32231&id=32250

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D12193/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D12193

AFFECTED FILES
  mercurial/filemerge.py

CHANGE DETAILS

diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -742,20 +742,26 @@
         return False, 1, None
     localpath = _workingpath(repo, fcd)
     args = _toolstr(repo.ui, tool, b"args")
-    localoutputpath = None
+
+    files = [
+        (b"base", fca.path(), fca.decodeddata()),
+        (b"other", fco.path(), fco.decodeddata()),
+    ]
+    outpath = b""
     if b"$output" in args:
+        # read input from backup, write to original
+        outpath = localpath
         localoutputpath = backup.path()
         # Remove the .orig to make syntax-highlighting more likely.
         if localoutputpath.endswith(b'.orig'):
             localoutputpath, ext = os.path.splitext(localoutputpath)
+        localdata = util.readfile(localpath)
+        files.append((b"local", localoutputpath, localdata))
 
-    with _maketempfiles(
-        fco,
-        fca,
-        localoutputpath,
-    ) as temppaths:
-        basepath, otherpath, localoutputpath = temppaths
-        outpath = b""
+    with _maketempfiles(files) as temppaths:
+        basepath, otherpath = temppaths[:2]
+        if len(temppaths) == 3:
+            localpath = temppaths[2]
 
         def format_label(input):
             if input.label_detail:
@@ -777,10 +783,6 @@
         }
         ui = repo.ui
 
-        if b"$output" in args:
-            # read input from backup, write to original
-            outpath = localpath
-            localpath = localoutputpath
         replace = {
             b'local': localpath,
             b'base': basepath,
@@ -915,10 +917,9 @@
 
 
 @contextlib.contextmanager
-def _maketempfiles(fco, fca, localpath):
-    """Writes out `fco` and `fca` as temporary files, and (if localpath is not
-    None) copies `localpath` to another temporary file, so an external merge
-    tool may use them.
+def _maketempfiles(files):
+    """Creates a temporary file for each (prefix, path, data) tuple in `files`,
+    so an external merge tool may use them.
     """
     tmproot = pycompat.mkdtemp(prefix=b'hgmerge-')
 
@@ -931,18 +932,11 @@
         util.writefile(name, data)
         return name
 
-    def tempfromcontext(prefix, ctx):
-        return maketempfrompath(prefix, ctx.path(), ctx.decodeddata())
-
-    b = tempfromcontext(b"base", fca)
-    c = tempfromcontext(b"other", fco)
-    d = localpath
-    if localpath is not None:
-        data = util.readfile(localpath)
-        d = maketempfrompath(b"local", localpath, data)
-
+    temp_files = []
+    for prefix, path, data in files:
+        temp_files.append(maketempfrompath(prefix, path, data))
     try:
-        yield b, c, d
+        yield temp_files
     finally:
         shutil.rmtree(tmproot)
 



To: martinvonz, #hg-reviewers, Alphare
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20220216/34697a2a/attachment-0002.html>


More information about the Mercurial-patches mailing list