in esrally/utils/repo.py [0:0]
def update(self, distribution_version):
try:
if self.remote:
branch = versions.best_match(git.branches(self.repo_dir, remote=self.remote), distribution_version)
if branch:
# Allow uncommitted changes iff we do not have to change the branch
self.logger.info(
"Checking out [%s] in [%s] for distribution version [%s].", branch, self.repo_dir, distribution_version
)
git.checkout(self.repo_dir, branch=branch)
self.logger.info("Rebasing on [%s] in [%s] for distribution version [%s].", branch, self.repo_dir, distribution_version)
try:
git.rebase(self.repo_dir, remote="origin", branch=branch)
self.revision = git.head_revision(self.repo_dir)
except exceptions.SupplyError:
self.logger.exception("Cannot rebase due to local changes in [%s]", self.repo_dir)
console.warn(
"Local changes in [%s] prevent %s update from remote. Please commit your changes."
% (self.repo_dir, self.resource_name)
)
return
else:
msg = "Could not find %s remotely for distribution version [%s]. Trying to find %s locally." % (
self.resource_name,
distribution_version,
self.resource_name,
)
self.logger.warning(msg)
branch = versions.best_match(git.branches(self.repo_dir, remote=False), distribution_version)
if branch:
if git.current_branch(self.repo_dir) != branch:
self.logger.info(
"Checking out [%s] in [%s] for distribution version [%s].", branch, self.repo_dir, distribution_version
)
git.checkout(self.repo_dir, branch=branch)
self.revision = git.head_revision(self.repo_dir)
else:
self.logger.info(
"No local branch found for distribution version [%s] in [%s]. Checking tags.", distribution_version, self.repo_dir
)
tag = self._find_matching_tag(distribution_version)
if tag:
self.logger.info(
"Checking out tag [%s] in [%s] for distribution version [%s].", tag, self.repo_dir, distribution_version
)
git.checkout(self.repo_dir, branch=tag)
self.revision = git.head_revision(self.repo_dir)
else:
raise exceptions.SystemSetupError(
"Cannot find %s for distribution version %s" % (self.resource_name, distribution_version)
)
except exceptions.SupplyError as e:
tb = sys.exc_info()[2]
raise exceptions.DataError("Cannot update %s in [%s] (%s)." % (self.resource_name, self.repo_dir, e.message)).with_traceback(tb)