Moved rename-file-overwriting-target from fare-utils to asdf 2.26.39 and asdf-utils.
authorFrancois-Rene Rideau <tunes@google.com>
Wed, 26 Dec 2012 20:34:34 +0000 (15:34 -0500)
committerFrancois-Rene Rideau <tunes@google.com>
Wed, 26 Dec 2012 20:34:34 +0000 (15:34 -0500)
utils.lisp

index f8653b8..5715087 100644 (file)
@@ -698,6 +698,13 @@ with given pathname and if it exists return its truename."
 (defun* tmpize-pathname (x)
   (add-pathname-suffix x "-ASDF-TMP"))
 
+(defun* rename-file-overwriting-target (source target)
+  #+clisp ;; But for a bug in CLISP 2.48, we should use :if-exists :overwrite and be atomic
+  (posix:copy-file source target :method :rename)
+  #-clisp
+  (rename-file source target
+               #+clozure :if-exists #+clozure :rename-and-delete))
+
 (defun call-with-staging-pathname (pathname fun)
   "Calls fun with a staging pathname, and atomically
 renames the staging pathname to the pathname in the end.
@@ -709,7 +716,7 @@ For the latter case, we ought pick random suffix and atomically open it."
     (unwind-protect
          (multiple-value-prog1
              (funcall fun staging)
-           (rename-file staging pathname #+clozure :if-exists #+clozure :rename-and-delete))
+           (rename-file-overwriting-target staging pathname))
       (when (probe-file* staging)
         (delete-file staging)))))