From 98b37a4ca8b1bb434a495fb013d5010465dc3b7b Mon Sep 17 00:00:00 2001 From: Lenka Segura Date: May 06 2019 09:10:00 +0000 Subject: Add repo_from argument for API create pull request --- diff --git a/pagure/api/fork.py b/pagure/api/fork.py index 64eb542..c8b5daa 100644 --- a/pagure/api/fork.py +++ b/pagure/api/fork.py @@ -1351,9 +1351,21 @@ def api_pull_request_create(repo, username=None, namespace=None): """ - repo = _get_repo(repo, username, namespace) - _check_pull_request(repo) - _check_token(repo) + repo_to = _get_repo(repo, username, namespace) + repo_from_d = get_request_data().get("repo_from") + try: + repo_from = (_get_repo(repo_from_d['repo'], repo_from_d.get('username'), + repo_from_d.get('namespace'))) + except Exception: + repo_from = None + if not repo_from: + raise pagure.exceptions.APIError( + 400, + error_code=APIERROR.EINVALIDREQ, + errors={"repo_from": ["This field is required."]}, + ) + _check_pull_request(repo_to) + _check_token(repo_from) form = pagure.forms.RequestPullForm(csrf_enabled=False) if not form.validate_on_submit(): @@ -1375,35 +1387,31 @@ def api_pull_request_create(repo, username=None, namespace=None): errors={"branch_from": ["This field is required."]}, ) - parent = repo - if repo.parent: - parent = repo.parent - - if not parent.settings.get("pull_requests", True): + if not repo_to.settings.get("pull_requests", True): raise pagure.exceptions.APIError( 404, error_code=APIERROR.EPULLREQUESTSDISABLED ) - repo_committer = pagure.utils.is_repo_committer(repo) + repo_committer = pagure.utils.is_repo_committer(repo_from) if not repo_committer: raise pagure.exceptions.APIError( 401, error_code=APIERROR.ENOTHIGHENOUGH ) - repo_obj = pygit2.Repository(repo.repopath("main")) - orig_repo = pygit2.Repository(parent.repopath("main")) + git_repo_from = pygit2.Repository(repo_from.repopath("main")) + git_repo_to = pygit2.Repository(repo_to.repopath("main")) try: diff, diff_commits, orig_commit = pagure.lib.git.get_diff_info( - repo_obj, orig_repo, branch_from, branch_to + git_repo_from, git_repo_to, branch_from, branch_to ) except pagure.exceptions.PagureException as err: raise pagure.exceptions.APIError( 400, error_code=APIERROR.EINVALIDREQ, errors=str(err) ) - if parent.settings.get( + if repo_to.settings.get( "Enforce_signed-off_commits_in_pull-request", False ): for commit in diff_commits: @@ -1424,10 +1432,10 @@ def api_pull_request_create(repo, username=None, namespace=None): request = pagure.lib.query.new_pull_request( flask.g.session, - repo_to=parent, + repo_to=repo_to, branch_to=branch_to, branch_from=branch_from, - repo_from=repo, + repo_from=repo_from, title=form.title.data, initial_comment=initial_comment, user=flask.g.fas_user.username, diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 19bc5f9..0ac9f5a 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -470,6 +470,17 @@ class Project(BASE): viewonly=True, ) + def __repr__(self): + return "Project(%s, name:%s, namespace:%s, url:%s, is_fork:%s,\ + parent_id:%s)" % ( + self.id, + self.name, + self.namespace, + self.url, + self.is_fork, + self.parent_id, + ) + @property def isa(self): """ A string to allow finding out that this is a project. """