Exemple #1
0
def testQuerySources():
    apt_repos.setAptReposBaseDir(".")
    fields = PackageField.getByFieldsString('CvsaSFB')
    repoSuite = list(apt_repos.getSuites(["ubuntu:trusty"]))[0]
    repoSuite.scan(True)
    res = repoSuite.querySources(['git'], False, None, None, fields)
    for qr in sorted(res):
        print(qr)
Exemple #2
0
def testSuiteSelectors():
    apt_repos.setAptReposBaseDir(".")
    selectors = [
        None, [":"], ["default:"], ["ubuntu:xenial"], ["xenial"],
        ["ub:trusty"], ["ubuntu:"], ["u:"], ["u:trusty"],
        ["ubuntu:trusty-security", "ubuntu:xenial-security"], ["debian:"],
        ["ubuntu:"], ["ubuntu:de-bionic"], ["ubuntu:nonexistent"], ["stable:"],
        ["test"], ["stable:stretch"], ["stable:nonexistent"], ["testscan:"]
    ]
    for selector in selectors:
        dumpSelectedSuites(apt_repos.getSuites(selector), selector)
Exemple #3
0
def testSuiteProperties():
    apt_repos.setAptReposBaseDir(".")
    for s in sorted(apt_repos.getSuites([":"])):
        print(s.getSuiteName())
        print(s.getAptSuite())
        print(s.getRepoUrl())
        print(s.getDistsUrl())
        print(s.getComponents())
        print(s.hasSources())
        print(s.getArchitectures())
        print(s.getSourcesList())
        print()
Exemple #4
0
def testGetSourcesFiles():
    apt_repos.setAptReposBaseDir(".")
    repoSuite = list(apt_repos.getSuites(["ubuntu:trusty"]))[0]
    repoSuite.scan(True)
    for file in repoSuite.getSourcesFiles():
        # we can't just print the absolute filename which is not diffable, so
        # we print the trailing 4 parts of the path.
        keep = ""
        for unused_i in range(0, 7):
            keep = os.path.basename(file) + ("/"
                                             if len(keep) > 0 else "") + keep
            file = os.path.dirname(file)
        print(("<testfolder>/" if len(file) > 0 else "") + keep)
def getBundleRepoSuites(ids=["bundle:"], cwd=PROJECT_DIR):
    '''
       This method uses apt-repos to get a list of all currently available (rolled out)
       bundles as a dict of ID to apt_repos.RepoSuite Objects

       WARNING: This method modifies the global apt-repos base directory and therefore must
                not be used in a multithreaded environment!
    '''
    res = dict()
    apt_repos.setAptReposBaseDir(os.path.join(cwd, ".apt-repos"))
    for suite in sorted(apt_repos.getSuites(ids)):
        res[suite.getSuiteName()] = suite
    return res
def setupContext(args, require_editable=True, require_own_suite=False):
    bundle = Bundle(args.bundleName[0], basedir=PROJECT_DIR)
    if require_editable and not bundle.isEditable():
        raise BundleError("Not allowed to modify bundle '{}' as it is readonly!".format(bundle.bundleName))
    if not os.path.isdir(bundle.getTemplateDir()):
        raise BundleError("No template folder found for distribution '{}'!".format(bundle.distribution))
    logger.info("You are now using bundle '{}'".format(bundle.bundleName))
    apt_repos.setAptReposBaseDir(bundle.getAptReposBasedir())
    try:
        bundle.setOwnSuite(args.own_suite)
    except BundleError as e:
        if require_own_suite:
            raise e
        logger.warning(e)
    return bundle
def getTargetRepoSuites(stage=None, cwd=PROJECT_DIR):
    '''
       This method uses apt-repos to get a list of all currently available target
       repositories/suites. If `stage` is specified, only target suites for this
       stage are returned. The result is a dict of ID to apt_repos.RepoSuite Objects.

       WARNING: This method modifies the global apt-repos base directory and therefore must
                not be used in a multithreaded environment!
    '''
    res = dict()
    apt_repos.setAptReposBaseDir(os.path.join(cwd, ".apt-repos"))
    for suite in sorted(apt_repos.getSuites(["bundle-compose-target:"])):
        if not stage or "bundle-stage.{}".format(stage) in suite.getTags():
            res[suite.getSuiteName()] = suite
    return res
Exemple #8
0
def apt_repos_query_packages(suiteSelectors, searchStrings, cwd=PROJECT_DIR):
    apt_repos.setAptReposBaseDir(os.path.join(cwd, ".apt-repos"))
    requestFields = PackageField.getByFieldsString("pvsaSC")
    packages = []
    for suite in sorted(apt_repos.getSuites(suiteSelectors)):
        suite.scan(True)
        packages.extend(
            suite.queryPackages(searchStrings, True, None, None,
                                requestFields))
    res = []
    for package in sorted(packages):
        (packageName, version, packageSuite, architecture, section,
         source) = package.getData()
        res.append(
            common_interfaces.Package(packageName, version, packageSuite,
                                      architecture, section, source))
    return res
Exemple #9
0
def main():

    # fixup to get help-messages for subcommands that require positional argmuments
    # so that "apt-repos -h <subcommand>" prints a help-message and not an error
    for subcmd in ['ls', 'list', 'src', 'source', 'sources', 'dsc', 'show']:
        if ("-h" in sys.argv or "--help" in sys.argv) and subcmd in sys.argv:
            sys.argv.append(".")

    parser = createArgparsers()[0]
    args = parser.parse_args()

    setupLogging(logging.DEBUG if args.debug else logging.INFO)

    if "diff" in args.__dict__ and args.diff:
        diffField = args.diff.split("^")[0]
        if len(diffField) != 1:
            raise AnError(
                "-di needs exactly one diffField character as argument. provided is: '{}'"
                .format(diffField))
        elif not diffField in args.columns:
            raise AnError(
                "The character -di needs to be also in -col. provided is: -col '{}' and -di '{}'"
                .format(args.columns, diffField))

    if args.basedir:
        apt_repos.setAptReposBaseDir(args.basedir)

    if "sub_function" in args.__dict__:
        if args.help:
            args.sub_parser.print_help()
            sys.exit(0)
        else:
            args.sub_function(args)
            sys.exit(0)
    else:
        if args.help:
            parser.print_help()
            sys.exit(0)
        else:
            parser.print_usage()
            sys.exit(1)
Exemple #10
0
def apt_repos_get_suites(suiteSelectors, cwd=PROJECT_DIR):
    res = []
    apt_repos.setAptReposBaseDir(os.path.join(cwd, ".apt-repos"))
    for suite in sorted(apt_repos.getSuites(suiteSelectors)):
        res.append(common_interfaces.Suite(suite))
    return res
def main():
    """
        Main entry point for this script
    """
    # fixup to get help-messages for subcommands that require positional argmuments
    # so that "apt-repos -h <subcommand>" prints a help-message and not an error
    for subcmd in ['mark-for-stage', 'stage', 'mark']:
        if ("-h" in sys.argv or "--help" in sys.argv) and subcmd in sys.argv:
            sys.argv.append("drop")

    parser = argparse.ArgumentParser(description=__doc__,
                                     prog=progname,
                                     add_help=False)
    parser.add_argument("-h",
                        "--help",
                        action="store_true",
                        help="""
                        Show a (subcommand specific) help message""")
    parser.add_argument("-d",
                        "--debug",
                        action="store_true",
                        default=False,
                        help="Show debug messages.")
    subparsers = parser.add_subparsers(help='choose one of these subcommands')
    parser.set_defaults(debug=False)

    # subcommand parsers
    parse_ub = subparsers.add_parser("update-bundles",
                                     help=cmd_update_bundles.__doc__,
                                     description=cmd_update_bundles.__doc__,
                                     aliases=['ub'])
    parse_stage = subparsers.add_parser("mark-for-stage",
                                        help=cmd_stage.__doc__,
                                        description=cmd_stage.__doc__,
                                        aliases=['stage', 'mark'])
    parse_list = subparsers.add_parser("list",
                                       help=cmd_list.__doc__,
                                       description=cmd_list.__doc__,
                                       aliases=['ls', 'lsb'])
    parse_apply = subparsers.add_parser("apply",
                                        help=cmd_apply.__doc__,
                                        description=cmd_apply.__doc__)
    parse_jsondump = subparsers.add_parser("jsondump",
                                           help=cmd_jsondump.__doc__,
                                           description=cmd_jsondump.__doc__)
    parse_jsondeps = subparsers.add_parser("jsondeps",
                                           help=cmd_jsondeps.__doc__,
                                           description=cmd_jsondeps.__doc__)

    parse_ub.set_defaults(sub_function=cmd_update_bundles, sub_parser=parse_ub)
    parse_stage.set_defaults(sub_function=cmd_stage, sub_parser=parse_stage)
    parse_list.set_defaults(sub_function=cmd_list, sub_parser=parse_list)
    parse_apply.set_defaults(sub_function=cmd_apply, sub_parser=parse_apply)
    parse_jsondump.set_defaults(sub_function=cmd_jsondump,
                                sub_parser=parse_jsondump)
    parse_jsondeps.set_defaults(sub_function=cmd_jsondeps,
                                sub_parser=parse_jsondeps)

    for p in [parse_ub]:
        p.add_argument("--no-trac",
                       action="store_true",
                       help="""
                        Don't sync against trac.""")

    for p in [parse_jsondump, parse_jsondeps]:
        p.add_argument('outputFilename',
                       nargs=1,
                       help="""
                        Name of the ouptFile for the json-dump.""")

    for p in [parse_list]:
        p.add_argument("-s",
                       "--stage",
                       default=None,
                       choices=sorted(BundleStatus.getAvailableStages()),
                       help="""
                        Select only bundles in the provided stage.""")
        p.add_argument("-c",
                       "--candidates",
                       action="store_true",
                       help="""
                        Print the list of candidates for each (selected) status."""
                       )

    for p in [parse_stage]:
        p.add_argument("-c",
                       "--candidates",
                       action="store_true",
                       help="""
                        Automatically add all candiates for this stage. Available candidates can be viewed with '{} list -c'."""
                       .format(progname))
        p.add_argument("-f",
                       "--force",
                       action="store_true",
                       help="""
                        Don't check if a bundle is ready for being put into the new stage."""
                       )
        p.add_argument('stage',
                       nargs=1,
                       choices=sorted(BundleStatus.getAvailableStages()),
                       help="""
                        The stage bundles should be marked for.""")
        p.add_argument('bundleName',
                       nargs='*',
                       help="""
                        Identifier of a bundle (as listed in the first column of '{} list')."""
                       .format(progname))

    parser.set_defaults()
    args = parser.parse_args()
    setupLogging(logging.DEBUG if args.debug else logging.INFO)
    apt_repos.setAptReposBaseDir(os.path.join(PROJECT_DIR, ".apt-repos"))

    if "sub_function" in args.__dict__:
        if args.help:
            args.sub_parser.print_help()
            sys.exit(0)
        else:
            args.sub_function(args)
            sys.exit(0)
    else:
        if args.help:
            parser.print_help()
            sys.exit(0)
        else:
            parser.print_usage()
            sys.exit(1)