← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/dev-version into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/dev-version into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)


For us developers... pull the bzr version.
-- 
https://code.launchpad.net/~raoul-snyman/openlp/dev-version/+merge/38084
Your team OpenLP Core is requested to review the proposed merge of lp:~raoul-snyman/openlp/dev-version into lp:openlp.
=== modified file 'openlp.pyw'
--- openlp.pyw	2010-09-30 05:04:43 +0000
+++ openlp.pyw	2010-10-10 21:18:40 +0000
@@ -30,6 +30,7 @@
 import logging
 from optparse import OptionParser
 from traceback import format_exception
+from subprocess import Popen, PIPE
 
 from PyQt4 import QtCore, QtGui
 
@@ -71,6 +72,84 @@
     """
     log.info(u'OpenLP Application Loaded')
 
+    def _get_version(self):
+        """
+        Load and store current Application Version
+        """
+        if u'--dev-version' in sys.argv:
+            # If we're running the dev version, let's use bzr to get the version
+            try:
+                # If bzrlib is availble, use it
+                from bzrlib.branch import Branch
+                b = Branch.open_containing('.')[0]
+                b.lock_read()
+                try:
+                    # Get the branch's latest revision number.
+                    revno = b.revno()
+                    # Convert said revision number into a bzr revision id.
+                    revision_id = b.dotted_revno_to_revision_id((revno,))
+                    # Get a dict of tags, with the revision id as the key.
+                    tags = b.tags.get_reverse_tag_dict()
+                    # Check if the latest
+                    if revision_id in tags:
+                        full_version = u'%s' % tags[revision_id][0]
+                    else:
+                        full_version = '%s-bzr%s' % \
+                            (sorted(b.tags.get_tag_dict().keys())[-1], revno)
+                finally:
+                    b.unlock()
+            except:
+                # Otherwise run the command line bzr client
+                bzr = Popen((u'bzr', u'tags', u'--sort', u'time'), stdout=PIPE)
+                output, error = bzr.communicate()
+                code = bzr.wait()
+                if code != 0:
+                    raise Exception(u'Error running bzr tags')
+                lines = output.splitlines()
+                if len(lines) == 0:
+                    tag = u'0.0.0'
+                    revision = u'0'
+                else:
+                    tag, revision = lines[-1].split()
+                bzr = Popen((u'bzr', u'log', u'--line', u'-r', u'-1'),
+                    stdout=PIPE)
+                output, error = bzr.communicate()
+                code = bzr.wait()
+                if code != 0:
+                    raise Exception(u'Error running bzr log')
+                latest = output.split(u':')[0]
+                full_version = latest == revision and tag or \
+                    u'%s-bzr%s' % (tag, latest)
+        else:
+            # We're not running the development version, let's use the file
+            filepath = AppLocation.get_directory(AppLocation.VersionDir)
+            filepath = os.path.join(filepath, u'.version')
+            fversion = None
+            try:
+                fversion = open(filepath, u'r')
+                full_version = unicode(fversion.read()).rstrip()
+            except IOError:
+                log.exception('Error in version file.')
+                full_version = u'0.0.0-bzr000'
+            finally:
+                if fversion:
+                    fversion.close()
+        bits = full_version.split(u'-')
+        app_version = {
+            u'full': full_version,
+            u'version': bits[0],
+            u'build': bits[1] if len(bits) > 1 else None
+        }
+        if app_version[u'build']:
+            log.info(
+                u'Openlp version %s build %s',
+                app_version[u'version'],
+                app_version[u'build']
+            )
+        else:
+            log.info(u'Openlp version %s' % app_version[u'version'])
+        return app_version
+
     def notify(self, obj, evt):
         #TODO needed for presentation exceptions
         return QtGui.QApplication.notify(self, obj, evt)
@@ -79,39 +158,7 @@
         """
         Run the OpenLP application.
         """
-        #Load and store current Application Version
-        filepath = AppLocation.get_directory(AppLocation.VersionDir)
-        filepath = os.path.join(filepath, u'.version')
-        fversion = None
-        try:
-            fversion = open(filepath, u'r')
-            for line in fversion:
-                full_version = unicode(line).rstrip() #\
-                    #.replace(u'\r', u'').replace(u'\n', u'')
-                bits = full_version.split(u'-')
-                app_version = {
-                    u'full': full_version,
-                    u'version': bits[0],
-                    u'build': bits[1] if len(bits) > 1 else None
-                }
-            if app_version[u'build']:
-                log.info(
-                    u'Openlp version %s build %s',
-                    app_version[u'version'],
-                    app_version[u'build']
-                )
-            else:
-                log.info(u'Openlp version %s' % app_version[u'version'])
-        except IOError:
-            log.exception('Error in version file.')
-            app_version = {
-                u'full': u'1.9.0-bzr000',
-                u'version': u'1.9.0',
-                u'build': u'bzr000'
-            }
-        finally:
-            if fversion:
-                fversion.close()
+        app_version = self._get_version()
         #provide a listener for widgets to reqest a screen update.
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'openlp_process_events'), self.processEvents)
@@ -172,6 +219,9 @@
     parser.add_option('-p', '--portable', dest='portable',
         action='store_true', help='Specify if this should be run as a '
         'portable app, off a USB flash drive (not implemented).')
+    parser.add_option('-d', '--dev-version', dest='dev_version',
+        action='store_true', help='Ignore the version file and pull the '
+        'version directly from Bazaar')
     parser.add_option('-s', '--style', dest='style',
         help='Set the Qt4 style (passed directly to Qt4).')
     # Set up logging


Follow ups