summaryrefslogtreecommitdiff
path: root/lisp/org-attach.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/org-attach.el')
-rw-r--r--lisp/org-attach.el52
1 files changed, 39 insertions, 13 deletions
diff --git a/lisp/org-attach.el b/lisp/org-attach.el
index e02d7e0..faefa6b 100644
--- a/lisp/org-attach.el
+++ b/lisp/org-attach.el
@@ -1,6 +1,6 @@
;;; org-attach.el --- Manage file attachments to org-mode tasks
-;; Copyright (C) 2008-2012 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2013 Free Software Foundation, Inc.
;; Author: John Wiegley <johnw@newartisans.com>
;; Keywords: org data task
@@ -54,6 +54,15 @@ where the Org file lives."
:group 'org-attach
:type 'directory)
+(defcustom org-attach-git-annex-cutoff (* 32 1024)
+ "If non-nil, files larger than this will be annexed instead of stored."
+ :group 'org-attach
+ :version "24.4"
+ :package-version '(Org . "8.0")
+ :type '(choice
+ (const :tag "None" nil)
+ (integer :tag "Bytes")))
+
(defcustom org-attach-auto-tag "ATTACH"
"Tag that will be triggered automatically when an entry has an attachment."
:group 'org-attach
@@ -252,18 +261,31 @@ the ATTACH_DIR property) their own attachment directory."
(defun org-attach-commit ()
"Commit changes to git if `org-attach-directory' is properly initialized.
This checks for the existence of a \".git\" directory in that directory."
- (let ((dir (expand-file-name org-attach-directory)))
+ (let ((dir (expand-file-name org-attach-directory))
+ (changes 0))
(when (file-exists-p (expand-file-name ".git" dir))
(with-temp-buffer
(cd dir)
- (shell-command "git add .")
- (shell-command "git ls-files --deleted" t)
- (mapc #'(lambda (file)
- (unless (string= file "")
- (shell-command
- (concat "git rm \"" file "\""))))
- (split-string (buffer-string) "\n"))
- (shell-command "git commit -m 'Synchronized attachments'")))))
+ (let ((have-annex
+ (and org-attach-git-annex-cutoff
+ (file-exists-p (expand-file-name ".git/annex" dir)))))
+ (dolist (new-or-modified
+ (split-string
+ (shell-command-to-string
+ "git ls-files -zmo --exclude-standard") "\0" t))
+ (if (and have-annex
+ (>= (nth 7 (file-attributes new-or-modified))
+ org-attach-git-annex-cutoff))
+ (call-process "git" nil nil nil "annex" "add" new-or-modified)
+ (call-process "git" nil nil nil "add" new-or-modified))
+ (incf changes)))
+ (dolist (deleted
+ (split-string
+ (shell-command-to-string "git ls-files -z --deleted") "\0" t))
+ (call-process "git" nil nil nil "rm" deleted)
+ (incf changes))
+ (when (> changes 0)
+ (shell-command "git commit -m 'Synchronized attachments'"))))))
(defun org-attach-tag (&optional off)
"Turn the autotag on or (if OFF is set) off."
@@ -405,14 +427,14 @@ This ignores files starting with a \".\", and files ending in \"~\"."
(directory-files dir nil "[^~]\\'"))))
(defun org-attach-reveal (&optional if-exists)
- "Show the attachment directory of the current task in dired."
+ "Show the attachment directory of the current task.
+This will attempt to use an external program to show the directory."
(interactive "P")
(let ((attach-dir (org-attach-dir (not if-exists))))
(and attach-dir (org-open-file attach-dir))))
(defun org-attach-reveal-in-emacs ()
- "Show the attachment directory of the current task.
-This will attempt to use an external program to show the directory."
+ "Show the attachment directory of the current task in dired."
(interactive)
(let ((attach-dir (org-attach-dir t)))
(dired attach-dir)))
@@ -451,4 +473,8 @@ prefix."
(provide 'org-attach)
+;; Local variables:
+;; generated-autoload-file: "org-loaddefs.el"
+;; End:
+
;;; org-attach.el ends here