PyXR

c:\projects\bitpim\src \ version.py



0001 #!/usr/bin/env python
0002 ### BITPIM
0003 ###
0004 ### Copyright (C) 2003-2006 Roger Binns <rogerb@rogerbinns.com>
0005 ###
0006 ### This program is free software; you can redistribute it and/or modify
0007 ### it under the terms of the BitPim license as detailed in the LICENSE file.
0008 ###
0009 ### $Id: version.py 4315 2007-07-23 01:03:58Z djpham $
0010 
0011 """Information about BitPim version number"""
0012 
0013 # We'd like to record information in this file, but without subversion
0014 # considering the file modified.  This is done by placing the information
0015 # in the dollar id fields.  When freeze is run, it does those various
0016 # substitutions
0017 
0018 __FROZEN__="$Id: version.py 4315 2007-07-23 01:03:58Z djpham $"
0019 
0020 import os, sys
0021 import time
0022 
0023 name="BitPim"
0024 vendor="$Id: version.py 4315 2007-07-23 01:03:58Z djpham $"
0025 release=0  # when rereleases of the same version happen, this gets incremented
0026 contact="The BitPim home page is at http://www.bitpim.org.  You can post any " \
0027          "questions or feedback to the mailing list detailed on that page." # where users are sent to contact with feedback
0028 
0029 # user defined version
0030 userdefined=False
0031 userversion=""
0032 uservendor=""
0033 
0034 svnrevision=0  # we don't know
0035 # were we frozen?
0036 f=__FROZEN__.split()
0037 if len(f)==3: # we were - calc svnrevision
0038     svnrevision=int(f[1])
0039 
0040 # fixup vendor
0041 if vendor[1:].startswith("Id:"):
0042     if len(vendor.split())>3:
0043         vendor=""
0044     else:
0045         vendor=vendor.split()[1]
0046 
0047 _headurl="$HeadURL: https://bitpim.svn.sourceforge.net/svnroot/bitpim/releases/1.0.6/src/version.py $".split()[1]
0048 # work out our version number
0049 _rp="https://bitpim.svn.sourceforge.net/svnroot/bitpim/releases/"
0050 
0051 if userdefined:
0052     def isdevelopmentversion(): return True
0053     version=userversion
0054     vendor=uservendor
0055 elif _headurl.startswith(_rp):
0056     def isdevelopmentversion(): return False
0057     version=_headurl[len(_rp):].split("/")[0]
0058     if not vendor:
0059         vendor="official"
0060 else:
0061     def isdevelopmentversion(): return True
0062     prefix="https://bitpim.svn.sourceforge.net/svnroot/bitpim/"
0063     version="-".join(_headurl[len(prefix):].split("/")[:-2]) # -2 to prune off src/version.py
0064     del prefix
0065     # were we frozen?
0066     if svnrevision:
0067         version=version+"-"+`svnrevision`
0068     if not vendor:
0069         vendor="developer build"
0070 
0071 del _headurl
0072 del _rp
0073 
0074 versionstring=version
0075 
0076 if release>0:
0077     versionstring+="-"+`release`
0078 
0079 if not isdevelopmentversion():
0080     # dotted quad version as used on Windows (a.b.c.d where all must be digits only)
0081     # we use major.minor.point.last
0082     dqver=[int(x) for x in version.split(".")]
0083     while len(dqver)<3:
0084         dqver.append(0)
0085     while len(dqver)<4:
0086         dqver.append(svnrevision)
0087     dqver=dqver[:4]
0088 else:
0089     dqver=[0,0,0,svnrevision] # svnrevision will be zero if we weren't frozen
0090 
0091 dqverstr=".".join([`x` for x in dqver])
0092 
0093 del x
0094 
0095 url="http://www.bitpim.org"
0096 
0097 description="BitPim "+versionstring
0098 copyright="(C) 2003-2006 Roger Binns and others - see http://www.bitpim.org"
0099 
0100 def setversion(versionstring, vendorstring='Test'):
0101     """Set the version and vendor based on user's input"""
0102     # my filename
0103     myfilename=os.path.splitext(__file__)[0]+".py"
0104     # update with new version and vendor
0105     result=[]
0106     if versionstring:
0107         # user specifies a version
0108         _versionflg='True'
0109         _version=versionstring
0110         _vendor=vendorstring
0111     else:
0112         _versionflg='False'
0113         _version=_vendor=''
0114     for line in file(myfilename, "rtU"):
0115         if line.startswith('userversion'):
0116             line='userversion="%s"\n'%_version
0117         elif line.startswith('uservendor'):
0118             line='uservendor="%s"\n'%_vendor
0119         elif line.startswith('userdefined'):
0120             line='userdefined=%s\n'%_versionflg
0121         result.append(line)
0122     file(myfilename, "wt").write("".join(result))
0123     # python doesn't check .pyc/.pyo files correctly so we proactively delete them
0124     for ext in (".pyc", ".pyo"):
0125         try:
0126             os.remove(os.path.splitext(__file__)[0]+ext)
0127         except OSError:
0128             pass
0129 
0130 def __freeze():
0131     # my filename
0132     myfilename=os.path.splitext(__file__)[0]+".py"
0133 
0134     # modify the frozen field with the current revision number
0135     print "Freezing version"
0136     svnver=os.popen("svnversion -n .", "r").read()
0137     if len(svnver)<4:
0138         print "svnversion command doesn't appear to be working."
0139         sys.exit(3)
0140     try:
0141         # temporary - remove following line once code works
0142         if svnver[-1]=='M': svnver=svnver[:-1]
0143         [int(x) for x in svnver.split(":")]
0144     except:
0145         print "Your tree isn't pure. Do you have files not checked in (M)?"
0146         print svnver,"was returned by svnversion"
0147         sys.exit(4)
0148     svnver=svnver.split(":")[-1]
0149     print "Embedding svnrevision",svnver,"into",myfilename
0150     result=[]
0151     for line in open(myfilename, "rtU"):
0152         if line.startswith('__FROZEN__="$Id:'):
0153             line='__FROZEN__="$%s %s $"\n' % ("Id:", svnver)
0154         result.append(line)
0155 
0156     open(myfilename, "wt").write("".join(result))
0157     # python doesn't check .pyc/.pyo files correctly so we proactively delete them
0158     for ext in (".pyc", ".pyo"):
0159         try:
0160             os.remove(os.path.splitext(__file__)[0]+ext)
0161         except OSError:
0162             pass
0163 
0164 if __name__=='__main__':
0165     import sys
0166     if len(sys.argv)==1:
0167         # generated for the benefit of the help
0168         # purposely missing " around values
0169         print "#define VERSION", versionstring
0170         print "#define DATENOW", time.strftime("%d %B %Y")
0171     elif sys.argv[1]=="freeze":
0172         __freeze()
0173     else:
0174         print "Unknown arguments",sys.argv[1:]
0175 

Generated by PyXR 0.9.4