Here's a new version that takes Matthieu's feedback into account.  The
lack of user-wide ignore file support isn't a critical error, so I
changed the displayed message to that effect.  Additionally, I noticed
that `buffer' was used instead of `buf' later on in the function.

<<LOG-START>>

* lisp/bzr.el (bzr-ignore-setup): Call dvc-make-temp-dir.  Remove the
  temporary directory when done.  Display a more informative message if
  "bzr init; bzr ignored" fails to make the file.  Fix use of `buffer'
  instead of `buf'.

* lisp/dvc-core.el (dvc-delete-recursively): New function that
  recursively removes a file or directory.

* lisp/dvc-emacs.el (dvc-emacs-make-temp-dir): New function that is
  aliased to dvc-make-temp-dir.  It creates a temporary directory with a
  given prefix in the default temp area, returning its location.

* lisp/dvc-xemacs.el (dvc-xmas-make-temp-dir): Ditto, but for XEmacs.

<<LOG-END>>


[VERSION] dvc-dev-bzr

bzr (bazaar-ng) 0.8.2

Emacs  : GNU Emacs 22.0.50.1 (i686-pc-linux-gnu, GTK+ Version 2.8.18)
 of 2006-07-30 on tuxtanker

-- 
Michael Olson -- FSF Associate Member #652 -- http://www.mwolson.org/
Interests: Emacs Lisp, text markup, protocols -- Jabber: mwolson_at_hcoop.net
  /` |\ | | | IRC: freenode.net/mwolson: #emacs, #hcoop, #muse, #PurdueLUG
 |_] | \| |_| Projects: Emacs, Muse, ERC, EMMS, Planner, ErBot, DVC

Attachment: pgpAXQ3RCnY1M.pgp
Description: PGP signature

=== modified file 'lisp/bzr.el'
--- lisp/bzr.el	
+++ lisp/bzr.el	
@@ -537,19 +537,19 @@
          (buf (or (when (file-exists-p file)
                     (find-file-noselect file))
                   ;; let bzr create the file.
-                  (let* ((dir (make-temp-name "dvc-bzr-ignore"))
-                         (foo (make-directory dir))
-                         (default-directory dir))
-                    (dvc-run-dvc-sync 'bzr (list "init")
-                                      :finished 'dvc-null-handler)
-                    (dvc-run-dvc-sync 'bzr (list "ignored")
-                                      :finished 'dvc-null-handler)
+                  (let ((dir (dvc-make-temp-dir "dvc-bzr-ignore")))
+                    (let ((default-directory dir))
+                      (dvc-run-dvc-sync 'bzr (list "init")
+                                        :finished 'dvc-null-handler)
+                      (dvc-run-dvc-sync 'bzr (list "ignored")
+                                        :finished 'dvc-null-handler))
+                    (dvc-delete-recursively dir)
                     (if (file-exists-p file)
                         (find-file-noselect file)
-                      (message "WARNING: Could not find or create bzr user-wide ignore file.")
+                      (message "Your version of bzr does not support a user-wide ignore file.")
                       nil))))
          (ins t))
-    (when buffer
+    (when buf
       (with-current-buffer buf
         (goto-char (point-min))
         (if (re-search-forward "^# DVC ignore (don't edit !!)\n\\(\\(.\\|\n\\)*\n\\)# end DVC ignore$" nil 'end)

=== modified file 'lisp/dvc-core.el'
--- lisp/dvc-core.el	
+++ lisp/dvc-core.el	
@@ -138,6 +138,20 @@
      (interactive "e")
      (mouse-set-point event)
      (,function)))
+
+;; Adapted from `dired-delete-file' in Emacs 22
+(defun dvc-delete-recursively (file)
+  "Delete FILE or directory recursively."
+  (let (files)
+    (if (not (eq t (car (file-attributes file))))
+        (delete-file file)
+      (when (setq files
+                  (directory-files
+                   file t "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
+        (while files
+          (dvc-delete-recursively (car files))
+          (setq files (cdr files))))
+      (delete-directory file))))
 
 ;; --------------------------------------------------------------------------------
 ;; File selection helpers

=== modified file 'lisp/dvc-emacs.el'
--- lisp/dvc-emacs.el	
+++ lisp/dvc-emacs.el	
@@ -66,6 +66,16 @@
         (forward-line 0)
         (1+ (count-lines start (point)))))))
 
+(defun dvc-emacs-make-temp-dir (prefix)
+  "Make a temporary directory using PREFIX.
+Return the name of the directory."
+  (let ((dir (make-temp-name
+              (expand-file-name prefix temporary-file-directory))))
+    (make-directory dir)
+    dir))
+
+(defalias 'dvc-make-temp-dir 'dvc-emacs-make-temp-dir)
+
 (provide 'dvc-emacs)
 ;; Local Variables:
 ;; arch-tag: 66b92889-1ce9-4c1d-818a-8bd5ee499091

=== modified file 'lisp/dvc-xemacs.el'
--- lisp/dvc-xemacs.el	
+++ lisp/dvc-xemacs.el	
@@ -315,6 +315,15 @@
 (unless (functionp 'diff-hunk-prev)
   (defalias 'diff-hunk-prev 'diff-prev-hunk))
 
+(defun dvc-xmas-make-temp-dir (prefix)
+  "Make a temporary directory using PREFIX.
+Return the name of the directory."
+  (let ((dir (make-temp-name (expand-file-name prefix (temp-directory)))))
+    (make-directory dir)
+    dir))
+
+(defalias 'dvc-make-temp-dir 'dvc-xmas-make-temp-dir)
+
 ;; From Gnus.
 (defun dvc-xmas-move-overlay (extent start end &optional buffer)
   (set-extent-endpoints extent start end buffer))

_______________________________________________
Dvc-dev mailing list
[email protected]
https://mail.gna.org/listinfo/dvc-dev

Reply via email to