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)
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)
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()
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
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
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)
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)