about summary refs log tree commit diff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-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 3f230aef3c..d191c6b6f7 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 31d1143188..4947f66a65 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