예제 #1
0
    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')
예제 #2
0
파일: optionstest.py 프로젝트: pombr/conary
 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')
예제 #3
0
 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')
예제 #4
0
파일: server.py 프로젝트: pombr/conary
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)
예제 #5
0
파일: optionstest.py 프로젝트: pombr/conary
 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'])
예제 #6
0
 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')
예제 #7
0
파일: optionstest.py 프로젝트: pombr/conary
    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)
예제 #8
0
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')
예제 #9
0
 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'])
예제 #10
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)
예제 #11
0
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
예제 #12
0
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
예제 #13
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)
예제 #14
0
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)
예제 #15
0
파일: server.py 프로젝트: tensor5/conary
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)
예제 #16
0
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
예제 #17
0
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
예제 #18
0
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
예제 #19
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'])
예제 #20
0
파일: optionstest.py 프로젝트: pombr/conary
 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')
예제 #21
0
파일: optionstest.py 프로젝트: pombr/conary
        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)
예제 #22
0
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