#!/bin/env python # vi:set tabstop=4 shiftwidth=4 expandtab: # Author: Caolan McNamara # Usage: e.g. ooocvs SRC680_m44 # Check out the OpenOffice.org source associated with that tag excluding the # external components, which you'll have to have installed as normal # development packages on your systems, and pass the appropiate flags to # configure to use them instead of the copies that OpenOffice.org uses by # default import sys, os, threading, Queue oooentries = Queue.Queue() oooentriescount = 0 #regexp library is a special case, as its heavily modified to #be OpenOffice specfic apis in C++ #stlport is currently a special case, as ABI compatabilty apparently #requires it, and anyway not working with g++ visibility #libxmlsec has been hacked up too much for me to figure out, even #though much of it was upstreamed into lated xmlsec versions #cppunit has been extended to be OOo specific fc9requiredexternals = [ 'external_images', 'regexp', 'cppunit', \ 'psprint_config', 'icc', 'rhino', 'stlport', 'np_sdk', 'libxmlsec', \ 'libegg', 'jfreereport' ] fc5requiredexternals = fc9requiredexternals + [ 'dictionaries' ] fc4requiredexternals = fc5requiredexternals + [ 'beanshell', 'hsqldb', 'libxmlsec', \ 'icu', 'berkeleydb', 'xalan', 'agg' ] rhel4requiredexternals = fc4requiredexternals + [ 'libwpd' ] rhel5requiredexternals = fc5requiredexternals + [ 'libtextcat', 'vigra', 'neon' ] fc7requiredexternals = fc5requiredexternals + [ 'libtextcat', 'neon' ] commonunrequiredinternals = [ 'smoketestoo_native', 'crashrep', \ 'readlicense', 'testshl', 'rvpapi' ] fc4unrequiredinternals = commonunrequiredinternals + [ 'odk', 'sdk_oo', \ 'autodoc', 'udm', 'cosv', 'unodevtools', 'ure' ] fc8unrequiredinternals = commonunrequiredinternals + [ 'XmlSearch', 'ure' ] fc7unrequiredinternals = fc8unrequiredinternals + [ 'sandbox', 'ure' ] fc9unrequiredinternals = fc8unrequiredinternals + [ 'dictionaries', 'javainstaller2', 'ure' ] f10unrequiredinternals = commonunrequiredinternals + [ 'sandbox' 'dictionaries', 'javainstaller2' ] commonsrcandure = [ 'config_office', 'dmake', 'instsetoo_native', 'scp2', 'solenv' \ 'readlicense_oo' ] ureonly = [ 'bridges', 'cli_ure', 'codemaker', 'cppu', 'cppuhelper', 'cpputools', 'idlc', 'io', 'javaunohelper', 'jurt', 'jvmaccess', 'jvmfwk', 'offapi', 'offuh', 'rdbmaker', 'registry', 'remotebridges', 'ridljar', 'sal', 'salhelper', 'soltools', 'stlport', 'stoc', 'store', 'udkapi', 'ure', 'unoil', 'xml2cmp', 'odk', 'sdk_oo', 'autodoc', 'udm', 'cosv', 'unodevtools', 'jut' ] ure = commonsrcandure + ureonly def CheckOut(): while 1: try: origitem = oooentries.get(0) except Queue.Empty: print 'Thread Finished.' break if len(sys.argv) > 3: item = 'cvs -d' + sys.argv[3] + ' -Q co -kk -r' + sys.argv[2] + ' ' + origitem else: item = 'cvs -d:pserver:anoncvs@anoncvs.services.openoffice.org:2401/cvs -Q co -kk -r' + sys.argv[2] + ' ' + origitem print 'Checking out:', item, print '-', oooentries.qsize(), 'of', oooentriescount, 'remain' ret = os.system(item) if ret == 0: print item,' Success' else: print '<'+item+'>', 'failed. Putting to end of queue' oooentries.put(origitem) if len(sys.argv) < 3: print 'Usage: ooocvs [rhel4|fc4|fc5|fc6|fc7|fc8|fc9|rhel4|rhel5|ure|all] CVS_TAG [cvsserver], e.g. ooocvs all SRC680_m44' else: dirtomake = sys.argv[2] if sys.argv[1] == 'ure': dirtomake = dirtomake + '-ure' try: os.mkdir(dirtomake) except: pass os.chdir(dirtomake) if len(sys.argv) > 3: file = os.popen("cvs -d" + sys.argv[3] + " checkout -p CVSROOT/modules") else: file = os.popen("cvs -d:pserver:anoncvs@anoncvs.services.openoffice.org:2401/cvs checkout -p CVSROOT/modules") #file = open('module.list') allentries = {} while 1: line = file.readline() if line == '': break line = line[:-1] if line == '': continue entries = line.split() allentries[entries[0]] = entries[1:] file.close() if sys.argv[1] == 'ure': requiredexternals = '' unrequiredinternals = fc4unrequiredinternals elif sys.argv[1] == 'f10': unrequiredinternals = f10unrequiredinternals requiredexternals = fc9requiredexternals elif sys.argv[1] == 'fc9': unrequiredinternals = fc9unrequiredinternals requiredexternals = fc9requiredexternals elif sys.argv[1] == 'fc8': unrequiredinternals = fc8unrequiredinternals requiredexternals = fc5requiredexternals elif sys.argv[1] == 'fc7': unrequiredinternals = fc7unrequiredinternals requiredexternals = fc7requiredexternals elif sys.argv[1] == 'fc5' or sys.argv[1] == 'fc6': unrequiredinternals = fc4unrequiredinternals requiredexternals = fc5requiredexternals elif sys.argv[1] == 'rhel4': unrequiredinternals = fc4unrequiredinternals requiredexternals = rhel4requiredexternals elif sys.argv[1] == 'rhel5': unrequiredinternals = fc8unrequiredinternals requiredexternals = rhel5requiredexternals else: unrequiredinternals = fc4unrequiredinternals requiredexternals = fc4requiredexternals if sys.argv[1] != 'ure': D = {} for item in (allentries['OpenOffice2'] + allentries['OpenOffice3'] + allentries['Extensions3']): D[item] = 1 L = D.keys() for item in L: if item != '-a': anentry = allentries[item] if len(anentry) != 1: print >> sys.stderr, "Unexpected" else: thelist = anentry[0].split('/') if sys.argv[1] == 'all': oooentries.put(item) else: if unrequiredinternals.count(item) or \ (thelist[0] == 'external' and not requiredexternals.count(item)): print "ignoring", item else: oooentries.put(item) else: for item in ure: oooentries.put(item) oooentriescount = oooentries.qsize() checkouts = [] numcos = 4 if len(sys.argv) > 3: numcos = 30 for threadNum in range(0, numcos): checkouts.append(threading.Thread(target=CheckOut)) checkouts[-1].start() #while 1: # try: # origitem = oooentries.get(0) # print origitem # except Queue.Empty: # break