-
-
Save defunkt/449668 to your computer and use it in GitHub Desktop.
Emacs Lisp to automatically add, commit, and push when files change
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; Automatically add, commit, and push when files change. | |
(defvar autocommit-dir-set '() | |
"Set of directories for which there is a pending timer job") | |
(defun autocommit-schedule-commit (dn) | |
"Schedule an autocommit (and push) if one is not already scheduled for the given dir." | |
(if (null (member dn autocommit-dir-set)) | |
(progn | |
(run-with-idle-timer | |
10 nil | |
(lambda (dn) | |
(setq autocommit-dir-set (remove dn autocommit-dir-set)) | |
(message (concat "Committing org files in " dn)) | |
(shell-command (concat "cd " dn " && git commit -m 'Updated org files.'")) | |
(shell-command (concat "cd " dn " && git push & /usr/bin/true"))) | |
dn) | |
(setq autocommit-dir-set (cons dn autocommit-dir-set))))) | |
(defun autocommit-after-save-hook () | |
"After-save-hook to 'git add' the modified file and schedule a commit and push in the idle loop." | |
(let ((fn (buffer-file-name))) | |
(message "git adding %s" fn) | |
(shell-command (concat "git add " fn)) | |
(autocommit-schedule-commit (file-name-directory fn)))) | |
(defun autocommit-setup-save-hook () | |
"Set up the autocommit save hook for the current file." | |
(interactive) | |
(message "Set up autocommit save hook for this buffer.") | |
(add-hook 'after-save-hook 'autocommit-after-save-hook nil t)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Since the goal seems similar,
git-auto-commit-mode
may also be of interest.