def mungtag(s, allow_use_cmt=False): if allow_use_cmt: try: return mungtag(s) except Exception: import PyCmt.Cmt as Cmt cmt = Cmt.CmtWrapper() pkg = cmt.find_pkg(s.split('-')[0]) if pkg: avn._packpath = os.path.join(pkg.path, pkg.name) avn._path = None if s in ('HEAD', 'TRUNK'): thisurl = os.path.join(avn.root, avn.packpath, 'trunk') elif s == 'THIS': thisurl = avn.url elif s.endswith('-branch'): thisurl = os.path.join(avn.root, avn.packpath, 'branches', s) else: thisurl = os.path.join(avn.root, avn.packpath, 'tags', s) if not (avn.path is None): thisurl = os.path.join(thisurl, avn.path) return thisurl
def __init__(self, pkg, env=None, shell=os, msg=msg): self.pkg_infos = pkg.copy() self.pkg_name = pkg['pkg_name'] self.pkg_ver = pkg['pkg_ver'] self.pkg_src = pkg['pkg_src'] self.pkg_install_dir = pkg['pkg_install_dir'] self.pkg_dest_dir = pkg['pkg_install_dir'] # not a typo self.pkg_installarea_dir = pkg['pkg_installarea_dir'] self.pkg_build_dir = osp.join(pkg['pkg_root'], env['CMTCONFIG'], 'pkg-build-%s' % self.pkg_name) import PyCmt.Cmt as Cmt self._cmt = Cmt.CmtWrapper() self.msg = msg self.sh = shell self._orig_dir = self.sh.getcwd() self.env = env.copy() if isinstance(env, dict) else {} for k, v in self.pkg_infos.iteritems(): self.env[k] = v self.env['pkg_install_dir'] = self.pkg_install_dir self.env['pkg_build_dir'] = self.pkg_build_dir self.env['pkg_dest_dir'] = self.pkg_dest_dir get = self.cmt self.env['CMTINSTALLAREA'] = get(macro_value='CMTINSTALLAREA') self.env['tag'] = get(macro_value='tag') self.env.update(_cmt_to_autoconf(self.cmt)) for k in self.env: if k.startswith('pkg_'): self.msg.debug('expanding [%s] => [%s]', k, self[k]) setattr(self, k, self[k])
help = "The name of the project to inspect" ) sc = 0 report = [] (options, args) = parser.parse_args() msg = _L.logging.getLogger("TabNanny") msg.setLevel(_L.logging.INFO) msg.info('TabNanny checker') project_names = None if len(args) > 0: project_names = [ arg for arg in args if arg[0] != "-" ] pass cmt = PyCmt.CmtWrapper() if options.project_name is None: if project_names is None: # take the top-root project name options.project_name = cmt.projects_dag()[0].name else: # FIXME # take the first one... options.project_name = str(project_names[0]) # also allows to give a filename: early exit... import os.path as osp if osp.exists(options.project_name): path = options.project_name msg.info(':'*80) msg.info('checking [%s]...', path)
options.output = 'proj_%s_cmt_pkg_shelve.db' % options.project.lower() options.output = os.path.expanduser(options.output) options.output = os.path.expandvars(options.output) options.output = os.path.realpath(options.output) options.log_lvl = options.log_lvl.upper() if hasattr(L.logging, options.log_lvl): lvl = getattr(L.logging, options.log_lvl) else: print "*" * 80 print "BootStrap: Unknown logging level [%s] !!" % options.log_lvl print "BootStrap: Defaulting to [INFO]..." print "*" * 80 lvl = L.logging.INFO cmt = Cmt.CmtWrapper(lvl) msg = cmt.msg msg.info('building dependencies...') ## _allowed_output_db_formats = ('.pkl',) ## _ext = os.path.splitext (options.output)[1] ## if not _ext in _allowed_output_db_formats: ## msg.error ('unknown output-db format: [%s]', _ext) ## msg.error ('allowed formats are %r', _allowed_output_db_formats) ## raise SystemExit(1) ## if _ext == '.pkl': ## try: ## import cPickle as pickle ## except ImportError:
__version__ = "$Revision: 1.4 $" __author__ = "Frank Winklmeier" import sys import os import getopt import string import subprocess from PyCmt import Cmt try: import multiprocessing as mp except ImportError: mp = None cmt = Cmt.CmtWrapper() def usage(): print """\ Usage: pkgco.py [OPTION]... PACKAGE... Checkout PACKAGE from the release. Possible formats: Package find container and checkout tag in release Package-X-Y-Z find container and checkout specified tag Container/Package checkout tag in release Container/Package-X-Y-Z checkout specified tag where OPTION is: -A checkout the HEAD/trunk of the package(s) -f FILE contains PACKAGE list (one per line) -s only show package version, no checkout
def main(args): """submit one or more package tags to TagCollector TAG can be one of the following formats: Container/Package-00-01-02 Package-00-01-02 Package --> will use latest package tag All submitted tags need approval via the TagCollector web interface. If several TAGs are given they will be submitted to the same release(s) with the same justification, etc. Optionally a bundle name can be specified. If no release number is given a list of available releases is presented. For any required argument that is not specified on the command line, an interactive query is presented. Some text fields support history (arrow keys). Authentication is handled via pyAMI (see https://atlas-ami.cern.ch/AMI/pyAMI) """ import PyUtils.AmiLib as amilib client = amilib.Client() def select_tag(): value = raw_input('Please select (q to quit): ') if value.lower() == 'q': raise StopIteration return int(value) # create a list of (pkg,tag) with full package path pkgs = [] for pkg in args.pkgs: # a file ? if osp.exists(pkg): fname = pkg print "::: taking tags from file [%s]..." % (fname, ) for l in open(fname, 'r'): l = l.strip() if l: print " - [%s]" % (l, ) pkgs.append(l) else: pkgs.append(pkg) pkg_list = [ client.find_pkg(pkg, cbk_fct=select_tag, check_tag=False) for pkg in pkgs ] # setup history readline.set_history_length(10) # query release if project is known if args.project and not args.release: for p in args.project.split(','): rel = client.get_open_releases(p) if len(rel) == 0: continue if not args.release: args.release = query_release(rel, p) else: args.release += (',%s' % query_release(rel, p)) if args.release and len(args.release.split(',')) == 1: _release = args.release.split(',')[0] args.release = ','.join([_release] * len(pkg_list)) # adjust the project list too if args.project and len(args.project.split(',')) == 1: args.project = ','.join([args.project.split(',')[0]] * len(pkg_list)) # query project if release is known if args.release and not args.project: _releases = args.release.split(',') _projects = [] rel = _releases[0] for pkg in pkg_list: proj = _get_projects(client, rel, pkg) if len(proj) == 0: _projects.append(None) continue v = query_project(proj, rel, pkg) _projects.append(v) pass # pkgs if not args.project: args.project = ','.join(_projects) else: args.project += ',' + ','.join(_projects) pass # Find latest tag if needed print '-' * 80 for p in pkg_list: if not 'packageTag' in p: pkg = (p['packagePath'] + p['packageName']).strip( '/') # CMTise path p['packageTag'] = cmt.CmtWrapper().get_latest_pkg_tag(pkg) print 'Using latest tag %s' % (p['packageTag']) # query for missing options for o in ( 'project', 'release', 'justification', 'savannah', ): value = getattr(args, o) if value: print '%s : %s' % (o, value) else: setattr(args, o, query_option(o)) print '-' * 80 args.project = args.project.split(',') args.release = args.release.split(',') if len(args.project) != len(args.release): raise RuntimeError( 'Number of projects %s and releases %s do not match' % (args.project, args.release)) # If only one tag given, submit this tag to all releases if len(pkg_list) == 1: pkg_list = pkg_list * len(args.release) choice = raw_input("Submit tag? [Y/n] ") ok = len(choice) == 0 or choice.upper() == "Y" if args.dry_run: client.dry_run = args.dry_run releases = args.release[:] projects = args.project[:] exitcode = 0 if ok: # Submit tag request for p, rel, proj in zip(pkg_list, releases, projects): args.release = [rel] args.project = [proj] submit_tag(client, args, p['packagePath'] + p['packageName'], p['packageTag']) else: print "Tag submission aborted" exitcode = 1 return exitcode