def run(self): # rev is a commit # we use branch on purpose so we get the latest thing # TODO: check if rev is HEAD on {branch}, warn then? branch = nested_get(self.event, "msg", "commit", "branch") # self.project is dist-git, we need to get upstream dg = DistGit(self.config, self.package_config) self.package_config.upstream_project_url = ( dg.get_project_url_from_distgit_spec()) if not self.package_config.upstream_project_url: raise PackitException( "URL in specfile is not set. We don't know where the upstream project lives." ) n, r = get_namespace_and_repo_name( self.package_config.upstream_project_url) up = self.upstream_service.get_project(repo=r, namespace=n) lp = LocalProject(git_project=up) api = PackitAPI(self.config, self.package_config, lp) api.sync_from_downstream( dist_git_branch=branch, upstream_branch="master", # TODO: this should be configurable )
class NewDistGitCommitHandler(FedmsgHandler): """Sync new changes to upstream after a new git push in the dist-git.""" topic = "org.fedoraproject.prod.git.receive" triggers = [TheJobTriggerType.commit] task_name = TaskName.distgit_commit def __init__( self, package_config: PackageConfig, job_config: JobConfig, data: EventData, ): super().__init__( package_config=package_config, job_config=job_config, data=data, ) self.branch = data.event_dict.get("branch") def run(self) -> TaskResults: # self.project is dist-git, we need to get upstream dg = DistGit(self.service_config, self.job_config) self.job_config.upstream_project_url = dg.get_project_url_from_distgit_spec( ) if not self.job_config.upstream_project_url: return TaskResults( success=False, details={ "msg": "URL in specfile is not set. " "We don't know where the upstream project lives." }, ) n, r = get_namespace_and_repo_name( self.job_config.upstream_project_url) up = self.project.service.get_project(repo=r, namespace=n) self.local_project = LocalProject( git_project=up, working_dir=self.service_config.command_handler_work_dir) self.api = PackitAPI(self.service_config, self.job_config, self.local_project) self.api.sync_from_downstream( # rev is a commit # we use branch on purpose so we get the latest thing # TODO: check if rev is HEAD on {branch}, warn then? dist_git_branch=self.branch, upstream_branch="master", # TODO: this should be configurable ) return TaskResults(success=True, details={})
class NewDistGitCommitHandler(FedmsgHandler): """ A new flag was added to a dist-git pull request """ topic = "org.fedoraproject.prod.git.receive" name = JobType.sync_from_downstream triggers = [JobTriggerType.commit] def __init__(self, config: ServiceConfig, job: JobConfig, distgit_event: DistGitEvent): super().__init__(config=config, job=job, event=distgit_event) self.distgit_event = distgit_event self.project = distgit_event.get_project() self.package_config = get_package_config_from_repo( self.project, distgit_event.ref) if not self.package_config: raise ValueError( f"No config file found in {self.project.full_repo_name}") def run(self) -> HandlerResults: # self.project is dist-git, we need to get upstream dg = DistGit(self.config, self.package_config) self.package_config.upstream_project_url = ( dg.get_project_url_from_distgit_spec()) if not self.package_config.upstream_project_url: return HandlerResults( success=False, details={ "msg": "URL in specfile is not set. " "We don't know where the upstream project lives." }, ) n, r = get_namespace_and_repo_name( self.package_config.upstream_project_url) up = self.project.service.get_project(repo=r, namespace=n) self.local_project = LocalProject( git_project=up, working_dir=self.config.command_handler_work_dir) self.api = PackitAPI(self.config, self.package_config, self.local_project) self.api.sync_from_downstream( # rev is a commit # we use branch on purpose so we get the latest thing # TODO: check if rev is HEAD on {branch}, warn then? dist_git_branch=self.distgit_event.branch, upstream_branch="master", # TODO: this should be configurable ) return HandlerResults(success=True, details={})
def test_basic_local_update_from_downstream( downstream_n_distgit, mock_downstream_remote_functionality): flexmock(LocalProject, _parse_namespace_from_git_url=lambda: None) u, d = downstream_n_distgit with cwd(u): c = get_test_config() pc = get_local_package_config(str(u)) pc.upstream_project_url = str(u) pc.downstream_project_url = str(d) up_lp = LocalProject(path_or_url=str(u)) api = PackitAPI(c, pc, up_lp) api.sync_from_downstream("master", "master", True) assert (u / "beer.spec").is_file() spec = get_specfile(str(u / "beer.spec")) assert spec.get_version() == "0.0.0"
class NewDistGitCommit(FedmsgHandler): """ A new flag was added to a dist-git pull request """ topic = "org.fedoraproject.prod.git.receive" name = JobType.sync_from_downstream triggers = [JobTriggerType.commit] def run(self) -> HandlerResults: # rev is a commit # we use branch on purpose so we get the latest thing # TODO: check if rev is HEAD on {branch}, warn then? branch = nested_get(self.event, "msg", "commit", "branch") # self.project is dist-git, we need to get upstream dg = DistGit(self.config, self.package_config) self.package_config.upstream_project_url = ( dg.get_project_url_from_distgit_spec() ) if not self.package_config.upstream_project_url: return HandlerResults( success=False, details={ "msg": "URL in specfile is not set. " "We don't know where the upstream project lives." }, ) n, r = get_namespace_and_repo_name(self.package_config.upstream_project_url) up = self.upstream_service.get_project(repo=r, namespace=n) self.local_project = LocalProject( git_project=up, working_dir=self.config.command_handler_work_dir ) self.api = PackitAPI(self.config, self.package_config, self.local_project) self.api.sync_from_downstream( dist_git_branch=branch, upstream_branch="master", # TODO: this should be configurable ) return HandlerResults(success=True, details={})