Remove PR -> issue link if comment removed

If "Fixes: #NN" is removed from PR title/description, no longer
consider it a claim for any issue.
This commit is contained in:
Teemu Patja 2017-11-03 12:35:42 +02:00
parent e39d07c37f
commit d806e38433
No known key found for this signature in database
GPG Key ID: F5B7035E6580FD4C
3 changed files with 68 additions and 36 deletions

View File

@ -232,6 +232,13 @@ SET
updated = timezone('utc'::text, now()),
commit_sha = :commit_sha;
-- :name remove-pull-request! :! :n
-- :doc remove a PR by id
DELETE from pull_requests
WHERE pr_id = :pr_id;
-- Bounties ------------------------------------------------------------------------

View File

@ -16,3 +16,9 @@
(jdbc/with-db-connection [con-db *db*]
(db/save-pull-request! con-db
(assoc pull-request :state state)))))
(defn remove
[pr-id]
(jdbc/with-db-connection [con-db *db*]
(db/remove-pull-request! con-db
{:pr_id pr-id})))

View File

@ -111,6 +111,44 @@
issue-number)))
(defn handle-claim
[user-id login name avatar_url owner repo repo-id bounty-issue-number pr-id pr-number head-sha merged? event-type]
(users/create-user user-id login name nil avatar_url)
(let [issue (github/get-issue owner repo bounty-issue-number)
open-or-edit? (contains? #{:opened :edited} event-type)
close? (= :closed event-type)
pr-data {:repo_id repo-id
:pr_id pr-id
:pr_number pr-number
:user_id user-id
:issue_number bounty-issue-number
:issue_id (:id issue)
:state event-type}]
;; TODO: in the opened case if the submitting user has no
;; Ethereum address stored, we could post a comment to the
;; Github PR explaining that payout is not possible if the PR is
;; merged
(cond
open-or-edit? (do
(log/info "PR with reference to bounty issue"
bounty-issue-number "opened")
(pull-requests/save (merge pr-data {:state :opened
:commit_sha head-sha})))
close? (if merged?
(do (log/info "PR with reference to bounty issue"
bounty-issue-number "merged")
(pull-requests/save
(merge pr-data {:state :merged
:commit_sha head-sha}))
(issues/update-commit-sha (:id issue) head-sha))
(do (log/info "PR with reference to bounty issue"
bounty-issue-number "closed with no merge")
(pull-requests/save
(merge pr-data {:state :closed
:commit_sha head-sha})))))))
(defn handle-pull-request-event
;; when a PR is opened, only consider it as a claim if:
;; * PR references an existing bounty-issue
@ -127,7 +165,7 @@
login :login
avatar_url :avatar_url
name :name} :user
id :id
pr-id :id
merged? :merged
{head-sha :sha} :head
pr-number :number
@ -135,45 +173,26 @@
pr-title :title} :pull_request}]
(log/debug "handle-pull-request-event" event-type owner repo repo-id login pr-body pr-title)
(log/debug (extract-issue-number pr-body pr-title))
(when-let [bounty-issue-number (->>
(if-let [bounty-issue-number (->>
(extract-issue-number pr-body pr-title)
(first)
(ensure-bounty-issue owner repo))]
(log/debug "Referenced bounty issue found" repo bounty-issue-number)
(users/create-user user-id login name nil avatar_url)
(let [issue (github/get-issue owner repo bounty-issue-number)
open-or-edit? (contains? #{:opened :edited} event-type)
close? (= :closed event-type)
pr-data {:repo_id repo-id
:pr_id id
:pr_number pr-number
:user_id user-id
:issue_number bounty-issue-number
:issue_id (:id issue)
:state event-type}]
(do
(log/debug "Referenced bounty issue found" owner repo bounty-issue-number)
(handle-claim user-id
login name
avatar_url
owner repo
repo-id
bounty-issue-number
pr-id
pr-number
head-sha
merged?
event-type))
(when (= :edited event-type)
(pull-requests/remove pr-id))))
;; TODO: in the opened case if the submitting user has no
;; Ethereum address stored, we could post a comment to the
;; Github PR explaining that payout is not possible if the PR is
;; merged
(cond
open-or-edit? (do
(log/info "PR with reference to bounty issue"
bounty-issue-number "opened")
(pull-requests/save (merge pr-data {:state :opened
:commit_sha head-sha})))
close? (if merged?
(do (log/info "PR with reference to bounty issue"
bounty-issue-number "merged")
(pull-requests/save
(merge pr-data {:state :merged
:commit_sha head-sha}))
(issues/update-commit-sha (:id issue) head-sha))
(do (log/info "PR with reference to bounty issue"
bounty-issue-number "closed with no merge")
(pull-requests/save
(merge pr-data {:state :closed
:commit_sha head-sha}))))))))
(defn handle-issue-edited
[webhook-payload]