comparison contrib/mq.el @ 4429:3b0f73edee57

mq.el: add mq-signoff, to sign off on a patch
author Bryan O'Sullivan <bos@serpentine.com>
date Tue, 08 May 2007 11:54:39 -0700
parents fa51e66117b4
children ea7b982b6c08
comparison
equal deleted inserted replaced
4428:fa51e66117b4 4429:3b0f73edee57
37 :group 'mercurial) 37 :group 'mercurial)
38 38
39 (defcustom mq-edit-finish-hook nil 39 (defcustom mq-edit-finish-hook nil
40 "Hook run before a patch description is finished up with." 40 "Hook run before a patch description is finished up with."
41 :type 'sexp 41 :type 'sexp
42 :group 'mercurial)
43
44 (defcustom mq-signoff-address nil
45 "Address with which to sign off on a patch."
46 :type 'string
42 :group 'mercurial) 47 :group 'mercurial)
43 48
44 49
45 ;;; Internal variables. 50 ;;; Internal variables.
46 51
70 (define-key mq-global-map "=" 'mq-diff) 75 (define-key mq-global-map "=" 'mq-diff)
71 (define-key mq-global-map "r" 'mq-refresh) 76 (define-key mq-global-map "r" 'mq-refresh)
72 (define-key mq-global-map "e" 'mq-refresh-edit) 77 (define-key mq-global-map "e" 'mq-refresh-edit)
73 (define-key mq-global-map "i" 'mq-new) 78 (define-key mq-global-map "i" 'mq-new)
74 (define-key mq-global-map "n" 'mq-next) 79 (define-key mq-global-map "n" 'mq-next)
80 (define-key mq-global-map "o" 'mq-signoff)
75 (define-key mq-global-map "p" 'mq-previous) 81 (define-key mq-global-map "p" 'mq-previous)
76 (define-key mq-global-map "s" 'mq-edit-series) 82 (define-key mq-global-map "s" 'mq-edit-series)
77 (define-key mq-global-map "t" 'mq-top) 83 (define-key mq-global-map "t" 'mq-top)
78 84
79 (add-minor-mode 'mq-mode 'mq-mode) 85 (add-minor-mode 'mq-mode 'mq-mode)
82 ;;; Refresh edit mode keymap. 88 ;;; Refresh edit mode keymap.
83 89
84 (defvar mq-edit-mode-map (make-sparse-keymap)) 90 (defvar mq-edit-mode-map (make-sparse-keymap))
85 (define-key mq-edit-mode-map "\C-c\C-c" 'mq-edit-finish) 91 (define-key mq-edit-mode-map "\C-c\C-c" 'mq-edit-finish)
86 (define-key mq-edit-mode-map "\C-c\C-k" 'mq-edit-kill) 92 (define-key mq-edit-mode-map "\C-c\C-k" 'mq-edit-kill)
93 (define-key mq-edit-mode-map "\C-c\C-s" 'mq-signoff)
87 94
88 95
89 ;;; Helper functions. 96 ;;; Helper functions.
90 97
91 (defun mq-read-patch-name (&optional source prompt force) 98 (defun mq-read-patch-name (&optional source prompt force)
364 (call-process (hg-binary) nil t nil "qdiff" "--git") 371 (call-process (hg-binary) nil t nil "qdiff" "--git")
365 (call-process (hg-binary) nil t nil "qdiff")) 372 (call-process (hg-binary) nil t nil "qdiff"))
366 (diff-mode) 373 (diff-mode)
367 (font-lock-fontify-buffer))) 374 (font-lock-fontify-buffer)))
368 375
376 (defun mq-signoff ()
377 "Sign off on the current patch, in the style used by the Linux kernel.
378 If the variable mq-signoff-address is non-nil, it will be used, otherwise
379 the value of the ui.username item from your hgrc will be used."
380 (interactive)
381 (let ((was-editing (eq major-mode 'mq-edit-mode))
382 signed)
383 (unless was-editing
384 (mq-refresh-edit))
385 (save-excursion
386 (let* ((user (or mq-signoff-address
387 (hg-run0 "debugconfig" "ui.username")))
388 (signoff (concat "Signed-off-by: " user)))
389 (if (search-forward signoff nil t)
390 (message "You have already signed off on this patch.")
391 (goto-char (point-max))
392 (let ((case-fold-search t))
393 (if (re-search-backward "^Signed-off-by: " nil t)
394 (forward-line 1)
395 (insert "\n")))
396 (insert signoff)
397 (message "%s" signoff)
398 (setq signed t))))
399 (unless was-editing
400 (if signed
401 (mq-edit-finish)
402 (mq-edit-kill)))))
403
369 404
370 (provide 'mq) 405 (provide 'mq)
371 406
372 407
373 ;;; Local Variables: 408 ;;; Local Variables: