Mercurial > hg
changeset 46549:9842c00f0252 stable
log: fix handling of root (or empty) path provided by matcher (issue6478)
Since 27d6956d386b "match: use '' instead of '.' for root directory",
'.' should be translated to ''. We can't blame repo.file() about this because
an empty string is invalid as a file path, but I found at least two callers
(_makematcher() and revset.filelog()) would crash because of this path[0].
So let's make repo.file() accept an empty string. path[0] == b'/' wouldn't
work on Python 3 anyways.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 02 Feb 2021 20:20:17 +0900 |
parents | 0492002560f3 |
children | a9887f9e87aa |
files | mercurial/localrepo.py mercurial/logcmdutil.py tests/test-log.t |
diffstat | 3 files changed, 38 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Thu Feb 25 15:18:00 2021 +0530 +++ b/mercurial/localrepo.py Tue Feb 02 20:20:17 2021 +0900 @@ -1135,7 +1135,7 @@ """File storage when using revlogs.""" def file(self, path): - if path[0] == b'/': + if path.startswith(b'/'): path = path[1:] return filelog.filelog(self.svfs, path) @@ -1146,7 +1146,7 @@ """File storage when using revlogs and narrow files.""" def file(self, path): - if path[0] == b'/': + if path.startswith(b'/'): path = path[1:] return filelog.narrowfilelog(self.svfs, path, self._storenarrowmatch)
--- a/mercurial/logcmdutil.py Thu Feb 25 15:18:00 2021 +0530 +++ b/mercurial/logcmdutil.py Tue Feb 02 20:20:17 2021 +0900 @@ -845,7 +845,7 @@ # slowpath; otherwise, we can turn off the slowpath if slowpath: for path in match.files(): - if path == b'.' or path in repo.store: + if not path or path in repo.store: break else: slowpath = False
--- a/tests/test-log.t Thu Feb 25 15:18:00 2021 +0530 +++ b/tests/test-log.t Tue Feb 02 20:20:17 2021 +0900 @@ -102,6 +102,41 @@ summary: c +log empty path (or repo root) of slow path shouldn't crash (issue6478) + + $ hg log -ql1 '' inexistent + 4:7e4639b4691b + $ hg log -ql1 . inexistent + 4:7e4639b4691b + $ hg log -ql1 "`pwd`" inexistent + 4:7e4639b4691b + + $ hg log -ql1 '' e + 4:7e4639b4691b + $ hg log -ql1 . e + 4:7e4639b4691b + $ hg log -ql1 "`pwd`" e + 4:7e4639b4691b + +log -f empty path (or repo root) shouldn't crash + + $ hg log -qfl1 '' inexistent + abort: cannot follow file not in parent revision: "inexistent" + [255] + $ hg log -qfl1 . inexistent + abort: cannot follow file not in parent revision: "inexistent" + [255] + $ hg log -qfl1 "`pwd`" inexistent + abort: cannot follow file not in parent revision: "inexistent" + [255] + + $ hg log -qfl1 '' e + 4:7e4639b4691b + $ hg log -qfl1 . e + 4:7e4639b4691b + $ hg log -qfl1 "`pwd`" e + 4:7e4639b4691b + -X, with explicit path $ hg log a -X a