[PATCH 1 of 3 RFC V3] revset: add wdir() function to specify workingctx revision by command
Yuya Nishihara
yuya at tcha.org
Thu Mar 19 16:23:12 UTC 2015
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1408164256 -32400
# Sat Aug 16 13:44:16 2014 +0900
# Node ID ac80716bb799448df0181f5a3169b7242bdf8400
# Parent 5cb459dc32d209653a3e5d77749cf989ab9a51e4
revset: add wdir() function to specify workingctx revision by command
The main purpose of wdir() is to annotate working-directory files.
Currently many commands and revsets cannot handle workingctx and may raise
exception. For example, -r ":wdir()" results in TypeError. This problem will
be addressed by future patches.
We could add "wdir" symbol instead, but it would conflict with the existing
tag, bookmark or branch. So I decided not to.
List of commands that will potentially support workingctx revision:
command default remarks
-------- ------- -----------------------------------------------------
annotate p1 useful
archive p1 might be useful
cat p1 might be useful on Windows (no cat)
diff p1:wdir (default)
export p1 might be useful if wctx can have draft commit message
files wdir (default)
grep tip:0 might be useful
identify wdir (default)
locate wdir (default)
log tip:0 might be useful with -p or -G option
parents wdir (default)
status wdir (default)
This patch includes minimal test of "hg status" that should be able to handle
the workingctx revision.
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -1852,6 +1852,16 @@ def user(repo, subset, x):
"""
return author(repo, subset, x)
+def wdir(repo, subset, x):
+ """``wdir()``
+ Working directory.
+ """
+ # i18n: "wdir" is a keyword
+ getargs(x, 0, 0, _("wdir takes no arguments"))
+ if None in subset:
+ return baseset([None])
+ return baseset()
+
# for internal use
def _list(repo, subset, x):
s = getstring(x, "internal error")
@@ -1947,6 +1957,7 @@ symbols = {
"tagged": tagged,
"user": user,
"unstable": unstable,
+ "wdir": wdir,
"_list": _list,
"_intlist": _intlist,
"_hexlist": _hexlist,
@@ -2019,6 +2030,7 @@ safesymbols = set([
"tagged",
"user",
"unstable",
+ "wdir",
"_list",
"_intlist",
"_hexlist",
diff --git a/tests/test-revset.t b/tests/test-revset.t
--- a/tests/test-revset.t
+++ b/tests/test-revset.t
@@ -509,6 +509,14 @@ Test null revision
1
0
+Test working-directory revision
+ $ hg debugrevspec 'wdir()'
+ None
+ $ hg debugrevspec 'tip or wdir()'
+ 9
+ None
+ $ hg debugrevspec '0:tip and wdir()'
+
$ log 'outgoing()'
8
9
diff --git a/tests/test-status.t b/tests/test-status.t
--- a/tests/test-status.t
+++ b/tests/test-status.t
@@ -240,6 +240,17 @@ Check 'status -q' and some combinations
$ rm deleted
$ hg copy modified copied
+Specify working directory revision explicitly, that should be the same as
+"hg status"
+
+ $ hg status --change "wdir()"
+ M modified
+ A added
+ A copied
+ R removed
+ ! deleted
+ ? unknown
+
Run status with 2 different flags.
Check if result is the same or different.
If result is not as expected, raise error
More information about the Mercurial-devel
mailing list