about summary refs log tree commit diff
path: root/users/grfn/emacs.d
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2022-03-16T13·58-0400
committerclbot <clbot@tvl.fyi>2022-03-16T14·09+0000
commit2b593c4cddb0e9e754f29ddb0cca7eab792c7fa6 (patch)
treec2ca3d5053f976d950b9ac349e336941befa9e12 /users/grfn/emacs.d
parent8a00dc92f1bb9f3e767193cebd158cb1daa3c410 (diff)
feat(grfn/emacs): Reference current JIRA ticket in commit message r/3911
Add a `Refs: TICKET-1234` footer to any newly created tickets that're
made while clocked in to an org-mode headline associated with a JIRA
ticket ID via org tracker, and provide a binding to switch it between
Refs and Fixes

Change-Id: I0651d933987536b65013140a6c77214ece77a3d3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5392
Reviewed-by: grfn <grfn@gws.fyi>
Autosubmit: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
Diffstat (limited to 'users/grfn/emacs.d')
-rw-r--r--users/grfn/emacs.d/config.el57
-rw-r--r--users/grfn/emacs.d/org-query.el14
2 files changed, 62 insertions, 9 deletions
diff --git a/users/grfn/emacs.d/config.el b/users/grfn/emacs.d/config.el
index 06178d7cc96e..654b6c5d0fce 100644
--- a/users/grfn/emacs.d/config.el
+++ b/users/grfn/emacs.d/config.el
@@ -467,6 +467,47 @@
 
 (setq projectile-create-missing-test-files 't)
 
+(setq grfn/jira-refs-re
+      (rx line-start
+          (or "Refs" "Fixes")
+          ": "
+          "ENG-" (one-or-more digit)
+          line-end))
+
+(defun grfn/add-jira-reference-to-commit-message ()
+  (interactive)
+  (when (org-tracker-current-backend t)
+    (when-let* ((jira-id (grfn/org-clocked-in-jira-ticket-id)))
+      (save-excursion
+        (save-match-data
+          (goto-char (point-min))
+          ;; Don't add one if we've already got one
+          (unless (search-forward-regexp grfn/jira-refs-re nil t)
+            (or
+             (and
+              (search-forward-regexp (rx line-start "Change-Id:") nil t)
+              (forward-line -1))
+             (and
+              (search-forward-regexp (rx line-start "# Please enter") nil t)
+              (forward-line -2)))
+            (insert (format "\nRefs: %s" jira-id))))))))
+
+(defun grfn/switch-jira-refs-fixes ()
+  (interactive)
+  (save-excursion
+    (save-match-data
+      (if (not (search-forward-regexp grfn/jira-refs-re nil t))
+          (message "Could not find reference to JIRA ticket")
+        (goto-char (point-at-bol))
+        (save-restriction
+          (narrow-to-region (point-at-bol)
+                            (point-at-eol))
+          (or
+           (and (search-forward "Refs" nil t)
+                (replace-match "Fixes"))
+           (and (search-forward "Fixes" nil t)
+                (replace-match "Refs"))))))))
+
 (after! magit
   (map! :map magit-mode-map
         ;; :n "] ]" #'magit-section-forward
@@ -537,7 +578,12 @@
   (transient-append-suffix
     #'magit-branch
     ["c"]
-    (list "M" "Rename branch to Tracker ticket" #'magit-rename-org-tracker-branch)))
+    (list "M" "Rename branch to Tracker ticket" #'magit-rename-org-tracker-branch))
+
+  (add-hook 'git-commit-setup-hook #'grfn/add-jira-reference-to-commit-message)
+  (map! (:map git-commit-mode-map
+         "C-c C-f" #'grfn/switch-jira-refs-fixes))
+  )
 
 ;; (defun grfn/split-window-more-sensibly (&optional window)
 ;;   (let ((window (or window (selected-window))))
@@ -740,15 +786,8 @@
         cider-save-file-on-load 't)
   )
 
-(defun +org-clocked-in-element ()
-  (when-let ((item (car org-clock-history)))
-    (save-mark-and-excursion
-    (with-current-buffer (marker-buffer item)
-      (goto-char (marker-position item))
-      (org-element-at-point)))))
-
 (comment
- (setq elt (+org-clocked-in-item))
+ (setq elt (+org-clocked-in-element))
 
  (eq 'headline (car elt))
  (plist-get (cadr elt) :raw-value)
diff --git a/users/grfn/emacs.d/org-query.el b/users/grfn/emacs.d/org-query.el
index 022832c05fac..49e057da2aa9 100644
--- a/users/grfn/emacs.d/org-query.el
+++ b/users/grfn/emacs.d/org-query.el
@@ -114,3 +114,17 @@
 (comment
  (grfn/org-current-clocked-in-task-message)
  )
+
+(defun grfn/org-clocked-in-jira-ticket-id ()
+  (grfn/at-org-clocked-in-item
+   (org-tracker-backend/extract-issue-id
+    (org-tracker-current-backend)
+    (cadr (org-element-at-point)))))
+
+(comment
+ (grfn/at-org-clocked-in-item
+  (org-tracker-backend/extract-issue-id
+   (org-tracker-current-backend)
+   (cadr (org-element-at-point))))
+
+ )