log: fix crash and bad filematcher lookup by -fr'wdir()' PATH stable
authorYuya Nishihara <yuya@tcha.org>
Fri, 11 Sep 2020 14:41:05 +0900
branchstable
changeset 45416 4ebc5f325bed
parent 45415 81b4e7c866ec
child 45458 4532e7ebde4d
child 45503 bd5b2b29b82d
log: fix crash and bad filematcher lookup by -fr'wdir()' PATH "-fr'wdir()' ADDED-PATH" is still wrong, which will be fixed in default branch.
mercurial/dagop.py
mercurial/logcmdutil.py
tests/test-log.t
--- a/mercurial/dagop.py	Wed Sep 09 14:48:55 2020 -0400
+++ b/mercurial/dagop.py	Fri Sep 11 14:41:05 2020 +0900
@@ -17,6 +17,7 @@
     node,
     patch,
     pycompat,
+    scmutil,
     smartset,
 )
 
@@ -90,7 +91,7 @@
     visitheap = []
 
     def addvisit(fctx):
-        rev = fctx.rev()
+        rev = scmutil.intrev(fctx)
         if rev not in visit:
             visit[rev] = set()
             heapq.heappush(visitheap, -rev)  # max heap
--- a/mercurial/logcmdutil.py	Wed Sep 09 14:48:55 2020 -0400
+++ b/mercurial/logcmdutil.py	Fri Sep 11 14:41:05 2020 +0900
@@ -753,7 +753,7 @@
     fcache = {}
 
     def filematcher(ctx):
-        return scmutil.matchfiles(repo, fcache.get(ctx.rev(), []))
+        return scmutil.matchfiles(repo, fcache.get(scmutil.intrev(ctx), []))
 
     def revgen():
         for rev, cs in dagop.filectxancestors(fctxs, followfirst=followfirst):
--- a/tests/test-log.t	Wed Sep 09 14:48:55 2020 -0400
+++ b/tests/test-log.t	Fri Sep 11 14:41:05 2020 +0900
@@ -2263,6 +2263,51 @@
    }
   ]
 
+follow files from wdir
+
+  $ hg cp d1/f1 f1-copy
+  $ hg stat --all
+  M d1/f1
+  A d1/f2
+  A f1-copy
+    d1/f1
+  R .d6/f1
+  C D2/f1
+  C D3.i/f1
+  C d4.hg/f1
+  C d5.d/f1
+
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d5.d/f1
+  == 2147483647 ==
+  
+  == 0 ==
+   d5.d/f1 |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f1
+  == 2147483647 ==
+   d1/f1 |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+  == 0 ==
+   d1/f1 |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+
+ BROKEN: added file should exist in wdir
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f2
+  abort: cannot follow nonexistent file: "d1/f2"
+  [255]
+
+ BROKEN: copied file should exist in wdir
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat f1-copy
+  abort: cannot follow nonexistent file: "f1-copy"
+  [255]
+
+  $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat notfound
+  notfound: $ENOENT$
+
   $ hg revert -aqC
 
 Check that adding an arbitrary name shows up in log automatically