def link_pr_to_ticket(self, session, pr_uid): """ Link the specified pull-request against the ticket(s) mentioned in the commits of the pull-request """ _log.info('LINK_PR_TO_TICKET: Linking ticket(s) to PR for: %s' % pr_uid) request = pagure.lib.get_request_by_uid(session, pr_uid) if not request: _log.info('LINK_PR_TO_TICKET: Not PR found for: %s' % pr_uid) return if request.remote: repopath = pagure.utils.get_remote_repo_path(request.remote_git, request.branch_from) parentpath = pagure.utils.get_repo_path(request.project) else: repo_from = request.project_from repopath = pagure.utils.get_repo_path(repo_from) parentpath = get_parent_repo_path(repo_from) repo_obj = pygit2.Repository(repopath) orig_repo = pygit2.Repository(parentpath) diff_commits = pagure.lib.git.diff_pull_request( session, request, repo_obj, orig_repo, requestfolder=pagure_config['REQUESTS_FOLDER'], with_diff=False) _log.info('LINK_PR_TO_TICKET: Found %s commits in that PR' % len(diff_commits)) name = request.project.name namespace = request.project.namespace user = request.project.user.user \ if request.project.is_fork else None for line in pagure.lib.git.read_git_lines( ['log', '--no-walk'] + [c.oid.hex for c in diff_commits] + ['--'], repopath): line = line.strip() for issue in pagure.lib.link.get_relation(session, name, user, namespace, line, 'fixes', include_prs=False): _log.info('LINK_PR_TO_TICKET: Link ticket %s to PRs %s' % (issue, request)) pagure.lib.link_pr_issue(session, issue, request) for issue in pagure.lib.link.get_relation(session, name, user, namespace, line, 'relates'): _log.info('LINK_PR_TO_TICKET: Link ticket %s to PRs %s' % (issue, request)) pagure.lib.link_pr_issue(session, issue, request) try: session.commit() except SQLAlchemyError: _log.exception('Could not link ticket to PR :(') session.rollback()
def link_pr_to_ticket(self, session, pr_uid): """ Link the specified pull-request against the ticket(s) mentioned in the commits of the pull-request """ _log.info("LINK_PR_TO_TICKET: Linking ticket(s) to PR for: %s" % pr_uid) request = pagure.lib.query.get_request_by_uid(session, pr_uid) if not request: _log.info("LINK_PR_TO_TICKET: Not PR found for: %s" % pr_uid) return if request.remote: repopath = pagure.utils.get_remote_repo_path(request.remote_git, request.branch_from) parentpath = pagure.utils.get_repo_path(request.project) elif request.project_from: repo_from = request.project_from repopath = pagure.utils.get_repo_path(repo_from) parentpath = get_parent_repo_path(repo_from) else: _log.info("LINK_PR_TO_TICKET: PR neither remote, nor with a " "project_from, bailing: %s" % pr_uid) return # Drop the existing commit-based relations session.query(pagure.lib.model.PrToIssue).filter( pagure.lib.model.PrToIssue.pull_request_uid == request.uid).filter( pagure.lib.model.PrToIssue.origin == "intial_comment_pr").delete( synchronize_session="fetch") repo_obj = pygit2.Repository(repopath) orig_repo = pygit2.Repository(parentpath) diff_commits = pagure.lib.git.diff_pull_request(session, request, repo_obj, orig_repo, with_diff=False, notify=False) _log.info("LINK_PR_TO_TICKET: Found %s commits in that PR" % len(diff_commits)) name = request.project.name namespace = request.project.namespace user = request.project.user.user if request.project.is_fork else None for line in pagure.lib.git.read_git_lines( ["log", "--no-walk"] + [c.oid.hex for c in diff_commits] + ["--"], repopath, ): line = line.strip() for issue in pagure.lib.link.get_relation(session, name, user, namespace, line, "fixes", include_prs=False): _log.info("LINK_PR_TO_TICKET: Link ticket %s to PRs %s" % (issue, request)) pagure.lib.query.link_pr_issue(session, issue, request, origin="commit") for issue in pagure.lib.link.get_relation(session, name, user, namespace, line, "relates"): _log.info("LINK_PR_TO_TICKET: Link ticket %s to PRs %s" % (issue, request)) pagure.lib.query.link_pr_issue(session, issue, request, origin="commit") try: session.commit() except SQLAlchemyError: _log.exception("Could not link ticket to PR :(") session.rollback()
def link_pr_to_ticket(self, session, pr_uid): """ Link the specified pull-request against the ticket(s) mentioned in the commits of the pull-request """ _log.info("LINK_PR_TO_TICKET: Linking ticket(s) to PR for: %s" % pr_uid) request = pagure.lib.query.get_request_by_uid(session, pr_uid) if not request: _log.info("LINK_PR_TO_TICKET: Not PR found for: %s" % pr_uid) return if request.remote: repopath = pagure.utils.get_remote_repo_path( request.remote_git, request.branch_from ) parentpath = pagure.utils.get_repo_path(request.project) elif request.project_from: repo_from = request.project_from repopath = pagure.utils.get_repo_path(repo_from) parentpath = get_parent_repo_path(repo_from) else: _log.info( "LINK_PR_TO_TICKET: PR neither remote, nor with a " "project_from, bailing: %s" % pr_uid ) return # Drop the existing commit-based relations session.query(pagure.lib.model.PrToIssue).filter( pagure.lib.model.PrToIssue.pull_request_uid == request.uid ).filter(pagure.lib.model.PrToIssue.origin == "intial_comment_pr").delete( synchronize_session="fetch" ) repo_obj = pygit2.Repository(repopath) orig_repo = pygit2.Repository(parentpath) diff_commits = pagure.lib.git.diff_pull_request( session, request, repo_obj, orig_repo, with_diff=False, notify=False ) _log.info( "LINK_PR_TO_TICKET: Found %s commits in that PR" % len(diff_commits) ) name = request.project.name namespace = request.project.namespace user = request.project.user.user if request.project.is_fork else None for line in pagure.lib.git.read_git_lines( ["log", "--no-walk"] + [c.oid.hex for c in diff_commits] + ["--"], repopath, ): line = line.strip() for issue in pagure.lib.link.get_relation( session, name, user, namespace, line, "fixes", include_prs=False ): _log.info( "LINK_PR_TO_TICKET: Link ticket %s to PRs %s" % (issue, request) ) pagure.lib.query.link_pr_issue( session, issue, request, origin="commit" ) for issue in pagure.lib.link.get_relation( session, name, user, namespace, line, "relates" ): _log.info( "LINK_PR_TO_TICKET: Link ticket %s to PRs %s" % (issue, request) ) pagure.lib.query.link_pr_issue( session, issue, request, origin="commit" ) try: session.commit() except SQLAlchemyError: _log.exception("Could not link ticket to PR :(") session.rollback()