about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-06-19T15·51+0100
committertazjin <mail@tazj.in>2020-06-19T17·54+0000
commite7f8bdd548a7347759c8704f4293daacf1277581 (patch)
treeccf2eefa2880402c2685f2d6319e673b0cb38612
parentb72d23207552a79bcb8623b85415fa4ededd3ecc (diff)
feat(emacs-pkgs/tvl): Add magit shortcuts for reviews & co r/1039
Introduces two new shortcuts in the magit popup for pushing:

* R: Push for review
* S: Push to submit

The existing "P" command remains, but has been renamed to
"rubberstamp" and documented with a warning.

To make this work across people's different setups, customisation
options for TVL-specific code are being added.

Change-Id: I48e75db55b5f793342fc898093629e437f58dcb2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/503
Reviewed-by: glittershark <grfn@gws.fyi>
-rw-r--r--tools/emacs-pkgs/tvl/default.nix2
-rw-r--r--tools/emacs-pkgs/tvl/tvl.el55
2 files changed, 48 insertions, 9 deletions
diff --git a/tools/emacs-pkgs/tvl/default.nix b/tools/emacs-pkgs/tvl/default.nix
index 3f230aef3c0c..d191c6b6f79e 100644
--- a/tools/emacs-pkgs/tvl/default.nix
+++ b/tools/emacs-pkgs/tvl/default.nix
@@ -6,5 +6,5 @@ trivialBuild rec {
   pname = "tvl";
   version = "1.0";
   src = ./tvl.el;
-  packageRequires = [ magit ];
+  packageRequires = [ magit s ];
 }
diff --git a/tools/emacs-pkgs/tvl/tvl.el b/tools/emacs-pkgs/tvl/tvl.el
index 31d1143188be..4947f66a65c9 100644
--- a/tools/emacs-pkgs/tvl/tvl.el
+++ b/tools/emacs-pkgs/tvl/tvl.el
@@ -1,10 +1,11 @@
 ;;; tvl.el --- description -*- lexical-binding: t; -*-
 ;;
 ;; Copyright (C) 2020 Griffin Smith
+;; Copyright (C) 2020 The TVL Contributors
 ;;
 ;; Author: Griffin Smith <grfn@gws.fyi>
 ;; Version: 0.0.1
-;; Package-Requires: (cl-lib magit)
+;; Package-Requires: (s magit)
 ;;
 ;; This file is not part of GNU Emacs.
 ;;
@@ -15,18 +16,56 @@
 ;;; Code:
 
 (require 'magit)
+(require 's)
 
-(define-suffix-command magit-push-and-submit ()
+(defgroup tvl nil
+  "Customisation options for TVL functionality.")
+
+(defcustom tvl-gerrit-remote "origin"
+  "Name of the git remote for gerrit"
+  :group 'tvl)
+
+(defun tvl--gerrit-ref (target-branch &optional flags)
+  (let ((flag-suffix (if flags (format "%%l=%s" (s-join "," flags))
+                       "")))
+    (format "HEAD:refs/for/%s%s" target-branch flag-suffix)))
+
+(define-suffix-command magit-gerrit-push-for-review ()
+  "Push to Gerrit for review."
   (interactive)
-  (magit-push-refspecs
-   "origin" "HEAD:refs/for/master%l=Code-Review+2,publish-comments,submit"
-   nil))
+  (magit-push-refspecs tvl-gerrit-remote
+                       (tvl--gerrit-ref "master")
+                       nil))
 
 (transient-append-suffix
-  #'magit-push
-  ["r"]
+  #'magit-push ["r"]
+  (list "R" "push to Gerrit for review" #'magit-gerrit-push-for-review))
 
-  (list "P" "Push and submit to gerrit" #'magit-push-and-submit))
+(define-suffix-command magit-gerrit-submit ()
+  "Push to Gerrit for review."
+  (interactive)
+  (magit-push-refspecs tvl-gerrit-remote
+                       (tvl--gerrit-ref "master" '("submit"))
+                       nil))
+
+(transient-append-suffix
+  #'magit-push ["r"]
+  (list "S" "push to Gerrit to submit" #'magit-gerrit-submit))
+
+
+(define-suffix-command magit-gerrit-rubberstamp ()
+  "Push, automatically approve and submit to Gerrit. This
+rubberstamp operation is dangerous and should only be used in
+`//users'."
+  (interactive)
+  (magit-push-refspecs tvl-gerrit-remote
+                       (tvl--gerrit-ref "master"
+                                        '("Code-Review+2" "publish-comments" "submit"))
+                       nil))
+
+(transient-append-suffix
+  #'magit-push ["r"]
+  (list "P" "push, rubberstamp & submit to Gerrit" #'magit-gerrit-rubberstamp))
 
 (provide 'tvl)
 ;;; tvl.el ends here