diff lisp/auto-save.el @ 375:a300bb07d72d r21-2b3

Import from CVS: tag r21-2b3
author cvs
date Mon, 13 Aug 2007 11:04:51 +0200
parents cc15677e0335
children 74fd4e045ea6
line wrap: on
line diff
--- a/lisp/auto-save.el	Mon Aug 13 11:04:07 2007 +0200
+++ b/lisp/auto-save.el	Mon Aug 13 11:04:51 2007 +0200
@@ -186,7 +186,8 @@
 
 ;;; Preparations to be done at load time
 
-(defvar auto-save-directory-fallback (expand-file-name "~/.autosave/")
+;; Do not call expand-file-name! This is evaluated at dump time now!
+(defvar auto-save-directory-fallback "~/.autosave/"
   ;; not user-variable-p, see above
   "Directory used for local autosaving of remote files if
 both `auto-save-directory' and `efs-auto-save-remotely' are nil.
@@ -199,25 +200,24 @@
 				auto-save-directory-fallback))
   "If non-nil, directory used for hashed autosave filenames.")
 
-(defun auto-save-check-directory (var)
-  (let ((dir (symbol-value var)))
-    (if (null dir)
-	nil
-      ;; Expand and store back into the variable
-      (set var (setq dir (expand-file-name dir)))
+(defun auto-save-checked-directory (dir)
+  "Make sure the directory DIR exists and return it expanded if non-nil."
+    (when dir
+      (setq dir (expand-file-name dir))
       ;; Make sure directory exists
-      (if (file-directory-p dir)
-	  nil
+      (unless (file-directory-p dir)
 	;; Else we create and chmod 0700 the directory
 	(setq dir (directory-file-name dir)) ; some systems need this
 	(make-directory dir)
-	(set-file-modes dir #o700)))))
+	(set-file-modes dir #o700))
+      dir))
 
-(mapc #'auto-save-check-directory
-     '(auto-save-directory auto-save-directory-fallback))
+;; This make no sense at dump time
+;; (mapc #'auto-save-check-directory
+;     '(auto-save-directory auto-save-directory-fallback))
 
-(and auto-save-hash-p
-     (auto-save-check-directory 'auto-save-hash-directory))
+;(and auto-save-hash-p
+;     (auto-save-check-directory 'auto-save-hash-directory))
 
 
 ;;; Computing an autosave name for a file and vice versa
@@ -335,8 +335,12 @@
 	       (string-match "^#%" basename))
 	   nil)
 	  ;; now we know it looks like #...# thus substring is safe to use
-	  ((or (equal savedir auto-save-directory) ; 2nd arg may be nil
-	       (equal savedir auto-save-directory-fallback))
+	  ((or (equal savedir
+		      (and auto-save-directory
+			   (expand-file-name auto-save-directory)))
+					; 2nd arg may be nil
+	       (equal savedir
+		      (expand-file-name auto-save-directory-fallback)))
 	   ;; it is of the `-fixed-directory' type
 	   (auto-save-slashify-name (substring basename 1 -1)))
 	  (t
@@ -358,10 +362,11 @@
 	     auto-save-hash-directory
 	     (> (length base-name) 14))
 	(expand-file-name (auto-save-cyclic-hash-14 filename)
-			  auto-save-hash-directory)
+			  (auto-save-checked-directory auto-save-hash-directory))
       (expand-file-name base-name
-			(or auto-save-directory
-			    auto-save-directory-fallback)))))
+			(auto-save-checked-directory
+			   (or auto-save-directory
+			       auto-save-directory-fallback))))))
 
 (defun auto-save-name-in-same-directory (filename &optional prefix)
   ;; Enclose the non-directory part of FILENAME in `#' to make an auto
@@ -374,7 +379,8 @@
   (let ((directory (file-name-directory filename)))
     (or (null directory)
 	(file-writable-p directory)
-	(setq directory auto-save-directory-fallback))
+	(setq directory (auto-save-checked-directory
+			 auto-save-directory-fallback)))
     (concat directory			; (concat nil) is ""
 	    (or prefix "#")
 	    (file-name-nondirectory filename)
@@ -497,7 +503,8 @@
 	file				; its original file
 	(total 0)			; # of files offered to recover
 	(count 0))			; # of files actually recovered
-    (or (equal auto-save-directory auto-save-directory-fallback)
+    (or (equal (expand-file-name auto-save-directory)
+	       (expand-file-name auto-save-directory-fallback))
 	(setq savefiles
 	      (nconc savefiles
 		     (directory-files auto-save-directory-fallback