mercurial/scmutil.py
changeset 41575 aec185af621e
parent 41492 02186c6871ac
child 41595 8785188d1915
--- a/mercurial/scmutil.py	Tue Feb 05 21:31:33 2019 +0300
+++ b/mercurial/scmutil.py	Fri Feb 01 22:28:55 2019 -0800
@@ -725,9 +725,32 @@
         return []
     return parents
 
-def getuipathfn(repo, relative=None):
-    if relative is None:
-        relative = repo.ui.configbool('ui', 'relative-paths')
+def getuipathfn(repo, legacyrelativevalue=False, forcerelativevalue=None):
+    """Return a function that produced paths for presenting to the user.
+
+    The returned function takes a repo-relative path and produces a path
+    that can be presented in the UI.
+
+    Depending on the value of ui.relative-paths, either a repo-relative or
+    cwd-relative path will be produced.
+
+    legacyrelativevalue is the value to use if ui.relative-paths=legacy
+
+    If forcerelativevalue is not None, then that value will be used regardless
+    of what ui.relative-paths is set to.
+    """
+    if forcerelativevalue is not None:
+        relative = forcerelativevalue
+    else:
+        config = repo.ui.config('ui', 'relative-paths')
+        if config == 'legacy':
+            relative = legacyrelativevalue
+        else:
+            relative = stringutil.parsebool(config)
+            if relative is None:
+                raise error.ConfigError(
+                    _("ui.relative-paths is not a boolean ('%s')") % config)
+
     if relative:
         cwd = repo.getcwd()
         pathto = repo.pathto