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)
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)
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@'
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="******"))
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)
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)