def test_set_spec_macro_source(tmp_path): u_remote_path = tmp_path / "upstream_remote" u_remote_path.mkdir(parents=True, exist_ok=True) create_new_repo(u_remote_path, ["--bare"]) u = tmp_path / "upstream_git" shutil.copytree(UPSTREAM_MACRO_IN_SOURCE, u) initiate_git_repo(u, tag="0.1.0") with cwd(tmp_path): c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) lp = LocalProject(working_dir=u) ups = Upstream(c, pc, lp) expected_sources = ups.specfile.sources new_ver = "1.2.3" ups.specfile.set_spec_version(version=new_ver, changelog_entry="- asdqwe") assert ups.get_specfile_version() == new_ver assert ups.specfile.sources == expected_sources expected_sources = ups.specfile.sources new_rel = "121" ups.specfile.set_spec_version(release=new_rel) assert ups.specfile.get_release() == new_rel assert ups.specfile.sources == expected_sources
def test_set_spec_ver_empty_changelog(tmp_path): u_remote_path = tmp_path / "upstream_remote" u_remote_path.mkdir(parents=True, exist_ok=True) create_new_repo(u_remote_path, ["--bare"]) u = tmp_path / "upstream_git" shutil.copytree(EMPTY_CHANGELOG, u) initiate_git_repo(u, tag="0.1.0") with cwd(tmp_path): c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) lp = LocalProject(working_dir=u) ups = Upstream(c, pc, lp) new_ver = "1.2.3" ups.specfile.version = new_ver ups.specfile.add_changelog_entry("- asdqwe") assert ups.get_specfile_version() == new_ver assert "%changelog" not in u.joinpath("beer.spec").read_text()
def sync_pr(self, pr_id, dist_git_branch: str, upstream_version: str = None): up = Upstream(config=self.config, package_config=self.package_config) dg = DistGit(config=self.config, package_config=self.package_config) up.checkout_pr(pr_id=pr_id) local_pr_branch = f"pull-request-{pr_id}-sync" # fetch and reset --hard upstream/$branch? dg.checkout_branch(dist_git_branch) dg.create_branch(local_pr_branch) dg.checkout_branch(local_pr_branch) dg.sync_files(up.local_project) patches = up.create_patches( upstream=upstream_version, destination=dg.local_project.working_dir ) dg.add_patches_to_specfile(patches) description = ( f"Upstream pr: {pr_id}\n" f"Upstream commit: {up.local_project.git_repo.head.commit}\n" ) self.sync( distgit=dg, commit_msg=f"Sync upstream pr: {pr_id}", pr_title=f"Upstream pr: {pr_id}", pr_description=description, dist_git_branch="master", add_new_sources=False, )
def test_set_spec_ver_empty_changelog(tmpdir): t = Path(str(tmpdir)) u_remote_path = t / "upstream_remote" u_remote_path.mkdir(parents=True, exist_ok=True) subprocess.check_call(["git", "init", "--bare", "."], cwd=u_remote_path) u = t / "upstream_git" shutil.copytree(EMPTY_CHANGELOG, u) initiate_git_repo(u, tag="0.1.0") with cwd(tmpdir): c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) lp = LocalProject(working_dir=str(u)) ups = Upstream(c, pc, lp) new_ver = "1.2.3" ups.specfile.set_spec_version(version=new_ver, changelog_entry="- asdqwe") assert ups.get_specfile_version() == new_ver assert "%changelog" not in u.joinpath("beer.spec").read_text()
def __init__(self, config: Config, package_config: PackageConfig): self.config = config self.package_config = package_config self.up = Upstream(config=self.config, package_config=self.package_config) self.dg = DistGit(config=self.config, package_config=self.package_config)
def up(self): if self._up is None: self._up = Upstream( config=self.config, package_config=self.package_config, local_project=self.upstream_local_project, ) return self._up
def upstream_mock(local_project_mock, package_config_mock): upstream = Upstream( config=get_test_config(), package_config=package_config_mock, local_project=LocalProject(working_dir=str("test")), ) flexmock(upstream) upstream.should_receive("local_project").and_return(local_project_mock) return upstream
def test_get_commands_for_actions(action_config, result): ups = Upstream( package_config=flexmock( actions={ActionName.create_archive: action_config}, synced_files=flexmock() ), config=flexmock(), local_project=flexmock(), ) assert ups.get_commands_for_actions(action=ActionName.create_archive) == result
def upstream_with_actions(): return Upstream( config=flexmock(Config()), package_config=flexmock( PackageConfig( actions={ ActionName.pre_sync: "command --a", ActionName.get_current_version: "command --b", })), local_project=flexmock(repo_name=flexmock()), )
def upstream_instance(upstream_n_distgit, tmpdir): with cwd(tmpdir): u, d = upstream_n_distgit c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) pc.dist_git_clone_path = str(d) lp = LocalProject(working_dir=str(u)) ups = Upstream(c, pc, lp) yield u, ups
def upstream_instance(upstream_n_distgit): u, d = upstream_n_distgit chdir(u) c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) pc.downstream_project_url = str(d) ups = Upstream(c, pc) return u, ups
def upstream_instance(upstream_and_remote, distgit_and_remote, tmp_path): with cwd(tmp_path): u, _ = upstream_and_remote d, _ = distgit_and_remote c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) pc.dist_git_clone_path = str(d) lp = LocalProject(working_dir=str(u)) ups = Upstream(c, pc, lp) yield u, ups
def upstream_mock(local_project_mock, package_config_mock): upstream = Upstream( config=get_test_config(), package_config=package_config_mock, local_project=LocalProject(working_dir="test"), ) flexmock(upstream) upstream.should_receive("local_project").and_return(local_project_mock) upstream.should_receive("absolute_specfile_path").and_return("_spec_file_path") upstream.should_receive("absolute_specfile_dir").and_return("_spec_file_dir") upstream.should_receive("is_dirty").and_return(False) upstream.should_receive("create_patches") return upstream
def upstream_with_actions(): return Upstream( config=flexmock(Config()), package_config=flexmock( PackageConfig( actions={ ActionName.pre_sync: "command --a", ActionName.get_current_version: "command --b", })), local_project=flexmock( repo_name=flexmock(), refresh_the_arguments=lambda: None, git_project=flexmock(), git_service=flexmock(), ), )
def upstream_instance(upstream_n_distgit): u, d = upstream_n_distgit # we need to chdir(u) because when PackageConfig is created, # it already expects it's in the correct directory old_cwd = os.getcwd() chdir(u) c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) pc.downstream_project_url = str(d) lp = LocalProject(path_or_url=str(u)) ups = Upstream(c, pc, lp) yield u, ups chdir(old_cwd)
def sync_release(self, dist_git_branch: str, version: str = None): """ Update given package in Fedora """ up = Upstream(config=self.config, package_config=self.package_config) dg = DistGit(config=self.config, package_config=self.package_config) full_version = version or up.get_upstream_version() current_up_branch = up.active_branch try: # TODO: this is problematic, since we may overwrite stuff in the repo # but the thing is that we need to do it # I feel like the ideal thing to do would be to clone the repo and work in tmpdir # TODO: this is also naive, upstream may use different tagging scheme, e.g. # release = 232, tag = v232 up.checkout_release(full_version) local_pr_branch = f"{full_version}-{dist_git_branch}-update" # fetch and reset --hard upstream/$branch? logger.info(f'using "{dist_git_branch}" dist-git branch') dg.checkout_branch(dist_git_branch) dg.create_branch(local_pr_branch) dg.checkout_branch(local_pr_branch) description = ( f"Upstream tag: {full_version}\n" f"Upstream commit: {up.local_project.git_repo.head.commit}\n" ) dg.sync_files(up.local_project) self.sync( distgit=dg, commit_msg=f"{full_version} upstream release", pr_title=f"Update to upstream release {full_version}", pr_description=description, dist_git_branch=dist_git_branch, commit_msg_description=description, add_new_sources=True, ) finally: current_up_branch.checkout()
def up(self): if self._up is None: self._up = Upstream(config=self.config, package_config=self.package_config) return self._up