def _update()

in esrally/mechanic/supplier.py [0:0]


    def _update(self, revision):
        if self.has_remote() and revision == "latest":
            self.logger.info("Fetching latest sources for %s from origin.", self.name)
            git.pull(self.src_dir, remote="origin", branch=self.branch)
        elif revision == "current":
            self.logger.info("Skip fetching sources for %s.", self.name)
        # revision contains a timestamp
        elif self.has_remote() and "@" in revision:
            branch, git_ts_revision = _branch_from_revision_with_ts(revision, self.branch)
            self.logger.info(
                "Fetching from remote and checking out revision with timestamp [%s] from branch %s for %s.",
                git_ts_revision,
                branch,
                self.name,
            )
            git.pull_ts(self.src_dir, git_ts_revision, remote="origin", branch=branch, default_branch=DEFAULT_ELASTICSEARCH_BRANCH)
        elif self.has_remote():  # we can have either a commit hash, branch name, or tag
            git.fetch(self.src_dir, remote="origin")
            if git.is_branch(self.src_dir, identifier=revision):
                self.logger.info("Fetching from remote and checking out branch [%s] for %s.", revision, self.name)
                git.checkout_branch(self.src_dir, remote="origin", branch=revision)
            else:  # tag or commit hash
                self.logger.info("Fetching from remote and checking out revision [%s] for %s.", revision, self.name)
                git.checkout_revision(self.src_dir, revision=revision)
        else:
            self.logger.info("Checking out local revision [%s] for %s.", revision, self.name)
            git.checkout(self.src_dir, branch=revision)
        if git.is_working_copy(self.src_dir):
            git_revision = git.head_revision(self.src_dir)
            self.logger.info("User-specified revision [%s] for [%s] results in git revision [%s]", revision, self.name, git_revision)
            return git_revision
        else:
            self.logger.info("Skipping git revision resolution for %s (%s is not a git repository).", self.name, self.src_dir)
            return None