changeset 42419:69883775b27d

root: add template variables pointing to repository directories These paths are useful for GUI applications to detect changes. A GUI process typically monitors .hg and .hg/store directories so that it will be notified on lock/wlock deletion. Alternatively, maybe we can add debugpaths command if we don't want to extend the root command. I'm not sure which will be nicer.
author Yuya Nishihara <yuya@tcha.org>
date Tue, 04 Jun 2019 21:13:35 +0900
parents 9803323048b6
children c77ab654415b
files mercurial/commands.py tests/test-basic.t tests/test-clone.t tests/test-share.t
diffstat 4 files changed, 30 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Tue Jun 04 20:58:39 2019 +0900
+++ b/mercurial/commands.py	Tue Jun 04 21:13:35 2019 +0900
@@ -5232,12 +5232,23 @@
 
     Print the root directory of the current repository.
 
+    .. container:: verbose
+
+      Template:
+
+      The following keywords are supported in addition to the common template
+      keywords and functions. See also :hg:`help templates`.
+
+      :hgpath:    String. Path to the .hg directory.
+      :storepath: String. Path to the directory holding versioned data.
+
     Returns 0 on success.
     """
     opts = pycompat.byteskwargs(opts)
     with ui.formatter('root', opts) as fm:
         fm.startitem()
         fm.write('reporoot', '%s\n', repo.root)
+        fm.data(hgpath=repo.path, storepath=repo.spath)
 
 @command('serve',
     [('A', 'accesslog', '', _('name of access log file to write to'),
--- a/tests/test-basic.t	Tue Jun 04 20:58:39 2019 +0900
+++ b/tests/test-basic.t	Tue Jun 04 21:13:35 2019 +0900
@@ -101,7 +101,9 @@
   $ hg root -Tjson | sed 's|\\\\|\\|g'
   [
    {
-    "reporoot": "$TESTTMP/t"
+    "hgpath": "$TESTTMP/t/.hg",
+    "reporoot": "$TESTTMP/t",
+    "storepath": "$TESTTMP/t/.hg/store"
    }
   ]
 
--- a/tests/test-clone.t	Tue Jun 04 20:58:39 2019 +0900
+++ b/tests/test-clone.t	Tue Jun 04 21:13:35 2019 +0900
@@ -719,6 +719,14 @@
   $ hg -R src debugrevlog -c | egrep 'format|flags'
   format : 0
   flags  : (none)
+  $ hg root -R src -T json | sed 's|\\\\|\\|g'
+  [
+   {
+    "hgpath": "$TESTTMP/src/.hg",
+    "reporoot": "$TESTTMP/src",
+    "storepath": "$TESTTMP/src/.hg"
+   }
+  ]
   $ hg clone -U -q src dst
   $ hg -R dst log -q
   0:e1bab28bca43
--- a/tests/test-share.t	Tue Jun 04 20:58:39 2019 +0900
+++ b/tests/test-share.t	Tue Jun 04 21:13:35 2019 +0900
@@ -21,6 +21,14 @@
   $ cd repo2
   $ test -d .hg/store
   [1]
+  $ hg root -Tjson | sed 's|\\\\|\\|g'
+  [
+   {
+    "hgpath": "$TESTTMP/repo2/.hg",
+    "reporoot": "$TESTTMP/repo2",
+    "storepath": "$TESTTMP/repo1/.hg/store"
+   }
+  ]
 
 share shouldn't have a full cache dir, original repo should