mercurial/commands.py
changeset 52417 c97e0fd26225
parent 52416 0a81f3ef054c
child 52418 e98cea8fc858
--- a/mercurial/commands.py	Mon Oct 21 13:39:44 2024 +0200
+++ b/mercurial/commands.py	Mon Oct 21 14:05:14 2024 +0200
@@ -53,7 +53,6 @@
     phases,
     pycompat,
     registrar,
-    requirements,
     revsetlang,
     rewriteutil,
     scmutil,
@@ -61,15 +60,16 @@
     shelve as shelvemod,
     state as statemod,
     tags as tagsmod,
-    ui as uimod,
     util,
     verify as verifymod,
-    vfs as vfsmod,
     wireprotoserver,
 )
 
 from .cmd_impls import graft as graft_impl
-from .configuration import rcutil
+from .configuration import (
+    command as config_command,
+    rcutil,
+)
 from .utils import (
     dateutil,
     procutil,
@@ -2367,58 +2367,9 @@
     Returns 0 on success, 1 if NAME does not exist.
 
     """
-
-    editopts = ('edit', 'local', 'global', 'shared', 'non_shared')
-    if any(opts.get(o) for o in editopts):
-        cmdutil.check_at_most_one_arg(opts, *editopts[1:])
-        if opts.get('local'):
-            if not repo:
-                raise error.InputError(
-                    _(b"can't use --local outside a repository")
-                )
-            paths = [repo.vfs.join(b'hgrc')]
-        elif opts.get('global'):
-            paths = rcutil.systemrcpath()
-        elif opts.get('shared'):
-            if not repo.shared():
-                raise error.InputError(
-                    _(b"repository is not shared; can't use --shared")
-                )
-            if requirements.SHARESAFE_REQUIREMENT not in repo.requirements:
-                raise error.InputError(
-                    _(
-                        b"share safe feature not enabled; "
-                        b"unable to edit shared source repository config"
-                    )
-                )
-            paths = [vfsmod.vfs(repo.sharedpath).join(b'hgrc')]
-        elif opts.get('non_shared'):
-            paths = [repo.vfs.join(b'hgrc-not-shared')]
-        else:
-            paths = rcutil.userrcpath()
-
-        for f in paths:
-            if os.path.exists(f):
-                break
-        else:
-            if opts.get('global'):
-                samplehgrc = uimod.samplehgrcs[b'global']
-            elif opts.get('local'):
-                samplehgrc = uimod.samplehgrcs[b'local']
-            else:
-                samplehgrc = uimod.samplehgrcs[b'user']
-
-            f = paths[0]
-            util.writefile(f, util.tonativeeol(samplehgrc))
-
-        editor = ui.geteditor()
-        ui.system(
-            b"%s \"%s\"" % (editor, f),
-            onerr=error.InputError,
-            errprefix=_(b"edit failed"),
-            blockedtag=b'config_edit',
-        )
-        return
+    edit_level = config_command.find_edit_level(ui, repo, opts)
+    if edit_level is not None:
+        return config_command.edit_config(ui, repo, edit_level)
     ui.pager(b'config')
     fm = ui.formatter(b'config', pycompat.byteskwargs(opts))
     for t, f in rcutil.rccomponents():