@@ -266,6 +266,8 @@ Else, asks the user for a patch name."
266
266
(?\r " Show" magit-stgit-show)
267
267
(?a " Goto" magit-stgit-goto-popup)
268
268
; ;
269
+ (?m " Mail patches" magit-stgit-mail-popup)
270
+ ; ;
269
271
(?g " Refresh" magit-stgit-refresh-popup)
270
272
(?r " Repair" magit-stgit-repair)
271
273
(?R " Rebase" magit-stgit-rebase-popup)
@@ -539,6 +541,67 @@ Use ARGS to pass additional arguments."
539
541
(interactive (magit-stgit-redo-arguments))
540
542
(magit-run-stgit " redo" args))
541
543
544
+ ; ;;; magit-stgit-mail
545
+
546
+ (magit-define-popup magit-stgit-mail-popup
547
+ " Popup console for StGit mail."
548
+ 'magit-stgit-commands
549
+ :man-page " stg-mail"
550
+ :switches '((?m " Generate an mbox file instead of sending" " --mbox" )
551
+ (?g " Use git send-email" " --git" t )
552
+ (?A " Auto-detect To, Cc and Bcc for all patches from cover"
553
+ " --auto-recipients" t ))
554
+ :options '((?o " Set file as cover message" " --cover="
555
+ (lambda (prompt default ) (read-file-name " Find file: " default )))
556
+ (?v " Add version to [PATCH ...]" " --version=" )
557
+ (?p " Add prefix to [... PATCH ...]" " --prefix=" )
558
+ (?t " Mail To" " --to=" )
559
+ (?c " Mail Cc" " --cc=" )
560
+ (?b " Mail Bcc:" " --bcc=" ))
561
+ :actions '((?m " Send" magit-stgit-mail)))
562
+
563
+ ;;;### autoload
564
+ (defun magit-stgit-mail (patches &rest args )
565
+ " Send PATCHES with \" stg mail\" .
566
+
567
+ If a cover is specified, it will be searched to automatically set
568
+ the To, Cc, and Bcc fields for all patches."
569
+ (interactive (list (magit-stgit-read-patches t t t t " Send patch" )
570
+ (magit-stgit-mail-arguments)))
571
+ (setq args (-flatten args)) ; nested list when called from popup
572
+ (let* ((auto " --auto-recipients" )
573
+ (have-auto (member auto args))
574
+ (cover (car (delq nil (mapcar (lambda (arg )
575
+ (if (string-prefix-p " --cover=" arg)
576
+ arg nil ))
577
+ args))))
578
+ (cover-pos -1 ))
579
+ (when have-auto
580
+ (setq args (delete auto args)))
581
+ (when (and have-auto cover)
582
+ (setq cover (substring cover 8 ))
583
+ (setq cover (with-temp-buffer (insert-file-contents cover)
584
+ (buffer-string )))
585
+ (while (setq cover-pos
586
+ (string-match
587
+ " ^\\ (To\\ |Cc\\ |Bcc\\ ):[[:space:]]+\\ (.*\\ )[[:space:]]*$"
588
+ cover (1+ cover-pos)))
589
+ (let ((field (match-string 1 cover))
590
+ (recipient (match-string 2 cover)))
591
+ (setq field (match-string 1 cover))
592
+ (when (string-match " <" recipient)
593
+ (setq recipient (format " \" %s \" " recipient)))
594
+ (cond ((equal field " To" )
595
+ (setq args (cons (format " --to=%s " recipient)
596
+ args)))
597
+ ((equal field " Cc" )
598
+ (setq args (cons (format " --cc=%s " recipient)
599
+ args)))
600
+ ((equal field " Bcc" )
601
+ (setq args (cons (format " --bcc=%s " recipient)
602
+ args)))))))
603
+ (magit-run-stgit-async " mail" args patches)))
604
+
542
605
; ;; Mode
543
606
544
607
(defvar magit-stgit-mode-map
0 commit comments