docs: def _sync_repo(self, repo_url: str, revision: str or None = None) -> Path:
          '''Clone a Git repository to the cache dir. If it has been cloned before, update it.
  
          :param repo_url: Repository URL
          :param revision: Revision: branch, commit hash, or tag
  
          :returns: Path to the cloned repository
          '''
  
          repo_name = repo_url.split('/')[-1].rsplit('.', maxsplit=1)[0]
          repo_path = (self._cache_path / repo_name).resolve()
  
          self.logger.debug(f'Synchronizing with repo; URL: {repo_url}, revision: {revision}')
  
          try:
              self.logger.debug(f'Cloning repo {repo_url} to {repo_path}')
  
              run(
                  f'git clone {repo_url} {repo_path}',
                  shell=True,
                  check=True,
                  stdout=PIPE,
                  stderr=STDOUT
              )
  
          except CalledProcessError as exception:
              if repo_path.exists():
                  self.logger.debug('Repo already cloned; pulling from remote')
  
                  try:
                      run(
                          'git pull',
                          cwd=repo_path,
                          shell=True,
                          check=True,
                          stdout=PIPE,
                          stderr=STDOUT
                      )
  
                  except CalledProcessError as exception:
                      self.logger.warning(str(exception))
  
              else:
                  self.logger.error(str(exception))
  
          if revision:
              run(
                  f'git checkout {revision}',
                  cwd=repo_path,
                  shell=True,
                  check=True,
                  stdout=PIPE,
                  stderr=STDOUT
              )
  
          return repo_path