Mercurial > hg
changeset 19181:8c2fdf7d5645
splicemap: support paths with spaces in splicemap (issue3844)
Shlex module was used to split line as suggested. Split operates in POSIX mode.
author | Szymon Wroblewski <bluex0@gmail.com> |
---|---|
date | Wed, 08 May 2013 20:55:56 +0200 |
parents | 12459bfa4b59 |
children | fae47ecaa952 |
files | hgext/convert/convcmd.py |
diffstat | 1 files changed, 17 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- 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:')