def testOptionalParam(self): argv = ['conary', '--opt', '--', '--one=onev', 'other2'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (otherArgs == ['conary', '--one=onev', 'other2']) argv = ['conary', '--opt=', 'one'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (otherArgs == ['conary', 'one']) assert (argSet['opt'] is True) # test an optional param argument when it is the last argument on the # command line and no param is given argv = ['conary', '--opt'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (argSet['opt'] is True) argv = ['conary', '--opt', 'foo'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (argSet['opt'] == 'foo')
def testBadParams(self): argv = ['conary', '--unknown'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert(msg[0] == 'no such option: --unknown')
def testBadParams(self): argv = ['conary', '--unknown'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert (msg[0] == 'no such option: --unknown')
def getServer(argv = sys.argv, reqClass = HttpRequests): argDef = {} cfgMap = { 'contents-dir' : 'contentsDir', 'db' : 'repositoryDB', 'log-file' : 'logFile', 'map' : 'repositoryMap', 'port' : 'port', 'tmp-dir' : 'tmpDir', 'require-sigs' : 'requireSigs', 'server-name' : 'serverName' } cfg = ServerConfig() argDef["config"] = options.MULT_PARAM # magically handled by processArgs argDef["config-file"] = options.ONE_PARAM argDef['add-user'] = options.ONE_PARAM argDef['admin'] = options.NO_PARAM argDef['analyze'] = options.NO_PARAM argDef['help'] = options.NO_PARAM argDef['lsprof'] = options.NO_PARAM argDef['migrate'] = options.NO_PARAM argDef['mirror'] = options.NO_PARAM try: argSet, otherArgs = options.processArgs(argDef, cfgMap, cfg, usage, argv = argv) except options.OptionError, msg: print >> sys.stderr, msg sys.exit(1)
def testOptions(self): argv = ['conary', '--no', 'other1', '--one=onev', 'other2', '--opt=opt', '--mult', 'multv1', 'other3', '--mult', '--multv2', 'other4'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(otherArgs==['conary', 'other1', 'other2', 'other3', 'other4']) assert(argSet['no'] is True) assert(argSet['one'] == 'onev') assert(argSet['opt'] == 'opt') assert(argSet['mult'] == ['multv1', '--multv2'])
def testCfgMap(self): argv = ['conary', '--cfgmap=rootval'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (otherArgs == ['conary']) assert (self.cfg.root == os.getcwd() + '/rootval')
def testStrictOptionalParam(self): argv = ['conary', '--strict', '--', '--one=onev', 'other2' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(otherArgs==['conary', '--one=onev', 'other2']) argv = ['conary', '--strict=', 'one' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(otherArgs==['conary', 'one']) assert(argSet['strict'] is True) # test an optional param argument when it is the last argument on the # command line and no param is given argv = ['conary', '--strict' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(argSet['strict'] is True) argv = ['conary', '--strict', 'foo' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(argSet['strict'] is True)
class ConaryCfgTest(rephelp.RepositoryHelper): cfg = conarycfg.ConaryConfiguration(readConfigFiles=False) argDef = {} cfgMap = {} cfgMap["cfgmap"] = "root" (NO_PARAM, ONE_PARAM) = (options.NO_PARAM, options.ONE_PARAM) (OPT_PARAM, MULT_PARAM) = (options.OPT_PARAM, options.MULT_PARAM) STRICT_OPT_PARAM = options.STRICT_OPT_PARAM argDef['no'] = NO_PARAM argDef['one'] = ONE_PARAM argDef['opt'] = OPT_PARAM argDef['mult'] = MULT_PARAM argDef['strict'] = STRICT_OPT_PARAM def usage(rc=1): return rc def testOptions(self): argv = [ 'conary', '--no', 'other1', '--one=onev', 'other2', '--opt=opt', '--mult', 'multv1', 'other3', '--mult', '--multv2', 'other4' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (otherArgs == [ 'conary', 'other1', 'other2', 'other3', 'other4' ]) assert (argSet['no'] is True) assert (argSet['one'] == 'onev') assert (argSet['opt'] == 'opt') assert (argSet['mult'] == ['multv1', '--multv2']) def testBadParams(self): argv = ['conary', '--unknown'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert (msg[0] == 'no such option: --unknown') argv = ['conary', '--one'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert (msg[0] == '--one option requires an argument')
def testOptions(self): argv = [ 'conary', '--no', 'other1', '--one=onev', 'other2', '--opt=opt', '--mult', 'multv1', 'other3', '--mult', '--multv2', 'other4' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (otherArgs == [ 'conary', 'other1', 'other2', 'other3', 'other4' ]) assert (argSet['no'] is True) assert (argSet['one'] == 'onev') assert (argSet['opt'] == 'opt') assert (argSet['mult'] == ['multv1', '--multv2'])
def getServer(opts = {}, argv = sys.argv, cfgMap = {}): cfg = ServerConfig() cfgMap.update({ 'contents-dir' : 'contentsDir', 'db' : 'repositoryDB', 'tmp-dir' : 'tmpDir', 'server-name' : 'serverName' }) opts["config"] = options.MULT_PARAM opts["config-file"] = options.ONE_PARAM try: argSet, otherArgs = options.processArgs(opts, cfgMap, cfg, usage, argv = argv) except options.OptionError, msg: print >> sys.stderr, msg sys.exit(1)
def process(repos, cfg, commitList, srcMap, pkgMap, grpMap, argv, otherArgs): if not len(argv) and not len(otherArgs): return usage() argDef = { 'user': options.ONE_PARAM, 'file': options.ONE_PARAM, } # create an argv[0] for processArgs to ignore argv[0:0] = [''] argSet, someArgs = options.processArgs(argDef, {}, cfg, usage, argv=argv) # and now remove argv[0] again argv.pop(0) if len(someArgs): someArgs.pop(0) otherArgs.extend(someArgs) user = None dbfile = None if 'user' in argSet: user = argSet['user'] if 'file' in argSet: dbfile = argSet['file'] pid = os.fork() if not pid: #child 1 logFd = os.open("/dev/null", os.O_RDWR | os.O_CREAT) os.dup2(logFd, 1) os.dup2(logFd, 2) os.close(0) os.close(logFd) pid2 = os.fork() if not pid2: #child 2 doCommit(repos, cfg, commitList, user, dbfile) sys.exit(0) else: #parent 2 pid2, status = os.waitpid(pid2, 0) if status: fail(status, srcMap, pkgMap, grpMap, argv) sys.exit(0) return 0
def getServer(opts={}, argv=sys.argv, cfgMap={}): cfg = ServerConfig() cfgMap.update({ 'contents-dir': 'contentsDir', 'db': 'repositoryDB', 'tmp-dir': 'tmpDir', 'server-name': 'serverName' }) opts["config"] = options.MULT_PARAM opts["config-file"] = options.ONE_PARAM try: argSet, otherArgs = options.processArgs(opts, cfgMap, cfg, usage, argv=argv) except options.OptionError, msg: print >> sys.stderr, msg sys.exit(1)
def process(repos, cfg, commitList, srcMap, pkgMap, grpMap, argv, otherArgs): coveragehook.install() if not len(argv) and not len(otherArgs): return 1 mintutils.setupLogging(consoleLevel=logging.WARNING, consoleFormat='apache') argDef = { 'config' : options.ONE_PARAM, 'user': options.ONE_PARAM, 'hostname': options.ONE_PARAM, } # create an argv[0] for processArgs to ignore argv[0:0] = [''] argSet, someArgs = options.processArgs(argDef, {}, cfg, '', argv=argv) # and now remove argv[0] again argv.pop(0) if len(someArgs): someArgs.pop(0) otherArgs.extend(someArgs) # Double-fork so the commit hook doesn't block the caller. if os.fork(): return 0 try: if not os.fork(): try: registerCommits(argSet, commitList) except: e_type, e_value, e_tb = sys.exc_info() logErrorAndEmail(None, e_type, e_value, e_tb, 'commit hook', argSet) finally: os._exit(0)
def getServer(argv=sys.argv, reqClass=HttpRequests): argDef = {} cfgMap = { 'contents-dir': 'contentsDir', 'db': 'repositoryDB', 'log-file': 'logFile', 'map': 'repositoryMap', 'port': 'port', 'tmp-dir': 'tmpDir', 'require-sigs': 'requireSigs', 'server-name': 'serverName' } cfg = ServerConfig() argDef["config"] = options.MULT_PARAM # magically handled by processArgs argDef["config-file"] = options.ONE_PARAM argDef['add-user'] = options.ONE_PARAM argDef['admin'] = options.NO_PARAM argDef['analyze'] = options.NO_PARAM argDef['help'] = options.NO_PARAM argDef['lsprof'] = options.NO_PARAM argDef['migrate'] = options.NO_PARAM argDef['mirror'] = options.NO_PARAM try: argSet, otherArgs = options.processArgs(argDef, cfgMap, cfg, usage, argv=argv) except options.OptionError, msg: print >> sys.stderr, msg sys.exit(1)
def main(argv): if not len(argv) > 1: usage() sys.excepthook = util.genExcepthook(prefix='commitaction-stack-') argDef = { 'module': options.MULT_PARAM, 'config-file': options.ONE_PARAM, 'config': options.MULT_PARAM, 'username': options.OPT_PARAM, 'password': options.OPT_PARAM, 'repmap': options.OPT_PARAM, } cfgMap = { 'build-label': 'buildLabel', } cfg = conarycfg.ConaryConfiguration() cfg.root = ":memory:" cfg.dbPath = ":memory:" argSet, otherArgs = options.processArgs(argDef, cfgMap, cfg, usageMessage, argv=argv) # remove argv[0] otherArgs = otherArgs[1:] if 'module' not in argSet: usage() for line in argSet.pop('config', []): cfg.configLine(line) if 'repmap' in argSet: # this is ONLY for accessing the committing repository host, url = argSet['repmap'].split(" ") cfg.repositoryMap.update({host: url}) if 'username' in argSet and 'password' in argSet: cfg.user.addServerGlob(host, argSet['username'], argSet['password']) repos = ConaryClient(cfg).getRepos() data = [x[:-1] for x in sys.stdin.readlines()] # { 'pkg:source': [(version, shortversion), ...] } srcMap = {} # { 'pkg' { version: { flavor: [ component, ...] } } } pkgMap = {} # { 'group-foo' { version: set(flavor, ...) } } grpMap = {} # [1,2,3,4,5,6,...] -> [(1,2,3), (4,5,6), ...] commitList = zip(data, data[1:], data[2:])[::3] for name, version, flavor in commitList: if name[-7:] == ':source': # get full trailing version trailingVersion = versions.VersionFromString( version).trailingRevision().asString() # sources are not flavored l = srcMap.setdefault(name, []) l.append((version, trailingVersion)) elif ':' in name: package, component = name.split(':') d = pkgMap.setdefault(package, {}) d = d.setdefault(version, {}) l = d.setdefault(flavor, []) l.append(component) elif name.startswith('group-'): d = grpMap.setdefault(name, {}) s = d.setdefault(version, set()) s.add(flavor) ret = 0 for module in argSet['module']: argv = shlex.split(module) path = argv[0] dirname, name = os.path.split(path) if name.endswith('.py'): name = name[:-3] if dirname: searchPath = [dirname] try: f, pathName, description = imp.find_module(name, searchPath) except: break try: mod = imp.load_module(name, f, pathName, description) finally: f.close() else: try: mod = __import__(name) names = name.split('.')[1:] for subname in names: mod = getattr(mod, subname) except: break # pass repos, cfg, and all otherArgs to all modules if 'process' in mod.__dict__: ret |= mod.process(repos, cfg, commitList, srcMap, pkgMap, grpMap, argv[1:], otherArgs) return ret
def process(repos, cfg, commitList, srcMap, pkgMap, grpMap, argv, otherArgs): if not len(argv) and not len(otherArgs): return usage() argDef = { 'user': options.ONE_PARAM, 'sourceuser': options.ONE_PARAM, 'binaryuser': options.ONE_PARAM, 'from': options.ONE_PARAM, 'email': options.MULT_PARAM, 'maxsize': options.ONE_PARAM, 'mailhost': options.ONE_PARAM, } # create an argv[0] for processArgs to ignore argv[0:0] = [''] argSet, someArgs = options.processArgs(argDef, {}, cfg, usage, argv=argv) # and now remove argv[0] again argv.pop(0) if len(someArgs): someArgs.pop(0) otherArgs.extend(someArgs) if 'email' in argSet: argSet['email'].extend(otherArgs) else: if otherArgs: argSet['email'] = otherArgs else: return usage() sourceuser = None binaryuser = None fromaddr = None maxsize = None if 'sourceuser' in argSet: sourceuser = argSet['sourceuser'] if 'binaryuser' in argSet: binaryuser = argSet['binaryuser'] if not sourceuser and 'user' in argSet: sourceuser = argSet['user'] if not binaryuser and 'user' in argSet: binaryuser = argSet['user'] if 'from' in argSet: fromaddr = argSet['from'] if 'maxsize' in argSet: maxsize = int(argSet['maxsize']) pid = os.fork() if not pid: #child 1 pid2 = os.fork() if not pid2: #child 2 exitCode = doWork(repos, cfg, srcMap, pkgMap, grpMap, sourceuser, binaryuser, fromaddr, maxsize, argSet) sys.exit(exitCode) else: #parent 2 pid2, status = os.waitpid(pid2, 0) if status: fail(status, srcMap, pkgMap, grpMap, argv) sys.exit(0) return 0
assert (msg[0] == 'no such option: --unknown') argv = ['conary', '--one'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert (msg[0] == '--one option requires an argument') argv = ['conary', '--no=optone'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert (msg[0] == '--no option does not take a value') def testOptionalParam(self): argv = ['conary', '--opt', '--', '--one=onev', 'other2'] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert (otherArgs == ['conary', '--one=onev', 'other2'])
def testCfgMap(self): argv = ['conary', '--cfgmap=rootval' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(otherArgs==['conary']) assert(self.cfg.root == os.getcwd() + '/rootval')
try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert(msg[0] == 'no such option: --unknown') argv = ['conary', '--one'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert(msg[0] == '--one option requires an argument') argv = ['conary', '--no=optone'] try: options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) raise RuntimeError except options.OptionError, msg: assert(msg[0] == '--no option does not take a value') def testOptionalParam(self): argv = ['conary', '--opt', '--', '--one=onev', 'other2' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(otherArgs==['conary', '--one=onev', 'other2']) argv = ['conary', '--opt=', 'one' ] argSet, otherArgs = options.processArgs(self.argDef, self.cfgMap, self.cfg, self.usage, argv=argv) assert(otherArgs==['conary', 'one']) assert(argSet['opt'] is True)