# HG changeset patch # User Szymon Wroblewski # Date 1368039356 -7200 # Node ID 8c2fdf7d56455eef10e8d4dadafd6dc3b367849a # Parent 12459bfa4b591f173059305e93bc3bab7b4ba704 splicemap: support paths with spaces in splicemap (issue3844) Shlex module was used to split line as suggested. Split operates in POSIX mode. diff -r 12459bfa4b59 -r 8c2fdf7d5645 hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py Thu May 09 18:34:04 2013 -0500 +++ 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:')