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