[PATCH V2] splicemap: support paths with spaces in splicemap (issue3844)

Szymon Wroblewski bluex0 at gmail.com
Wed May 8 14:00:41 CDT 2013


# HG changeset patch
# User Szymon Wroblewski <bluex0 at gmail.com>
# Date 1368039356 -7200
# Node ID ee9baf20baaf43ab70a972ab977a8a3cc5b9479f
# Parent  921b64e1f7b900cc58ffcc9b3fae4457bcb4d72b
splicemap: support paths with spaces in splicemap (issue3844)

Shlex module was used to split line as suggested. Split operates in POSIX mode.

diff -r 921b64e1f7b9 -r ee9baf20baaf hgext/convert/convcmd.py
--- a/hgext/convert/convcmd.py	Wed May 01 10:42:03 2013 -0700
+++ b/hgext/convert/convcmd.py	Wed May 08 20:55:56 2013 +0200
@@ -17,7 +17,7 @@
 from p4 import p4_source
 import filemap
 
-import os, shutil
+import os, shutil, shlex
 from mercurial import hg, util, encoding
 from mercurial.i18n import _
 
@@ -142,26 +142,22 @@
                 if not line:
                     # Ignore blank lines
                     continue
-                try:
-                    child, parents = line.split(' ', 1)
-                    self.source.checkrevformat(child)
-                    parents = parents.replace(',', ' ').split()
-                    # check if number of parents are upto 2 max
-                    if (len(parents) > 2):
-                        raise util.Abort(_('syntax error in %s(%d): child '\
-                                            'parent1[,parent2] expected') \
-                                            % (path, i + 1))
-                    for parent in parents:
-                        self.source.checkrevformat(parent)
-                except ValueError:
-                    raise util.Abort(_('syntax error in %s(%d): child '\
-                                        'parent1[,parent2] expected') \
-                                        % (path, i + 1))
-                pp = []
-                for p in parents:
-                    if p not in pp:
-                        pp.append(p)
-                m[child] = pp
+                # split line
+                lex = shlex.shlex(line, posix=True)
+                lex.whitespace_split = True
+                lex.whitespace += ','
+                line = list(lex)
+                # check number of parents
+                if not (2 <= len(line) <= 3):
+                    raise util.Abort(_('syntax error in %s(%d): child parent1'
+                                       '[,parent2] expected') % (path, i + 1))
+                for part in line:
+                    self.source.checkrevformat(part)
+                child, p1, p2 = line[0], line[1:2], line[2:]
+                if p1 == p2:
+                    m[child] = p1
+                else:
+                    m[child] = p1 + p2
          # if file does not exist or error reading, exit
         except IOError:
             raise util.Abort(_('splicemap file not found or error reading %s:')


More information about the Mercurial-devel mailing list