Patchwork D1288: dispatch: filter the repository depending on func.cmdtype

login
register
mail settings
Submitter phabricator
Date Nov. 2, 2017, 6:09 p.m.
Message ID <differential-rev-PHID-DREV-qsdmsqqluzyzfklqjcep-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/25357/
State Superseded
Headers show

Comments

phabricator - Nov. 2, 2017, 6:09 p.m.
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This patch adds support for filtering the repository on the basis of
  func.cmdtype. After this patch, repo.filtername will be used to decide what
  level of access the running command can has on hidden commits.
  
  All this logic is behind a config flag `experimental.directacess` which defaults
  to False.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1288

AFFECTED FILES
  mercurial/configitems.py
  mercurial/dispatch.py

CHANGE DETAILS




To: pulkit, #hg-reviewers
Cc: mercurial-devel
phabricator - Dec. 19, 2017, 12:22 p.m.
pulkit abandoned this revision.
pulkit added a comment.


  Moved the logic to filter repository at command level. This is not required anymore.
  This series is superseded by https://phab.mercurial-scm.org/D1730 - https://phab.mercurial-scm.org/D1735.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1288

To: pulkit, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -42,6 +42,8 @@ 
 )
 
 unrecoverablewrite = registrar.command.unrecoverablewrite
+recoverablewrite = registrar.command.recoverablewrite
+readonly = registrar.command.readonly
 
 class request(object):
     def __init__(self, args, ui=None, repo=None, fin=None, fout=None,
@@ -927,6 +929,14 @@ 
                 ui = repo.ui
                 if options['hidden']:
                     repo = repo.unfiltered()
+
+                # Accessing hidden commits based on func.cmdtype
+                if lui.configbool('experimental', 'directaccess'):
+                    if func.cmdtype == readonly:
+                        repo = repo.filtered('visible-hidden')
+                    elif func.cmdtype == recoverablewrite:
+                        repo = repo.filtered('visible-warnhidden')
+
             args.insert(0, repo)
         elif rpath:
             ui.warn(_("warning: --repository ignored\n"))
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -359,6 +359,9 @@ 
 coreconfigitem('experimental', 'crecordtest',
     default=None,
 )
+coreconfigitem('experimental', 'directaccess',
+    default=False,
+)
 coreconfigitem('experimental', 'editortmpinhg',
     default=False,
 )