Browse Source

Attachments: Remove dependence on xargs

Patch by David Maus, who writes:

> Attached patch for org-attach-commit in org-attach.el removes the
> dependency on the xargs command to remove files in the repository that
> were deleted in the attachment directory.
>
> Simply capture output of git ls-files --deleted -z in a temporary
> buffer, get the filenames from there via string-split and call git rm
> on each single file.
Carsten Dominik 15 years ago
parent
commit
7e476db196
2 changed files with 13 additions and 6 deletions
  1. 2 0
      lisp/ChangeLog
  2. 11 6
      lisp/org-attach.el

+ 2 - 0
lisp/ChangeLog

@@ -1,5 +1,7 @@
 2010-03-24  Carsten Dominik  <carsten.dominik@gmail.com>
 
+	* org-attach.el (org-attach-commit): Remove dependence on xargs.
+
 	* org-latex.el (org-export-latex-fontify): Do not mistake table.el
 	borders for strike-through emphasis.
 

+ 11 - 6
lisp/org-attach.el

@@ -241,12 +241,17 @@ the ATTACH_DIR property) their own attachment directory."
   "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)))
-    (if (file-exists-p (expand-file-name ".git" dir))
-	(shell-command
-	 (concat "(cd " dir "; "
-		 " git add .; "
-		 " git ls-files --deleted -z | xargs -0 git rm; "
-		 " git commit -m 'Synchronized attachments')")))))
+    (when (file-exists-p (expand-file-name ".git" dir))
+      (with-temp-buffer
+	(cd dir)
+	(shell-command "git add .")
+	(shell-command "git ls-files --deleted -z" t)
+	(mapc '(lambda (file)
+		 (unless (string= file "")
+		   (shell-command
+		    (concat "git rm \"" file "\""))))
+	      (split-string (buffer-string) ""))
+	(shell-command "git commit -m 'Synchronized attachments'")))))
 
 (defun org-attach-tag (&optional off)
   "Turn the autotag on or (if OFF is set) off."