def run_upstream_source_updater(repo_root: str): """Run the upstream source updater at the root of the repository :param repo_root: the root of the repository """ with file_utils.workdir(repo_root): update_upstream_sources(commit=True)
def test_workdir_exception(monkeypatch, tmpdir): newdir = tmpdir / 'newdir' monkeypatch.chdir(tmpdir) with pytest.raises(OSError) as excinfo: with file_utils.workdir(str(newdir)) as cwd: pass # should failed here assert excinfo.value.errno == 2, 'expected errno to be 2 (no such file)'
def updater_main( repo_url: str, refspec: str, target_branch: str, push_map: str, updater_func: Callable[[], None], logger: Logger, execute_commit: bool = False, ): """Run the actual logic to update the upstream source and push the changes :param repo_url: midstream repository URL :param refspec: refspec to fetch :param target_branch: branch to push the changes to :param push_map: path to pusher push map :param updater_func: A callable that is called with the root of the repository as the first argument and run the actual update. :param logger: logger instance that will be used to log messages """ repo_name = get_name_from_repo_url(repo_url) repo_root = os.path.join(os.getcwd(), repo_name) logger.info('adding repo url: %s', repo_url) _, fetch_sha = prep_git_repo(repo_root, repo_url, refspec, checkout=True) with file_utils.workdir(repo_root): ret = updater_func() if execute_commit: commit_files(['.']) push_upstream_sources(dst_branch=target_branch, push_map=push_map, if_not_exists=True, unless_hash=fetch_sha) return ret
def commit_files(files, branch=None, commit_msg=None, add_change_id=True, add_headers=None, repo_dir='.', change_id_headers=None): """ executes staging and committing with specified params :param list<str> files a list of git command line args :param str branch: git branch to be on :param str commit_msg: message body(w/o any header) for the commit msg :param bool add_change_id: if Change-Id should be appended to commit msg :param str repo_dir: dir to stay on when executing git commands :param list<str> change_id_headers: a list of change_id that need to be appended to commit msg raises IOError when files to be committed cannot be accessed :rtype: list a list of changed files : returns: output or error of the command """ if repo_dir and repo_dir.strip(): file_utils.workdir(repo_dir.strip()) if change_id_headers: change_id_headers = set(change_id_headers) else: change_id_headers = set() if add_change_id: change_id_headers.add('Change-Id') if len(git('log', '--oneline').splitlines()): git('reset', 'HEAD') git('add', *filter(os.path.exists, files)) changed_files = staged_files() if changed_files: if branch: git('checkout', '-B', branch) git( 'commit', '-m', commit_message(changed_files, commit_msg, change_id_headers, add_headers)) return changed_files
def test_workdir(monkeypatch, tmpdir): newdir = tmpdir / 'newdir' newdir.mkdir() monkeypatch.chdir(tmpdir) with file_utils.workdir(str(newdir)) as cwd: assert cwd == str(newdir), 'expected cwd to be newdir' assert os.getcwd() == cwd, 'expected to be in newdir' assert os.getcwd() == str(tmpdir), 'expected to be in tmpdir'
def push_changes(repo_root: str, repo_url: str, push_branch: str, unless_hash: str, push_map: str, push_func: Callable = push_upstream_sources): """Push the any new commits in the repository :param repo_root: the root of the repository :param push_branch: the branch to push to :param unless_hash: skip push if the commit sha is the same as this parameter :param push_map: path to the push map :param push_func: the function to use to push the changes """ with file_utils.workdir(repo_root): push_func(dst_branch=push_branch, push_map=push_map, if_not_exists=True, unless_hash=unless_hash)