#!/usr/bin/python subversion_id = "$Id$" import sys from optparse import OptionParser ############################## MAIN="/root/bin/vbuild-nightly.sh" URL='http://svn.planet-lab.org/svn/' MAILTO="-m build@onelab.eu" CURRENT_TRUNK='4.3' DEFAULT_BRANCH='4.3' MAJOR_HASH = { '4.2' : { 'latest':'rc27', 'fcdistros' : ['f8'], 'pldistros' : ['planetlab','onelab'], 'tags': '-t %(pldistro)s-tags-4.2.mk', }, '4.3' : { 'latest': None, 'fcdistros' : ['centos5','f12','f10','f8'], 'pldistros' : ['onelab'], 'tags': '-t %(pldistro)s-tags.mk', }, '5.0' : { 'latest': None, 'fcdistros' : ['centos5','f12','f10','f8'], 'pldistros' : ['onelab'], 'tags': '-t %(pldistro)s-k27-tags.mk', }, } ############################## def shortname (name): if name == 'onelab': return '1l' if name == '1l': return '1l' if name == 'planetlab': return 'pl' if name == 'pl': return 'pl' if name == 'centos5': return 'c5' if name == 'c5': return 'c5' if name=='gnuradio': return name if name[0] == 'f': return name return 'xx' def longname (name): if name == 'onelab': return 'onelab' if name == '1l': return 'onelab' if name == 'planetlab': return 'planetlab' if name == 'pl': return 'planetlab' if name == 'centos5': return 'centos5' if name == 'c5': return 'centos5' if name=='gnuradio': return name if name[0] == 'f': return name return 'xx' def latest_tag (branch): try: return MAJOR_HASH[branch]['latest'] except: print 'WARNING: unknown branch',branch return None def default_fcdistros (branch): try: return MAJOR_HASH[branch]['fcdistros'] except: print 'WARNING: unknown branch',branch raise def default_pldistros (branch): try: return MAJOR_HASH[branch]['pldistros'] except: print 'WARNING: unknown branch',branch raise # return (branch,tag) def parse_branch (major): try: [branch,tag]=major.split('-') ## latest tag: use -b 4.2- or -b 4.2-latest if not tag or tag[0]=='l': tag=latest_tag(branch) return (branch,tag) except: try: [branch]=major.split('-') return (branch,None) except: print 'could not parse major',major raise def build_build_option (branch,tag): if tag: return ' -s ' + URL + "build/tags/%(branch)s-%(tag)s"%locals() if branch == CURRENT_TRUNK: # return ' -s ' + URL + "build/trunk"%locals() return '' else: return ' -s ' + URL + "build/branches/%(branch)s"%locals() def build_tags_option (branch,locals_dict): try: return MAJOR_HASH[branch]['tags']%locals_dict except: return '---------- could not set up tags option ----------' #################### def optparse_list (option, opt, value, parser): try: setattr(parser.values,option.dest,getattr(parser.values,option.dest)+value.split()) except: setattr(parser.values,option.dest,value.split()) def main (): usage="""Usage: %prog build-spec [ .. build-spec] print out a list of nightly build commands to run Examples: %prog 4.3-rc01 -- to build 4.3-rc01 %prog 4.3-l -- or %prog 4.3- -- to build latest known rc for 4.3 %prog 4.3 -- to build off the corresponding branch (or trunk) """ parser=OptionParser(usage=usage,version=subversion_id) parser.add_option("-f","--fcdistros",action="callback",callback=optparse_list, dest="fcdistros", default=[], nargs=1,type="string", help="""specify target fcdistros -- can be set multiple times, or use quotes""") parser.add_option("-d","--distros",action="callback",callback=optparse_list, dest="pldistros", default=[], nargs=1,type="string", help="""specify target pldistros -- can be set multiple times, or use quotes""") parser.add_option("-i","--bits",action="callback",callback=optparse_list, dest="bits", default=[], nargs=1,type="string", help="""specify target bits -- can be set multiple times, or use quotes""") parser.add_option("-b","--base", action="store", dest="base", default="@DATE@", help="specify alternate base (default is @DATE@ on trunk)") parser.add_option("-o","--overwrite",action="store_true",dest="overwrite",default=False, help="pass -o rather than -b (from 4.3)") (options, args) = parser.parse_args() if not options.bits: options.bits=["32","64"] base_option = '-b' if options.overwrite: base_option='-o' if len(args) == 0: parser.print_help() sys.exit(1) for build in args: (branch,tag) = parse_branch (build) build_option=build_build_option(branch,tag) print '#################### build',build, if tag: print 'tag',tag else: print 'trunk (or branch)' if options.fcdistros: fcdistros=options.fcdistros else: fcdistros=default_fcdistros(branch) if options.pldistros: pldistros=options.pldistros else: pldistros=default_pldistros(branch) base=options.base for pldistro in pldistros: tags_option = build_tags_option(branch,locals()) for fcdistro in fcdistros: for bit in options.bits: p="linux"+bit f=shortname(fcdistro) d=shortname(pldistro) # trunk-like builds if not tag: if branch == CURRENT_TRUNK: buildname="%(base)s--%(d)s-%(f)s-%(bit)s"%locals() else: buildname="%(base)s--%(branch)s--%(d)s-%(f)s-%(bit)s"%locals() # tagged builds else: buildname="%(pldistro)s--%(branch)s-%(tag)s-%(f)s-%(bit)s"%locals() print MAIN,MAILTO,build_option,tags_option,'-d',pldistro,'-f',fcdistro,'-p',p,base_option,buildname main()