blob: fe411feaa7c88282ca1a9ff876f8e3c496e15f26 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
;;; org-maint.el --- Helpers for porting Emacs commits to Org -*- lexical-binding: t; -*-
;; Copyright (C) 2020, 2021 Kyle Meyer
;; Author: Kyle Meyer <kyle@kyleam.com>
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
(require 'org)
(defvar org-maint-emacs-dir "~/src/emacs/emacs/")
(defvar org-maint-org-dir "~/src/emacs/org-mode-devel/")
(defun org-maint-apply-emacs-commit (commit &optional apply)
"Apply COMMIT from `org-maint-emacs-dir' to `org-maint-org-dir'.
If APPLY is non-nil, use 'git apply' instead of 'git am'."
(interactive (list (or (and (use-region-p)
(buffer-substring-no-properties
(region-beginning) (region-end)))
(and (fboundp 'magit-commit-at-point)
(magit-commit-at-point))
(read-string "Emacs commit: "))
current-prefix-arg))
(unless (and org-maint-org-dir org-maint-emacs-dir)
(user-error "Need to set org-maint-org-dir and org-maint-emacs-dir"))
(with-temp-buffer
(let ((default-directory org-maint-emacs-dir))
(call-process "git" nil t nil
"format-patch" "--stdout"
(format "%s^..%s" commit commit)
"--" "lisp/org"))
(let ((default-directory org-maint-org-dir))
(call-process-region (point-min) (point-max)
"git" nil t nil
(if apply "apply" "am")
"-p3" "--directory=lisp/"))))
(defun org-maint-insert-emacs-commit-info (commit)
"Insert information about COMMIT from `org-maint-emacs-dir'."
(interactive "sCommit: ")
(let ((default-directory org-maint-emacs-dir))
(call-process "git" nil t nil
"show" "-s" "--format=%b%n%s%n%H%n%an%n%cd"
commit)))
(defun org-maint-rev-from-next-item ()
(save-excursion
(or (and (re-search-forward (rx "- [" (or " " "X") "] "
(group (= 40 hex-digit))))
(match-string-no-properties 1))
(user-error "Next revision item not found"))))
(defun org-maint-check-for-new ()
"Check for new commits to backport.
The last commit found is assumed to be the return value of
`org-maint-rev-from-next-item', and Emacs ref name that should be
checked is taken from the Org \"ref\" property."
(interactive)
(let ((ref (or (org-entry-get (point) "ref")
(user-error "No reference found")))
(last-rev (org-maint-rev-from-next-item))
(default-directory org-maint-emacs-dir))
(with-current-buffer (get-buffer-create "*org-maint-new-entries*")
(goto-char (point-min))
(erase-buffer)
(insert (format ";; %s..%s\n\n" last-rev ref))
(call-process "git" nil t nil
"log" "--oneline"
"--format=- [ ] %H%n%n %s%n %an%n %cd%n"
(concat "^" last-rev) ref
"--"
"doc/misc/org.org"
"doc/misc/org-setup.org"
"etc/ORG-NEWS"
"etc/org"
"etc/refcards/orgcard.tex"
"etc/schema/"
"lisp/org")
(display-buffer (current-buffer)))))
(provide 'org-maint)
;;; org-maint.el ends here
|