DrTrigon has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/77502


Change subject: adopt version handling and output to transition from SVN to GIT 
(from compat)
......................................................................

adopt version handling and output to transition from SVN to GIT (from compat)

Change-Id: I54977388743f6b135ad296a3e3a46e1e519e81b2
---
M pywikibot/bot.py
M pywikibot/version.py
2 files changed, 69 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/02/77502/1

diff --git a/pywikibot/bot.py b/pywikibot/bot.py
index 3e7aa5b..fa7ee43 100644
--- a/pywikibot/bot.py
+++ b/pywikibot/bot.py
@@ -265,7 +265,7 @@
     log(u'MODULES:')
     for item in sys.modules.keys():
         ver = version.getfileversion('%s.py' % item.replace('.', '/'))
-        if ver and (ver[0] == u'$'):
+        if ver:
             log(u'  %s' % ver)
 
     # messages on bot discussion page?
diff --git a/pywikibot/version.py b/pywikibot/version.py
index 9d23b12..0e5be96 100644
--- a/pywikibot/version.py
+++ b/pywikibot/version.py
@@ -10,8 +10,9 @@
 __version__ = '$Id$'
 
 import os
-import time
+import time, datetime
 import urllib
+import subprocess
 
 cache = None
 
@@ -29,14 +30,15 @@
 
 
 def getversion():
-    data = getversiondict()
+    data = dict(getversiondict()) # copy dict to prevent changes in 'chache'
     try:
-        rev2 = int(getversion_onlinerepo())
-        rev1 = int(str(data['rev']).split()[0])
-        data['cmp_ver'] = 'OUTDATED' if rev1 < rev2 else 'ok'
+        hsh2 = getversion_onlinerepo()
+        hsh1 = data['hsh']
+        data['cmp_ver'] = 'OUTDATED' if hsh1 != hsh2 else 'ok'
     except Exception:
         data['cmp_ver'] = 'n/a'
-    return '%(tag)s (r%(rev)s, %(date)s, %(cmp_ver)s)' % data
+    data['hsh'] = data['hsh'][:7] # make short hash from full hash
+    return '%(tag)s (r%(rev)s, %(hsh)s, %(date)s, %(cmp_ver)s)' % data
 
 
 def getversiondict():
@@ -44,29 +46,32 @@
     if cache:
         return cache
     try:
-        (tag, rev, date) = getversion_svn()
+        (tag, rev, date, hsh) = getversion_git()
     except Exception:
         try:
-            (tag, rev, date) = getversion_nightly()
+            (tag, rev, date, hsh) = getversion_nightly()
         except Exception:
             try:
-                version = getfileversion('pywikibot/__init__.py')
-                if not version:
-                    # fall-back in case everything breaks (should not be used)
-                    import pywikibot
-                    version = pywikibot.__version__
-
-                id, file, rev, date, ts, author, dollar = version.split(' ')
-                tag = 'pywikibot/__init__.py'
-                date = time.strptime('%sT%s' % (date, ts), 
'%Y-%m-%dT%H:%M:%SZ')
+                # TODO: make this $Id$ version tag handling working in git 
again
+                raise NotImplemented
+                #version = getfileversion('pywikibot/__init__.py')
+                #if not version:
+                #    # fall-back in case everything breaks (should not be used)
+                #    import pywikibot
+                #    version = pywikibot.__version__
+                #
+                #id, file, rev, date, ts, author, dollar = version.split(' ')
+                #tag = 'pywikibot/__init__.py'
+                #date = time.strptime('%sT%s' % (date, ts), 
'%Y-%m-%dT%H:%M:%SZ')
             except:
                 # nothing worked; version unknown (but suppress exceptions)
                 # the value is most likely '$Id' + '$', it means that
                 # wikipedia.py got imported without using svn at all
-                return dict(tag='', rev='-1 (unknown)', date='0 (unknown)')
+                return dict(tag='', rev='-1 (unknown)', date='0 (unknown)',
+                            hsh='(unknown)')
 
     datestring = time.strftime('%Y/%m/%d, %H:%M:%S', date)
-    cache = dict(tag=tag, rev=rev, date=datestring)
+    cache = dict(tag=tag, rev=rev, date=datestring, hsh=hsh)
     return cache
 
 
@@ -101,6 +106,36 @@
         raise ParseError
     return (tag, rev, date)
 
+def getversion_git(path=None):
+    _program_dir = path or _get_program_dir()
+    #(try to use .git directory for new entries format)
+    if False:
+        pass # does may be not work at all
+    else:
+        #tag = subprocess.Popen('git config --get remote.origin.url',
+        # shell=True,
+        # stdout=subprocess.PIPE).stdout.read()
+        tag = open(os.path.join(_program_dir, '.git/config'), 'r').read()
+        s = tag.find('url = ', tag.find('[remote "origin"]'))
+        e = tag.find('\n', s)
+        tag = tag[(s+6):e]
+        t = tag.strip().split('/')
+        tag = '[%s] %s' % (t[0][:-1], '/'.join(t[3:])[:-4])
+        info = subprocess.Popen("git log --pretty=format:'%ad|%an|%h|%H|%d' 
--abbrev-commit --date=iso -1 | cat -",
+        shell=True,
+        stdout=subprocess.PIPE).stdout.read()
+        info = info.split('|')
+        date = info[0][:-6]
+        date = time.strptime(date, '%Y-%m-%d %H:%M:%S')
+        rev = subprocess.Popen('git rev-list HEAD | wc -l',
+        shell=True,
+        stdout=subprocess.PIPE).stdout.read()
+        rev = int(rev.strip())
+        hsh = info[3] # also stored in '.git/refs/heads/master'
+    if (not date or not tag or not rev) and not path:
+        raise ParseError
+    return (tag, rev, date, hsh)
+
 
 def getversion_nightly():
     data = open(os.path.join(wikipediatools.get_base_dir(), 'version'))
@@ -109,19 +144,19 @@
     rev = data.readline().strip()
     if not date or not tag or not rev:
         raise ParseError
-    return (tag, rev, date)
+    return (tag, rev, date, '(unknown)')
 
 
 def getversion_onlinerepo(repo=None):
     """ Retrieve revision number of framework online repository's svnroot """
-    url = repo or 
'http://svn.wikimedia.org/svnroot/pywikipedia/trunk/pywikipedia/'
-    rev = None
+    url = repo or 'https://git.wikimedia.org/feed/pywikibot/core'
+    hsh = None
     try:
-        buf = urllib.urlopen(url).read()
-        rev = buf.split(' ')[3][:-1]
+        buf = urllib.urlopen(url).readlines()
+        hsh = buf[13].split('/')[5][:-1]
     except:
         raise ParseError
-    return rev
+    return hsh
 
 ## Simple version comparison
 #
@@ -134,10 +169,17 @@
     """
     _program_dir = _get_program_dir()
     __version__ = None
+    size, mtime = None, None
     fn = os.path.join(_program_dir, filename)
     if os.path.exists(fn):
         for line in open(fn, 'r').readlines():
             if line.find('__version__') == 0:
                 exec(line)
                 break
-    return __version__
+        stat = os.stat(fn)
+        size = stat.st_size
+        mtime = datetime.datetime.fromtimestamp(stat.st_mtime).isoformat(' ')
+    if size and mtime and __version__:
+        return u'%s %s %s %s' % (filename, size, mtime, __version__[5:-1][:7])
+    else:
+        return None

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I54977388743f6b135ad296a3e3a46e1e519e81b2
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: DrTrigon <[email protected]>

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

Reply via email to