[PATCH 1 of 3] upgrade: introduce a 'formatvariant' class

Pierre-Yves David pierre-yves.david at ens-lyon.org
Wed Apr 12 23:12:14 UTC 2017


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1491860083 -7200
#      Mon Apr 10 23:34:43 2017 +0200
# Node ID b42c1f35aedd153c77741d54dac50aa6d3ea43e2
# Parent  3c77f03f16b386940c60af36d6a3ad83bee37ad4
# EXP-Topic upgraderepo
# Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
#              hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r b42c1f35aedd
upgrade: introduce a 'formatvariant' class

The 'deficiency' type has multiple specificities. We create a dedicated class to
host them. More logic will be added incrementally in future changesets.

diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py
--- a/mercurial/upgrade.py
+++ b/mercurial/upgrade.py
@@ -120,6 +120,23 @@ class improvement(object):
     upgrademessage
        Message intended for humans explaining what an upgrade addressing this
        issue will do. Should be worded in the future tense.
+    """
+    def __init__(self, name, type, description, upgrademessage):
+        self.name = name
+        self.type = type
+        self.description = description
+        self.upgrademessage = upgrademessage
+
+    def __eq__(self, other):
+        if not isinstance(other, improvement):
+            # This is what python tell use to do
+            return NotImplemented
+        return self.name == other.name
+
+class formatvariant(improvement):
+    """an improvement subclass dedicated to repository format
+
+    extra attributes:
 
     fromdefault (``deficiency`` types only)
        Boolean indicating whether the current (deficient) state deviates
@@ -129,20 +146,13 @@ class improvement(object):
        Boolean indicating whether the current (deficient) state deviates
        from the current Mercurial configuration.
     """
-    def __init__(self, name, type, description, upgrademessage, **kwargs):
-        self.name = name
-        self.type = type
-        self.description = description
-        self.upgrademessage = upgrademessage
 
-        for k, v in kwargs.items():
-            setattr(self, k, v)
-
-    def __eq__(self, other):
-        if not isinstance(other, improvement):
-            # This is what python tell use to do
-            return NotImplemented
-        return self.name == other.name
+    def __init__(self, name, description, upgrademessage, fromdefault,
+                 fromconfig):
+        super(formatvariant, self).__init__(name, 'deficiency', description,
+                                            upgrademessage)
+        self.fromdefault = fromdefault
+        self.fromconfig = fromconfig
 
 def finddeficiencies(repo):
     """returns a list of deficiencies that the repo suffer from"""
@@ -155,9 +165,8 @@ def finddeficiencies(repo):
     # requirements, so let's not bother.
 
     if 'fncache' not in repo.requirements:
-        deficiencies.append(improvement(
+        deficiencies.append(formatvariant(
             name='fncache',
-            type=deficiency,
             description=_('long and reserved filenames may not work correctly; '
                           'repository performance is sub-optimal'),
             upgrademessage=_('repository will be more resilient to storing '
@@ -167,9 +176,8 @@ def finddeficiencies(repo):
             fromconfig='fncache' in newreporeqs))
 
     if 'dotencode' not in repo.requirements:
-        deficiencies.append(improvement(
+        deficiencies.append(formatvariant(
             name='dotencode',
-            type=deficiency,
             description=_('storage of filenames beginning with a period or '
                           'space may not work correctly'),
             upgrademessage=_('repository will be better able to store files '
@@ -178,9 +186,8 @@ def finddeficiencies(repo):
             fromconfig='dotencode' in newreporeqs))
 
     if 'generaldelta' not in repo.requirements:
-        deficiencies.append(improvement(
+        deficiencies.append(formatvariant(
             name='generaldelta',
-            type=deficiency,
             description=_('deltas within internal storage are unable to '
                           'choose optimal revisions; repository is larger and '
                           'slower than it could be; interaction with other '
@@ -202,9 +209,8 @@ def finddeficiencies(repo):
     for rev in cl:
         chainbase = cl.chainbase(rev)
         if chainbase != rev:
-            deficiencies.append(improvement(
+            deficiencies.append(formatvariant(
                 name='removecldeltachain',
-                type=deficiency,
                 description=_('changelog storage is using deltas instead of '
                               'raw entries; changelog reading and any '
                               'operation relying on changelog data are slower '


More information about the Mercurial-devel mailing list