Example #1
0
File: venv.py Project: eepp/vlttng
    def rm_rf(self, path):
        # some basic protection
        no_rm_dirs = (
            os.path.expanduser('~'),
            '/',
            '/bin',
            '/boot',
            '/dev',
            '/etc',
            '/home',
            '/lib',
            '/lib64',
            '/opt',
            '/root',
            '/run',
            '/sbin',
            '/usr',
            '/var'
        )
        no_rm_dirs = [os.path.normpath(d) for d in no_rm_dirs]
        norm_path = os.path.normpath(path)

        if norm_path in no_rm_dirs:
            perror('Not removing protected directory "{}"'.format(norm_path))

        cmd = 'rm -rf {}'.format(_sq(path))
        self.run(cmd)
Example #2
0
    def rm_rf(self, path):
        # some basic protection
        no_rm_dirs = (
            os.path.expanduser('~'),
            '/',
            '/bin',
            '/boot',
            '/dev',
            '/etc',
            '/home',
            '/lib',
            '/lib64',
            '/opt',
            '/root',
            '/run',
            '/sbin',
            '/usr',
            '/var'
        )
        no_rm_dirs = [os.path.normpath(d) for d in no_rm_dirs]
        norm_path = os.path.normpath(path)

        if norm_path in no_rm_dirs:
            perror('Not removing protected directory "{}"'.format(norm_path))

        cmd = 'rm -rf {}'.format(_sq(path))
        self.run(cmd)
Example #3
0
    def _run_line(self, cmd):
        _pcmd(cmd)
        stdio = None if self._verbose else subprocess.DEVNULL
        popen = subprocess.Popen(cmd, stdin=None, stdout=stdio, stderr=stdio,
                                 shell=True, cwd=self._cwd, env=self._env)
        popen.wait()

        if popen.returncode != 0:
            perror('Command exited with status {}'.format(popen.returncode))
Example #4
0
File: venv.py Project: eepp/vlttng
    def _run_line(self, cmd):
        _pcmd(cmd)
        stdio = None if self._verbose else subprocess.DEVNULL
        popen = subprocess.Popen(cmd, stdin=None, stdout=stdio, stderr=stdio,
                                 shell=True, cwd=self._cwd, env=self._env)
        popen.wait()

        if popen.returncode != 0:
            perror('Command exited with status {}'.format(popen.returncode))
Example #5
0
File: venv.py Project: eepp/vlttng
def _get_full_env(env, paths):
    new_env = copy.deepcopy(os.environ)

    try:
        new_env.update(env)
    except:
        perror('Invalid environment in profile')

    _patch_env(new_env, paths)

    return new_env
Example #6
0
def _get_full_env(env, paths):
    new_env = copy.deepcopy(os.environ)

    try:
        new_env.update(env)
    except:
        perror('Invalid environment in profile')

    _patch_env(new_env, paths)

    return new_env
Example #7
0
    def _create(self):
        self._validate_profile()

        _pinfo('Create LTTng virtual environment')

        # create virtual environment directory
        if os.path.exists(self._paths.venv):
            if self._force:
                _pwarn(
                    'Virtual environment path "{}" exists: removing directory'.
                    format(self._paths.venv))
                self._runner.rm_rf(self._paths.venv)
            else:
                perror(
                    'Virtual environment path "{}" exists (use --force to overwrite)'
                    .format(self._paths.venv))

        self._runner.mkdir_p(self._paths.venv)
        self._runner.mkdir_p(self._paths.home)
        self._runner.mkdir_p(self._paths.bin)
        self._runner.mkdir_p(self._paths.lib)
        self._runner.mkdir_p(self._paths.include)
        self._runner.mkdir_p(self._paths.opt)
        self._runner.mkdir_p(self._paths.share_java)

        # fetch sources and extract/checkout
        _pinfo('Fetch sources')
        self._fetch_sources()

        # create build instructions for projects to build
        self._create_project_instructions()

        # build projects in this order
        self._build_project('urcu')
        self._build_project('popt')
        self._build_lttng_ust()
        self._build_project('libxml2')
        self._build_project('lttng-tools')
        self._build_project('lttng-modules')
        self._build_project('glib')
        self._build_project('elfutils')
        self._build_project('babeltrace')
        self._build_project('babeltrace2')
        self._build_project('lttng-analyses')
        self._build_project('tracecompass')
        self._build_project('lttng-scope')

        # create activate script
        self._create_activate()
Example #8
0
def _find_profile(profile_name):
    try:
        filename = os.path.join(_PROFILES_DIRNAME,
                                '{}.yml'.format(profile_name))
        filename = resource_filename(__name__, filename)

        if not os.path.isfile(filename):
            filename = profile_name
    except:
        filename = profile_name

    if not os.path.isfile(filename):
        perror('Cannot find profile "{}"'.format(profile_name))

    return filename
Example #9
0
def _find_profile(profile_name):
    try:
        filename = os.path.join(vlttng._PROFILES_DIRNAME,
                                '{}.yml'.format(profile_name))
        filename = pkg_resources.resource_filename(__name__, filename)

        if not os.path.isfile(filename):
            filename = profile_name
    except:
        filename = profile_name

    if not os.path.isfile(filename):
        perror('Cannot find profile "{}"'.format(profile_name))

    return filename
Example #10
0
def _parse_args():
    ap = argparse.ArgumentParser()
    ap.add_argument('-f', '--force', action='store_true',
                    help='force the virtual environment creation')
    ap.add_argument('--hide-export', action='store_true',
                    help='hide export lines')
    ap.add_argument('-i', '--ignore-project', metavar='PROJECT',
                    action='append',
                    help='ignore project PROJECT (may be repeated)')
    ap.add_argument('-j', '--jobs', nargs='?', const=None, metavar='JOBS',
                    action='store', type=int,
                    default=1, help='number of make jobs to run simultaneously')
    ap.add_argument('-l', '--list-default-profiles', action='store_true',
                    help='list default profile names and exit')
    ap.add_argument('-o', '--override', metavar='PROP',
                    action='append',
                    help='override property in the effective profile (may be repeated)')
    ap.add_argument('-p', '--profile', metavar='PROFILE', action='append',
                    help='profile name or path (may be repeated to patch)')
    ap.add_argument('-v', '--verbose', action='store_true',
                    help='verbose output')
    ap.add_argument('-V', '--version', action='version',
                    version='%(prog)s {}'.format(vlttng.__version__))
    ap.add_argument('path', metavar='PATH', action='store', nargs='*',
                    help='virtual environment path')

    # parse args
    args = ap.parse_args()

    if not args.list_default_profiles and len(args.path) != 1:
        perror('Exactly one virtual environment path must be provided')

    if len(args.path) > 0:
        args.path = args.path[0]

    if args.ignore_project is None:
        args.ignore_project = []

    if args.profile is None:
        args.profile = []

    if args.override is None:
        args.override = []

    return args
Example #11
0
def run():
    _register_sigint()
    args = _parse_args()

    if args.list_default_profiles:
        _list_default_profiles()
        return 0

    profile = _create_profile(args.profile, args.ignore_project, args.override,
                              args.verbose)

    try:
        vlttng.venv.VEnvCreator(args.path, profile, args.force, args.verbose,
                                args.jobs, args.hide_export)
    except Exception as e:
        perror('Unexpected error: {}'.format(e))

    return 0
Example #12
0
def run():
    _register_sigint()
    args = _parse_args()

    if args.list_default_profiles:
        _list_default_profiles()
        return 0

    profile = _create_profile(args.profile, args.ignore_project, args.override,
                              args.verbose)

    try:
        vlttng.venv.VEnvCreator(args.path, profile, args.force, args.verbose,
                                args.jobs, args.hide_export)
    except Exception as e:
        perror('Unexpected error: {}'.format(e))

    return 0
Example #13
0
File: venv.py Project: eepp/vlttng
    def _create(self):
        self._validate_profile()

        _pinfo('Create LTTng virtual environment')

        # create virtual environment directory
        if os.path.exists(self._paths.venv):
            if self._force:
                _pwarn('Virtual environment path "{}" exists: removing directory'.format(self._paths.venv))
                self._runner.rm_rf(self._paths.venv)
            else:
                perror('Virtual environment path "{}" exists (use --force to overwrite)'.format(self._paths.venv))

        self._runner.mkdir_p(self._paths.venv)
        self._runner.mkdir_p(self._paths.home)
        self._runner.mkdir_p(self._paths.bin)
        self._runner.mkdir_p(self._paths.lib)
        self._runner.mkdir_p(self._paths.include)
        self._runner.mkdir_p(self._paths.opt)
        self._runner.mkdir_p(self._paths.share_java)

        # fetch sources and extract/checkout
        _pinfo('Fetch sources')
        self._fetch_sources()

        # create build instructions for projects to build
        self._create_project_instructions()

        # build projects in this order
        self._build_project('urcu')
        self._build_project('popt')
        self._build_lttng_ust()
        self._build_project('libxml2')
        self._build_project('lttng-tools')
        self._build_project('lttng-modules')
        self._build_project('glib')
        self._build_project('elfutils')
        self._build_project('babeltrace')
        self._build_project('lttng-analyses')
        self._build_project('tracecompass')
        self._build_project('lttng-scope')

        # create activate script
        self._create_activate()
Example #14
0
def _create_overrides(override_args):
    overrides = []

    try:
        for arg in override_args:
            arg = arg.strip()

            # replace
            m = re.match(r'^([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)=(.+)$', arg)

            if m:
                path = m.group(1).split('.')
                rep = m.group(2)
                op = vlttng.profile.Override.OP_REPLACE
                overrides.append(vlttng.profile.Override(path, op, rep))
                continue

            # append
            m = re.match(r'^([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)\+=(.+)$',
                         arg)

            if m:
                path = m.group(1).split('.')
                rep = m.group(2)
                op = vlttng.profile.Override.OP_APPEND
                overrides.append(vlttng.profile.Override(path, op, rep))
                continue

            # remove
            m = re.match(r'^!([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)$', arg)

            if m:
                path = m.group(1).split('.')
                op = vlttng.profile.Override.OP_REMOVE
                overrides.append(vlttng.profile.Override(path, op, None))
                continue

            perror('Malformed override option: "{}"'.format(arg))
    except vlttng.profile.InvalidOverride as e:
        perror('In override option: "{}": {}'.format(arg, e))

    return overrides
Example #15
0
def _create_overrides(override_args):
    overrides = []

    try:
        for arg in override_args:
            arg = arg.strip()

            # replace
            m = re.match(r'^([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)=(.+)$', arg)

            if m:
                path = m.group(1).split('.')
                rep = m.group(2)
                op = vlttng.profile.Override.OP_REPLACE
                overrides.append(vlttng.profile.Override(path, op, rep))
                continue

            # append
            m = re.match(r'^([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)\+=(.+)$', arg)

            if m:
                path = m.group(1).split('.')
                rep = m.group(2)
                op = vlttng.profile.Override.OP_APPEND
                overrides.append(vlttng.profile.Override(path, op, rep))
                continue

            # remove
            m = re.match(r'^!([a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]+)*)$', arg)

            if m:
                path = m.group(1).split('.')
                op = vlttng.profile.Override.OP_REMOVE
                overrides.append(vlttng.profile.Override(path, op, None))
                continue

            perror('Malformed override option: "{}"'.format(arg))
    except vlttng.profile.InvalidOverride as e:
        perror('In override option: "{}": {}'.format(arg, e))

    return overrides
Example #16
0
def _create_profile(profile_names, ignored_projects, override_args, verbose):
    filenames = []

    try:
        overrides = _create_overrides(override_args)
    except Exception as e:
        perror('Cannot parse overrides: {}'.format(e))

    for profile_name in profile_names:
        filenames.append(_find_profile(profile_name))

    try:
        profile = vlttng.profile.from_yaml_files(filenames, ignored_projects,
                                                 overrides, verbose)
    except vlttng.profile.ParseError:
        perror('Malformed YAML profile')
    except vlttng.profile.UnknownSourceFormat as e:
        perror('Unknown source format: "{}"'.format(e.source))
    except vlttng.profile.InvalidProfile as e:
        perror('Invalid profile: {}'.format(e))
    except:
        perror('Cannot read one of the specified profiles')

    return profile
Example #17
0
def _create_profile(profile_names, ignored_projects, override_args, verbose):
    filenames = []

    try:
        overrides = _create_overrides(override_args)
    except Exception as e:
        perror('Cannot parse overrides: {}'.format(e))

    for profile_name in profile_names:
        filenames.append(_find_profile(profile_name))

    try:
        profile = vlttng.profile.from_yaml_files(filenames, ignored_projects,
                                                 overrides, verbose)
    except vlttng.profile.ParseError:
        perror('Malformed YAML profile')
    except vlttng.profile.UnknownSourceFormat as e:
        perror('Unknown source format: "{}"'.format(e.source))
    except vlttng.profile.InvalidProfile as e:
        perror('Invalid profile: {}'.format(e))
    except:
        perror('Cannot read one of the specified profiles')

    return profile
Example #18
0
 def handler(signal, frame):
     perror('Cancelled by user')
Example #19
0
 def handler(signal, frame):
     perror('Cancelled by user')
Example #20
0
 def handler(signal, frame):
     perror('Cancelled by user: virtual environment is incomplete')
Example #21
0
def _parse_args():
    ap = argparse.ArgumentParser()
    ap.add_argument('-f',
                    '--force',
                    action='store_true',
                    help='force the virtual environment creation')
    ap.add_argument('--hide-export',
                    action='store_true',
                    help='hide export lines')
    ap.add_argument('-i',
                    '--ignore-project',
                    metavar='PROJECT',
                    action='append',
                    help='ignore project PROJECT (may be repeated)')
    ap.add_argument('-j',
                    '--jobs',
                    nargs='?',
                    const=None,
                    metavar='JOBS',
                    action='store',
                    type=int,
                    default=1,
                    help='number of make jobs to run simultaneously')
    ap.add_argument('-l',
                    '--list-default-profiles',
                    action='store_true',
                    help='list default profile names and exit')
    ap.add_argument(
        '-o',
        '--override',
        metavar='PROP',
        action='append',
        help='override property in the effective profile (may be repeated)')
    ap.add_argument('-p',
                    '--profile',
                    metavar='PROFILE',
                    action='append',
                    help='profile name or path (may be repeated to patch)')
    ap.add_argument('-v',
                    '--verbose',
                    action='store_true',
                    help='verbose output')
    ap.add_argument('-V',
                    '--version',
                    action='version',
                    version='%(prog)s {}'.format(vlttng.__version__))
    ap.add_argument('path',
                    metavar='PATH',
                    action='store',
                    nargs='*',
                    help='virtual environment path')

    # parse args
    args = ap.parse_args()

    if not args.list_default_profiles and len(args.path) != 1:
        perror('Exactly one virtual environment path must be provided')

    if len(args.path) > 0:
        args.path = args.path[0]

    if args.ignore_project is None:
        args.ignore_project = []

    if args.profile is None:
        args.profile = []

    if args.override is None:
        args.override = []

    return args
Example #22
0
 def handler(signal, frame):
     perror('Cancelled by user: virtual environment is incomplete')