Check for package upgrades every Monday morning
This commit is contained in:
parent
2264497898
commit
2b2bd5c8ac
4
init.el
4
init.el
@ -640,6 +640,7 @@
|
|||||||
(load "jekyll.el")
|
(load "jekyll.el")
|
||||||
(load "enclose-string.el")
|
(load "enclose-string.el")
|
||||||
(load "buf-manipulation.el")
|
(load "buf-manipulation.el")
|
||||||
|
(load "package-manip")
|
||||||
|
|
||||||
;; Define aliases
|
;; Define aliases
|
||||||
(defalias 'yes-or-no-p 'y-or-n-p)
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
||||||
@ -748,3 +749,6 @@
|
|||||||
(171 187) ; «»
|
(171 187) ; «»
|
||||||
(187 171) ; »«
|
(187 171) ; »«
|
||||||
))
|
))
|
||||||
|
|
||||||
|
;; Check for package upgrades every Monday so I don’t forget.
|
||||||
|
(check-for-package-upgrades-on-day 1)
|
||||||
|
102
lisp/package-manip.el
Normal file
102
lisp/package-manip.el
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
;;; package-manip.el --- Utility functions to check if package upgrades are available
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
;; I should add one.
|
||||||
|
|
||||||
|
;; Credits go to http://emacs.stackexchange.com/a/16407/507
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(defun package-upgrade-all ()
|
||||||
|
"Upgrade all packages automatically without showing *Packages* buffer."
|
||||||
|
(interactive)
|
||||||
|
(package-refresh-contents)
|
||||||
|
(let (upgrades)
|
||||||
|
(cl-flet ((get-version (name where)
|
||||||
|
(let ((pkg (cadr (assq name where))))
|
||||||
|
(when pkg
|
||||||
|
(package-desc-version pkg)))))
|
||||||
|
(dolist (package (mapcar #'car package-alist))
|
||||||
|
(let ((in-archive (get-version package package-archive-contents)))
|
||||||
|
(when (and in-archive
|
||||||
|
(version-list-< (get-version package package-alist)
|
||||||
|
in-archive))
|
||||||
|
(push (cadr (assq package package-archive-contents))
|
||||||
|
upgrades)))))
|
||||||
|
(if upgrades
|
||||||
|
(when (yes-or-no-p
|
||||||
|
(message "Upgrade %d package%s (%s)? "
|
||||||
|
(length upgrades)
|
||||||
|
(if (= (length upgrades) 1) "" "s")
|
||||||
|
(mapconcat #'package-desc-full-name upgrades ", ")))
|
||||||
|
(save-window-excursion
|
||||||
|
(dolist (package-desc upgrades)
|
||||||
|
(let ((old-package (cadr (assq (package-desc-name package-desc)
|
||||||
|
package-alist))))
|
||||||
|
(package-install package-desc)
|
||||||
|
(package-delete old-package)))))
|
||||||
|
(message "All packages are up to date"))))
|
||||||
|
|
||||||
|
(defun check-todays-package-upgrade-p (&optional no-save)
|
||||||
|
"Check if automatic package upgrade has been performed today.
|
||||||
|
|
||||||
|
This function reads the date of the last check from the
|
||||||
|
\"last-package-upgrade\" file. Where this file is looked for is
|
||||||
|
guessed as follows:
|
||||||
|
|
||||||
|
If `user-emacs-cache-directory' is set (e.g. by the
|
||||||
|
`xdg-paths.el' package available from
|
||||||
|
https://github.com/tomprince/xdg-paths-el), the timestamp file is
|
||||||
|
opened from there. Otherwise, it will be read from
|
||||||
|
`user-emacs-directory'
|
||||||
|
|
||||||
|
If NO-SAVE is 'nil', the current date will be saved to the
|
||||||
|
timestamp file.
|
||||||
|
|
||||||
|
The return value of this function will be 't' if the timestamp
|
||||||
|
file contains todays date, 'nil' otherwise."
|
||||||
|
|
||||||
|
(let ((tsfile-location (if (boundp 'user-emacs-cache-directory)
|
||||||
|
user-emacs-cache-directory
|
||||||
|
user-emacs-directory)))
|
||||||
|
(unless (and (file-exists-p tsfile-location)
|
||||||
|
(file-accessible-directory-p tsfile-location))
|
||||||
|
(make-directory tsfile-location t))
|
||||||
|
|
||||||
|
(let ((timestamp-today t)
|
||||||
|
(timestamp-buffer (find-file-literally
|
||||||
|
(expand-file-name "last-package-upgrade"
|
||||||
|
tsfile-location))))
|
||||||
|
(with-current-buffer timestamp-buffer
|
||||||
|
(goto-char 0)
|
||||||
|
(unless (looking-at-p (format-time-string "%Y-%m-%d"))
|
||||||
|
(unless no-save
|
||||||
|
(erase-buffer)
|
||||||
|
(insert (format-time-string "%Y-%m-%d"))
|
||||||
|
(save-buffer 0))
|
||||||
|
(setq timestamp-today nil))
|
||||||
|
(kill-buffer)
|
||||||
|
timestamp-today))))
|
||||||
|
|
||||||
|
(defun check-for-package-upgrades-on-day (&optional day-number)
|
||||||
|
"Check for package upgrades if today is DAY-NUMBER.
|
||||||
|
|
||||||
|
DAY-NUMBER can be anything between 0 and 7, inclusive. Both 0
|
||||||
|
and 7 denote Sunday to make both types of users happy.
|
||||||
|
|
||||||
|
If DAY-NUMBER is 'nil', it defaults to today's day."
|
||||||
|
|
||||||
|
(let ((actual-day-number (cond
|
||||||
|
((eq day-number nil) (string-to-number (format-time-string "%u")))
|
||||||
|
((eq day-number 0) 7)
|
||||||
|
(t day-number))))
|
||||||
|
(when (and (eq day-number (string-to-number (format-time-string "%u")))
|
||||||
|
(not (check-todays-package-upgrade-p t)))
|
||||||
|
(message "Calling")
|
||||||
|
(when (call-interactively 'package-upgrade-all)
|
||||||
|
(message "Called")
|
||||||
|
(check-todays-package-upgrade-p nil)))))
|
||||||
|
|
||||||
|
(provide 'package-manip)
|
||||||
|
|
||||||
|
;;; package-manip.el ends here
|
Loading…
Reference in New Issue
Block a user