diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1135,7 +1135,7 @@ class revlogfilestorage(object): """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 @@ class revlognarrowfilestorage(object): """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) diff --git a/mercurial/logcmdutil.py b/mercurial/logcmdutil.py --- a/mercurial/logcmdutil.py +++ b/mercurial/logcmdutil.py @@ -845,7 +845,7 @@ def _makematcher(repo, revs, wopts): # 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 diff --git a/tests/test-log.t b/tests/test-log.t --- a/tests/test-log.t +++ b/tests/test-log.t @@ -102,6 +102,41 @@ log on directory 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