Function: forge--set-topic-labels
forge--set-topic-labels is a byte-compiled function defined in
forge-github.el.
Signature
(forge--set-topic-labels ARG0 ARG &rest ARGS)
Implementations
(forge--set-topic-labels (REPO forge-gitlab-repository) (TOPIC forge-topic) LABELS) in `forge-gitlab.el'.
Undocumented
(forge--set-topic-labels (REPO forge-github-repository) (TOPIC forge-topic) LABELS) in `forge-github.el'.
Undocumented
Source Code
;; Defined in ~/.emacs.d/elpa/forge-20260408.1922/forge-github.el
(cl-defmethod forge--set-topic-labels
((repo forge-github-repository)
(topic forge-topic)
labels)
(let* ((topic-id (oref topic their-id))
(their-id ; I really messed up IDs! :(
(pcase-lambda (`(,id))
(let* ((parts (split-string (base64-decode-string id) ":"))
(maybe-id (car (last parts))))
(if (string-prefix-p "Label" maybe-id)
(base64-encode-string (string-join (last parts 2) ":"))
maybe-id))))
(old (mapcar their-id (oref topic labels)))
(new (mapcar their-id
(forge-sql [:select [id] :from label
:where (and (= repository $s1)
(in name $v2))]
(oref repo id)
(vconcat labels))))
(add (cl-set-difference new old :test #'equal))
(del (cl-set-difference old new :test #'equal)))
(when (or add del)
(forge--query repo
`(mutation
,@(and add '((addLabelsToLabelable
[(input $add AddLabelsToLabelableInput!)]
clientMutationId)))
,@(and del '((removeLabelsFromLabelable
[(input $del RemoveLabelsFromLabelableInput!)]
clientMutationId))))
`(,@(and add `((add (labelableId . ,topic-id)
(labelIds . ,(vconcat add)))))
,@(and del `((del (labelableId . ,topic-id)
(labelIds . ,(vconcat del))))))
:callback (forge--set-field-callback topic)))))