Mercurial > public > mercurial-scm > hg
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) |