* admin/admin.el (set-version): Also handle the NEWS file.

This commit is contained in:
Glenn Morris 2016-01-07 20:16:31 -05:00
parent 648de81b0b
commit 428b3de2bf

View file

@ -96,13 +96,74 @@ Root must be the root of an Emacs source tree."
(submatch (1+ (in "0-9."))))))
;; Major version only.
(when (string-match "\\([0-9]\\{2,\\}\\)" version)
(setq version (match-string 1 version))
(set-version-in-file root "src/msdos.c" version
(rx (and "Vwindow_system_version" (1+ not-newline)
?\( (submatch (1+ (in "0-9"))) ?\))))
(set-version-in-file root "etc/refcards/ru-refcard.tex" version
"\\\\newcommand{\\\\versionemacs}\\[0\\]\
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs"))
(let ((newmajor (match-string 1 version)))
(set-version-in-file root "src/msdos.c" newmajor
(rx (and "Vwindow_system_version" (1+ not-newline)
?\( (submatch (1+ (in "0-9"))) ?\))))
(set-version-in-file root "etc/refcards/ru-refcard.tex" newmajor
"\\\\newcommand{\\\\versionemacs}\\[0\\]\
{\\([0-9]\\{2,\\}\\)}.+%.+version of Emacs")))
(let* ((oldversion
(with-temp-buffer
(insert-file-contents (expand-file-name "README" root))
(if (re-search-forward "version \\([0-9.]*\\)" nil t)
(version-to-list (match-string 1)))))
(oldmajor (if oldversion (car oldversion)))
(newversion (version-to-list version))
(newmajor (car newversion))
(newshort (format "%s.%s" newmajor
(+ (cadr newversion)
(if (eq 2 (length newversion)) 0 1))))
(majorbump (and oldversion (not (equal oldmajor newmajor))))
(minorbump (and oldversion (not majorbump)
(not (equal (cadr oldversion) (cadr newversion)))))
(newsfile (expand-file-name "etc/NEWS" root))
(oldnewsfile (expand-file-name (format "etc/NEWS.%s" oldmajor) root)))
(when (and majorbump
(not (file-exists-p oldnewsfile)))
(rename-file newsfile oldnewsfile)
(find-file oldnewsfile) ; to prompt you to commit it
(copy-file oldnewsfile newsfile)
(with-temp-buffer
(insert-file-contents newsfile)
(re-search-forward "is about changes in Emacs version \\([0-9]+\\)")
(replace-match (number-to-string newmajor) nil nil nil 1)
(re-search-forward "^See files \\(NEWS\\)")
(replace-match (format "NEWS.%s, NEWS" oldmajor) nil nil nil 1)
(let ((start (line-beginning-position)))
(search-forward "in older Emacs versions")
(or (equal start (line-beginning-position))
(fill-region start (line-beginning-position 2))))
(re-search-forward "^ $")
(forward-line -1)
(let ((start (point)))
(goto-char (point-max))
(re-search-backward "^ $" nil nil 2)
(delete-region start (line-beginning-position 0)))
(write-region nil nil newsfile)))
(when (or majorbump minorbump)
(find-file newsfile)
(goto-char (point-min))
(if (re-search-forward (format "^\\* .*in Emacs %s" newshort) nil t)
(progn
(kill-buffer)
(message "No need to update etc/NEWS"))
(goto-char (point-min))
(re-search-forward "^ $")
(forward-line -1)
(dolist (s '("Installation Changes" "Startup Changes" "Changes"
"Editing Changes"
"Changes in Specialized Modes and Packages"
"New Modes and Packages"
"Incompatible Lisp Changes"
"Lisp Changes"))
(insert (format "\n \n* %s in Emacs %s\n" s newshort)))
(insert (format "\n \n* Changes in Emacs %s on \
Non-Free Operating Systems\n" newshort)))
;; Because we skip "bump version" commits when merging between branches.
;; Probably doesn't matter in practice, because NEWS changes
;; will only happen on master anyway.
(message "Commit any NEWS changes separately")))
(message "Setting version numbers...done"))
;; Note this makes some assumptions about form of short copyright.