jenkins-bot has submitted this change and it was merged.

Change subject: make-release: abstract out version numbers
......................................................................


make-release: abstract out version numbers

I wanted to stop passing version and abstract out decomposedVersion
somewhere else.  The new MwVersion is passed the raw version number (ie:
'1.20.1'), run the decomposition and let one easily access the major
version/previous branch whatever.

The various methods relying on versions now use the MwVersion object via
self.version.  That makes the code slightly more readeable.

Change-Id: Ib0ec3fc46e28a285d5af7ee3e584616450b285f9
---
M make-release/make-release.py
1 file changed, 87 insertions(+), 54 deletions(-)

Approvals:
  Hashar: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/make-release/make-release.py b/make-release/make-release.py
index afc2d43..1f7aa86 100755
--- a/make-release/make-release.py
+++ b/make-release/make-release.py
@@ -70,40 +70,6 @@
     return list(set(extensions))
 
 
-def decomposeVersion(version):
-    ret = {}
-    m = re.compile('(\d+)\.(\d+)\.(\d+)$').match(version)
-    if m is not None:
-        ret['major'] = m.group(1) + "." + m.group(2)
-        ret['branch'] = ('tags/' + m.group(1) + '.' + m.group(2)
-                         + '.' + m.group(3))
-        if int(m.group(3)) == 0:
-            ret['prevVersion'] = None
-        else:
-            newMinor = str(int(m.group(3)) - 1)
-            ret['prevVersion'] = ret['major'] + '.' + newMinor
-            ret['prevBranch'] = ('tags/' + m.group(1) + '.' + m.group(2)
-                                 + '.' + newMinor)
-        return ret
-
-    m = re.compile('(\d+)\.(\d+)\.(\d+)([A-Za-z]+)(\d+)$').match(version)
-    if m is None:
-        return None
-
-    ret['major'] = m.group(1) + "." + m.group(2)
-    ret['branch'] = ('tags/' + m.group(1) + '.' + m.group(2) + '.'
-                     + m.group(3) + m.group(4) + m.group(5))
-    if int(m.group(5)) == 0:
-        ret['prevVersion'] = None
-    else:
-        newMinor = str(int(m.group(5)) - 1)
-        ret['prevVersion'] = (ret['major'] + "." + m.group(3)
-                              + m.group(4) + newMinor)
-        ret['prevBranch'] = ('tags/' + m.group(1) + '.' + m.group(2)
-                             + '.' + m.group(3) + m.group(4) + newMinor)
-    return ret
-
-
 def versionToBranch(version):
     return 'tags/' + version
 
@@ -190,12 +156,80 @@
     return parser.parse_args()
 
 
+class MwVersion(object):
+    "Abstract out a MediaWiki version"
+
+    def __init__(self, version):
+        decomposed = self.decomposeVersion(version)
+
+        self.raw = version
+        self.major = decomposed.get('major', None)
+        self.branch = decomposed.get('branch', None)
+        self.prev_version = decomposed.get('prevVersion', None)
+        self.prev_branch = decomposed.get('prevBranch', None)
+
+    def __repr__(self):
+        if self.raw is None:
+            return "<MwVersion Null (snapshot?)>"
+
+        return "<MwVersion %s major: %s (prev: %s), branch: %s (prev: %s)>" % (
+            self.raw,
+            self.major, self.prev_version,
+            self.branch, self.prev_branch)
+
+    def decomposeVersion(self, version):
+        '''Split a version number to branch / major
+
+        Whenever a version is recognized, a dict is returned with keys:
+            major, branch, prevVersion and prevBranch
+
+        Default: {}
+        '''
+
+        ret = {}
+        if version is None:
+            return ret
+
+        m = re.compile('(\d+)\.(\d+)\.(\d+)$').match(version)
+        if m is not None:
+            ret['major'] = m.group(1) + "." + m.group(2)
+            ret['branch'] = ('tags/' + m.group(1) + '.' + m.group(2)
+                             + '.' + m.group(3))
+            if int(m.group(3)) == 0:
+                ret['prevVersion'] = None
+            else:
+                newMinor = str(int(m.group(3)) - 1)
+                ret['prevVersion'] = ret['major'] + '.' + newMinor
+                ret['prevBranch'] = ('tags/' + m.group(1) + '.' + m.group(2)
+                                     + '.' + newMinor)
+            return ret
+
+        m = re.compile('(\d+)\.(\d+)\.(\d+)([A-Za-z]+)(\d+)$').match(version)
+        if m is None:
+            return ret
+
+        ret['major'] = m.group(1) + "." + m.group(2)
+        ret['branch'] = ('tags/' + m.group(1) + '.' + m.group(2) + '.'
+                         + m.group(3) + m.group(4) + m.group(5))
+        if int(m.group(5)) == 0:
+            ret['prevVersion'] = None
+        else:
+            newMinor = str(int(m.group(5)) - 1)
+            ret['prevVersion'] = (ret['major'] + "." + m.group(3)
+                                  + m.group(4) + newMinor)
+            ret['prevBranch'] = ('tags/' + m.group(1) + '.' + m.group(2)
+                                 + '.' + m.group(3) + m.group(4) + newMinor)
+        return ret
+
+
 class MakeRelease(object):
     "Surprisingly: do a MediaWiki release"
 
     options = None
+    version = None  # MwVersion object
 
     def __init__(self, options):
+        self.version = MwVersion(options.version)
         self.options = options
 
     def main(self):
@@ -210,18 +244,19 @@
         bundles = config.get('bundles')
         smwExtensions = bundles.get('smw')
 
+        print "Doing release for %s" % self.version
+
+        if self.version.branch is None:
+            print "No branch, assuming '%s'. Override with --branch." % (
+                  options.branch)
+            self.version.branch = options.branch
+
         # No version specified, assuming a snapshot release
         if options.version is None:
             self.makeRelease(
                 version='snapshot-' + time.strftime('%Y%m%d', time.gmtime()),
-                branch=options.branch,
                 dir='snapshots')
             return 0
-
-        decomposed = decomposeVersion(options.version)
-        if decomposed is None:
-            print 'Invalid version number "%s"' % (options.version)
-            return 1
 
         if options.smw:
             # Other extensions for inclusion
@@ -233,14 +268,11 @@
             self.makeRelease(
                 extensions=extensions,
                 version=options.version,
-                prevVersion=options.previousversion,
-                prevBranch=versionToBranch(options.previousversion),
-                branch=decomposed['branch'],
-                dir=decomposed['major'])
+                dir=self.version.major)
             return 0
 
         noPrevious = False
-        if decomposed['prevVersion'] is None:
+        if self.version.prev_version is None:
             if not self.ask("No previous release found. Do you want to make a "
                             "release with no patch?"):
                 print('Please specify the correct previous release '
@@ -253,11 +285,10 @@
             self.makeRelease(
                 extensions=extensions,
                 version=options.version,
-                branch=decomposed['branch'],
-                dir=decomposed['major'])
+                dir=self.version.major)
         else:
             if not self.ask("Was %s the previous release?" %
-                            decomposed['prevVersion']):
+                            self.version.prev_version):
                 print('Please specify the correct previous release '
                       'on the command line')
                 return 1
@@ -265,9 +296,6 @@
             self.makeRelease(
                 extensions=extensions,
                 version=options.version,
-                branch=decomposed['branch'],
-                prevVersion=decomposed['prevVersion'],
-                prevBranch=decomposed['prevBranch'],
                 dir=options.buildroot)
         return 0
 
@@ -415,10 +443,14 @@
         print filename + ' written'
         return filename
 
-    def makeRelease(self, version, branch, dir, prevVersion=None,
-                    prevBranch=None, extensions=[]):
+    def makeRelease(self, version, dir, extensions=[]):
 
         rootDir = self.options.buildroot
+
+        # variables related to the version
+        branch = self.version.branch
+        #prevBranch = self.version.prev_branch
+        prevVersion = self.version.prev_version
 
         if rootDir is None:
             rootDir = os.getcwd()
@@ -476,7 +508,8 @@
         # Patch
         if prevVersion is not None:
             prevDir = 'mediawiki-' + prevVersion
-            self.export(prevBranch, prevDir, buildDir)
+            self.export(versionToBranch(prevVersion),
+                        prevDir, buildDir)
 
             for ext in getVersionExtensions(prevVersion, extensions):
                 self.exportExtension(branch, ext, prevDir)

-- 
To view, visit https://gerrit.wikimedia.org/r/86264
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib0ec3fc46e28a285d5af7ee3e584616450b285f9
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/tools/release
Gerrit-Branch: master
Gerrit-Owner: Hashar <[email protected]>
Gerrit-Reviewer: Adamw <[email protected]>
Gerrit-Reviewer: Hashar <[email protected]>
Gerrit-Reviewer: MarkAHershberger <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to