comparison mercurial/patch.py @ 46246:416ecdaa12df

patch: handle filenames with trailing spaces I have no idea if this is *actually* supported by the patch file format, but at least when reading from a patch file created by running `hg shelve`, it is written out such that there's a trailing space after the second (`b`) filename. When we read the patch file, we remove the space before parsing the filenames, so it doesn't end up matching the other sources of what files are in the shelve. We observed this internally due to a wrapper around unshelve that called into patch.changedfiles, but `hg patch` is able to reproduce the issue as well, so I've included both tests. Differential Revision: https://phab.mercurial-scm.org/D9729
author Kyle Lippincott <spectral@google.com>
date Mon, 11 Jan 2021 17:46:55 -0800
parents 2cf61e66c6d0
children 33350debb480
comparison
equal deleted inserted replaced
46245:db2bc9e667a1 46246:416ecdaa12df
391 391
392 # Filter patch for git information 392 # Filter patch for git information
393 gp = None 393 gp = None
394 gitpatches = [] 394 gitpatches = []
395 for line in lr: 395 for line in lr:
396 line = line.rstrip(b' \r\n') 396 line = line.rstrip(b'\r\n')
397 if line.startswith(b'diff --git a/'): 397 if line.startswith(b'diff --git a/'):
398 m = gitre.match(line) 398 m = gitre.match(line)
399 if m: 399 if m:
400 if gp: 400 if gp:
401 gitpatches.append(gp) 401 gitpatches.append(gp)
2071 if emitfile: 2071 if emitfile:
2072 emitfile = False 2072 emitfile = False
2073 yield b'file', (afile, bfile, h, gp and gp.copy() or None) 2073 yield b'file', (afile, bfile, h, gp and gp.copy() or None)
2074 yield b'hunk', h 2074 yield b'hunk', h
2075 elif x.startswith(b'diff --git a/'): 2075 elif x.startswith(b'diff --git a/'):
2076 m = gitre.match(x.rstrip(b' \r\n')) 2076 m = gitre.match(x.rstrip(b'\r\n'))
2077 if not m: 2077 if not m:
2078 continue 2078 continue
2079 if gitpatches is None: 2079 if gitpatches is None:
2080 # scan whole input for git metadata 2080 # scan whole input for git metadata
2081 gitpatches = scangitpatch(lr, x) 2081 gitpatches = scangitpatch(lr, x)