예제 #1
0
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
예제 #2
0
    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])
예제 #3
0
                      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:
예제 #5
0
__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
예제 #6
0
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