Mercurial > public > mercurial-scm > hg
comparison mercurial/patch.py @ 11022:0429d0d49f92
patch: strip paths in leaked git patchmeta objects
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Mon, 26 Apr 2010 13:21:03 +0200 |
parents | c47a1cfad572 |
children | a1aad8333864 |
comparison
equal
deleted
inserted
replaced
11021:c47a1cfad572 | 11022:0429d0d49f92 |
---|---|
905 i = s.find(' ') | 905 i = s.find(' ') |
906 if i < 0: | 906 if i < 0: |
907 return s | 907 return s |
908 return s[:i] | 908 return s[:i] |
909 | 909 |
910 def pathstrip(path, strip): | |
911 pathlen = len(path) | |
912 i = 0 | |
913 if strip == 0: | |
914 return '', path.rstrip() | |
915 count = strip | |
916 while count > 0: | |
917 i = path.find('/', i) | |
918 if i == -1: | |
919 raise PatchError(_("unable to strip away %d of %d dirs from %s") % | |
920 (count, strip, path)) | |
921 i += 1 | |
922 # consume '//' in the path | |
923 while i < pathlen - 1 and path[i] == '/': | |
924 i += 1 | |
925 count -= 1 | |
926 return path[:i].lstrip(), path[i:].rstrip() | |
927 | |
910 def selectfile(afile_orig, bfile_orig, hunk, strip): | 928 def selectfile(afile_orig, bfile_orig, hunk, strip): |
911 def pathstrip(path, strip): | |
912 pathlen = len(path) | |
913 i = 0 | |
914 if strip == 0: | |
915 return '', path.rstrip() | |
916 count = strip | |
917 while count > 0: | |
918 i = path.find('/', i) | |
919 if i == -1: | |
920 raise PatchError(_("unable to strip away %d of %d dirs from %s") % | |
921 (count, strip, path)) | |
922 i += 1 | |
923 # consume '//' in the path | |
924 while i < pathlen - 1 and path[i] == '/': | |
925 i += 1 | |
926 count -= 1 | |
927 return path[:i].lstrip(), path[i:].rstrip() | |
928 | |
929 nulla = afile_orig == "/dev/null" | 929 nulla = afile_orig == "/dev/null" |
930 nullb = bfile_orig == "/dev/null" | 930 nullb = bfile_orig == "/dev/null" |
931 abase, afile = pathstrip(afile_orig, strip) | 931 abase, afile = pathstrip(afile_orig, strip) |
932 gooda = not nulla and util.lexists(afile) | 932 gooda = not nulla and util.lexists(afile) |
933 bbase, bfile = pathstrip(bfile_orig, strip) | 933 bbase, bfile = pathstrip(bfile_orig, strip) |
1188 current_file = None | 1188 current_file = None |
1189 rejects += 1 | 1189 rejects += 1 |
1190 continue | 1190 continue |
1191 elif state == 'git': | 1191 elif state == 'git': |
1192 for gp in values: | 1192 for gp in values: |
1193 gp.path = pathstrip(gp.path, strip - 1)[1] | |
1194 if gp.oldpath: | |
1195 gp.oldpath = pathstrip(gp.oldpath, strip - 1)[1] | |
1193 if gp.op in ('COPY', 'RENAME'): | 1196 if gp.op in ('COPY', 'RENAME'): |
1194 copyfn(gp.oldpath, gp.path, cwd) | 1197 copyfn(gp.oldpath, gp.path, cwd) |
1195 changed[gp.path] = gp | 1198 changed[gp.path] = gp |
1196 else: | 1199 else: |
1197 raise util.Abort(_('unsupported parser state: %s') % state) | 1200 raise util.Abort(_('unsupported parser state: %s') % state) |