Esempio n. 1
0
    def __init__(self, base_path=None, url=None, local_repo_path=None,
                 verbose=False, user=None):
        # remote repo (base_path, url) XOR local repo (local_repo_path)
        assert bool(base_path and url) != bool(local_repo_path)

        self.user = user
        if not self.user:
            # we need a user, so pick the current user by default
            env = os.environ.copy()
            # USERNAME is an env var used by gerrit
            self.user = env.get('USERNAME') or env.get('USER')
            if verbose:
                log.info('Using user %s with repo %s' % (self.user,
                                                         url))
        self.url = tidy_ssh_user(url, self.user)
        self.verbose = verbose
        if local_repo_path:
            self.repo_path = os.path.abspath(local_repo_path)
            self.base_path, self.repo_name = \
                os.path.split(self.repo_path)
        else:
            self.base_path = os.path.abspath(base_path)
            self.repo_name = repo_name_from_url(self.url)
            if not self.repo_name:
                raise exception.RepoError(
                    what='Failed to parse %s repo URL: %s' % (self.repo_desc,
                                                              self.url))
            self.repo_path = os.path.join(self.base_path, self.repo_name)
Esempio n. 2
0
    def __init__(self, base_path=None, url=None, local_repo_path=None,
                 verbose=False, user=None):
        # remote repo (base_path, url) XOR local repo (local_repo_path)
        assert bool(base_path and url) != bool(local_repo_path)

        self.user = user
        if not self.user:
            # we need a user, so pick the current user by default
            env = os.environ.copy()
            # USERNAME is an env var used by gerrit
            self.user = env.get('USERNAME') or env.get('USER')
            if verbose:
                log.info('Using user %s with repo %s' % (self.user,
                                                         url))
        self.url = tidy_ssh_user(url, self.user)
        self.verbose = verbose
        if local_repo_path:
            self.repo_path = local_repo_path
            self.base_path, self.repo_name = \
                os.path.split(os.path.abspath(local_repo_path))
        else:
            self.base_path = base_path
            self.repo_name = repo_name_from_url(self.url)
            if not self.repo_name:
                raise exception.RepoError(
                    what='Failed to parse %s repo URL: %s' % (self.repo_desc,
                                                              self.url))
            self.repo_path = os.path.join(self.base_path, self.repo_name)
Esempio n. 3
0
def test_url_tidying():
    # Do nothing when nothing is provided
    assert utils.tidy_ssh_user() is None
    # Do nothing when url is not provided
    assert utils.tidy_ssh_user(url=None, user='******') is None
    # Do nothing when url doesn't start with ssh
    uri = 'http://mygitrepo/myproject.git'
    assert utils.tidy_ssh_user(uri) == uri
    assert utils.tidy_ssh_user(uri, user='******') == uri
    # Do nothing if url starts with ssh, has no user, and no user provided
    uri = 'ssh://%smygitrepo/myproject.git'
    assert utils.tidy_ssh_user(uri % '') == uri % ''
    # Add missing user if provided
    assert utils.tidy_ssh_user(uri % '', user='******') == uri % 'kenny@'
    # keep default user if no user provided
    assert utils.tidy_ssh_user(uri % 'cartman@') == uri % 'cartman@'
    # change default user if user provided
    assert utils.tidy_ssh_user(uri % 'timmy@', user='******') == uri % 'dude@'
Esempio n. 4
0
def test_url_tidying():
    # Do nothing when nothing is provided
    assert utils.tidy_ssh_user() is None
    # Do nothing when url is not provided
    assert utils.tidy_ssh_user(url=None, user='******') is None
    # Do nothing when url doesn't start with ssh
    uri = 'http://mygitrepo/myproject.git'
    assert utils.tidy_ssh_user(uri) == uri
    assert utils.tidy_ssh_user(uri, user='******') == uri
    # Do nothing if url starts with ssh, has no user, and no user provided
    uri = 'ssh://%smygitrepo/myproject.git'
    assert utils.tidy_ssh_user(uri % '') == uri % ''
    # Add missing user if provided
    assert utils.tidy_ssh_user(uri % '', user='******') == uri % 'kenny@'
    # keep default user if no user provided
    assert utils.tidy_ssh_user(uri % 'cartman@') == uri % 'cartman@'
    # change default user if user provided
    assert utils.tidy_ssh_user(uri % 'timmy@', user='******') == uri % 'dude@'
Esempio n. 5
0
def test_url_tidying():
    # Do nothing when nothing is provided
    assert (None, utils.tidy_ssh_user())
    # Do nothing when url is not provided
    assert (None, utils.tidy_ssh_user(url=None, user="******"))
    # Do nothing when url doesn't start with ssh
    uri = "http://mygitrepo/myproject.git"
    assert (uri, utils.tidy_ssh_user(uri))
    assert (uri, utils.tidy_ssh_user(uri, user="******"))
    # Do nothing if url starts with ssh, has no user, and no user provided
    uri = "ssh://%smygitrepo/myproject.git"
    assert (uri % "", utils.tidy_ssh_user(uri % ""))
    # Add missing user if provided
    assert (uri % "kenny@", utils.tidy_ssh_user(uri % "", user="******"))
    # keep default user if no user provided
    assert (uri % "cartman@", utils.tidy_ssh_user(uri % "cartman@"))
    # change default user if user provided
    assert (uri % "butters@", utils.tidy_ssh_user(uri % "timmy@", user="******"))
Esempio n. 6
0
def clone(
        package,
        force_fetch=False,
        use_master_distgit=False,
        gerrit_remotes=False,
        review_user=None):
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=force_fetch)
    pkg = inforepo.get_package(package)
    if not pkg:
        raise exception.InvalidRDOPackage(package=package)
    if use_master_distgit:
        try:
            distgit = pkg['master-distgit']
            distgit_str = 'master-distgit'
        except KeyError:
            raise exception.InvalidUsage(
                msg="-m/--use-master-distgit used but 'master-distgit' "
                    "missing in rdoinfo for package: %s" % package)
    else:
        distgit = pkg['distgit']
        distgit_str = 'distgit'
    log.info("Cloning {dg} into ./{t.bold}{pkg}{t.normal}/".format(
        t=log.term, dg=distgit_str, pkg=package))
    patches = pkg.get('patches')
    upstream = pkg.get('upstream')
    review_patches = pkg.get('review-patches')
    review_origin = pkg.get('review-origin')

    git('clone', distgit, package)
    with helpers.cdir(package):
        if gerrit_remotes:
            log.info('Adding gerrit-origin remote...')
            git('remote', 'add', 'gerrit-origin', distgit)
        if patches:
            log.info('Adding patches remote...')
            git('remote', 'add', 'patches', patches)
            if gerrit_remotes:
                log.info('Adding gerrit-patches remote...')
                git('remote', 'add', 'gerrit-patches', patches)
        else:
            log.warn("'patches' remote information not available in rdoinfo.")
        if upstream:
            log.info('Adding upstream remote...')
            git('remote', 'add', 'upstream', upstream)
        else:
            log.warn("'upstream' remote information not available in rdoinfo.")
        if patches or upstream:
            git('fetch', '--all')

        if not review_user:
            # USERNAME is an env var used by gerrit
            review_user = os.environ.get('USERNAME') or os.environ.get('USER')
        msg_user = ('Using {t.bold}{u}{t.normal} as gerrit username, '
                    'you can change it with '
                    '{t.cmd}git remote set-url {r} ...{t.normal}')
        if review_patches:
            log.info('Adding gerrit remote for patch chains reviews...')
            r = tidy_ssh_user(review_patches, review_user)
            log.info(msg_user.format(u=review_user, r='review-patches',
                                     t=log.term))
            git('remote', 'add', 'review-patches', r)
        else:
            log.warn("'review-patches' remote information not available"
                     " in rdoinfo.")
        if review_origin:
            log.info('Adding gerrit remote for reviews...')
            r = tidy_ssh_user(review_origin, review_user)
            log.info(msg_user.format(u=review_user, r='review-origin',
                                     t=log.term))
            git('remote', 'add', 'review-origin', r)
        else:
            log.warn("'review-origin' remote information not available"
                     " in rdoinfo.")
        git('remote', '-v', direct=True)
Esempio n. 7
0
def clone(
        package,
        force_fetch=False,
        use_master_distgit=False,
        gerrit_remotes=False,
        review_user=None,
        distro='rdo'):
    rdo = rdoinfo.get_distroinfo(distro=distro)
    ri = rdo.get_info()
    pkg = get_package(ri, package)
    if not pkg:
        raise exception.InvalidPackage(package=package)
    if use_master_distgit:
        try:
            distgit = pkg['master-distgit']
            distgit_str = 'master-distgit'
        except KeyError:
            raise exception.InvalidUsage(
                msg="-m/--use-master-distgit used but 'master-distgit' "
                    "missing in rdoinfo for package: %s" % package)
    else:
        distgit = pkg['distgit']
        distgit_str = 'distgit'
    log.info("Cloning {dg} into ./{t.bold}{pkg}{t.normal}/".format(
        t=log.term, dg=distgit_str, pkg=package))
    patches = pkg.get('patches')
    upstream = pkg.get('upstream')
    review_patches = pkg.get('review-patches')
    review_origin = pkg.get('review-origin')

    git('clone', distgit, package)
    with helpers.cdir(package):
        if gerrit_remotes:
            log.info('Adding gerrit-origin remote...')
            git('remote', 'add', 'gerrit-origin', distgit)
        if patches:
            log.info('Adding patches remote...')
            git('remote', 'add', 'patches', patches)
            if gerrit_remotes:
                log.info('Adding gerrit-patches remote...')
                git('remote', 'add', 'gerrit-patches', patches)
        else:
            log.warn("'patches' remote information not available in rdoinfo.")
        if upstream:
            log.info('Adding upstream remote...')
            git('remote', 'add', 'upstream', upstream)
        else:
            log.warn("'upstream' remote information not available in rdoinfo.")
        if patches or upstream:
            git('fetch', '--all')

        if not review_user:
            # USERNAME is an env var used by gerrit
            review_user = os.environ.get('USERNAME') or os.environ.get('USER')
        msg_user = ('Using {t.bold}{u}{t.normal} as gerrit username, '
                    'you can change it with '
                    '{t.cmd}git remote set-url {r} ...{t.normal}')
        if review_patches:
            log.info('Adding gerrit remote for patch chains reviews...')
            r = tidy_ssh_user(review_patches, review_user)
            log.info(msg_user.format(u=review_user, r='review-patches',
                                     t=log.term))
            git('remote', 'add', 'review-patches', r)
        else:
            log.warn("'review-patches' remote information not available"
                     " in rdoinfo.")
        if review_origin:
            log.info('Adding gerrit remote for reviews...')
            r = tidy_ssh_user(review_origin, review_user)
            log.info(msg_user.format(u=review_user, r='review-origin',
                                     t=log.term))
            git('remote', 'add', 'review-origin', r)
        else:
            log.warn("'review-origin' remote information not available"
                     " in rdoinfo.")
        git('remote', '-v', direct=True)