[Cl-darcs-cvs] r124 - cl-darcs/trunk

mhenoch at common-lisp.net mhenoch at common-lisp.net
Fri Aug 24 05:05:54 UTC 2007


Author: mhenoch
Date: Fri Aug 24 01:05:53 2007
New Revision: 124

Added:
   cl-darcs/trunk/pending.lisp
Modified:
   cl-darcs/trunk/cl-darcs.asd
   cl-darcs/trunk/repo.lisp
Log:
Add ADD-FILE.  Move "pending" functions to pending.lisp.


Modified: cl-darcs/trunk/cl-darcs.asd
==============================================================================
--- cl-darcs/trunk/cl-darcs.asd	(original)
+++ cl-darcs/trunk/cl-darcs.asd	Fri Aug 24 01:05:53 2007
@@ -53,6 +53,7 @@
    (:file "equal" :depends-on ("patch-core"))
    (:file "send" :depends-on ("patch-core"))
    (:file "revert" :depends-on ("patch-core"))
+   (:file "pending" :depends-on ("patch-core"))
 
    ;; Franz' inflate implementation
    #-allegro (:file "ifstar")

Added: cl-darcs/trunk/pending.lisp
==============================================================================
--- (empty file)
+++ cl-darcs/trunk/pending.lisp	Fri Aug 24 01:05:53 2007
@@ -0,0 +1,72 @@
+;;; Copyright (C) 2007 Magnus Henoch
+;;;
+;;; This program is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU General Public License as
+;;; published by the Free Software Foundation; either version 2 of the
+;;; License, or (at your option) any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program; if not, write to the Free Software
+;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+(in-package :darcs)
+
+(defun pending-filename (repodir)
+  "Get the name of the file containing \"pending\" patches for REPODIR."
+  (upath-subdir repodir '("_darcs" "patches") "pending"))
+
+(defun read-pending (repodir)
+  "Read the \"pending\" patches of REPODIR."
+  (let ((pending-file (pending-filename repodir)))
+    (when (probe-file pending-file)
+      (read-patch-from-file pending-file :compressed nil))))
+
+(defun add-to-pending (repodir patch)
+  "Add PATCH to the list of \"pending\" patches in REPODIR."
+  (let ((pending (read-pending repodir)))
+    (when (null pending)
+      (setf pending (make-instance 'composite-patch)))
+    (setf (patches pending) (append (patches pending) (list patch)))
+    (with-open-file (out (pending-filename repodir)
+			 :direction :output :element-type '(unsigned-byte 8)
+			 :if-exists :supersede)
+      (write-patch pending out))))
+
+(defun add-file (repo file)
+  "Schedule FILE for recording to REPO.
+FILE can be a string or a pathname denoting a relative path.
+FILE can be either a file or a directory."
+  (setf repo (fad:pathname-as-directory repo))
+  (let (type)
+    (if (pathnamep file)
+	(progn
+	  (unless (pathname-sane-p file)
+	    (error "~A is not a relative pathname going strictly down." file))
+	  (setf type (if (fad:directory-pathname-p file) :directory :file)))
+	(progn
+	  (setf type (if (fad:directory-exists-p (fad:pathname-as-directory file))
+			 :directory 
+			 :file))
+	  (setf file (sanitize-filename file :type type))))
+
+    (let ((pristine-file (merge-pathnames file (upath-subdir repo '("_darcs" "pristine"))))
+	  (working-file (merge-pathnames file repo)))
+      (when (if (eql type :file)
+		(fad:file-exists-p pristine-file)
+		(fad:directory-exists-p pristine-file))
+	(error "~A already exists in the repository." (pathname-to-string file)))
+      (when (not (if (eql type :file)
+		     (fad:file-exists-p working-file)
+		     (fad:directory-exists-p working-file)))
+	(error "~A does not exist in the working directory." (pathname-to-string file))))
+
+    (add-to-pending
+     repo 
+     (if (eql type :file)
+	 (make-instance 'add-file-patch :filename (pathname-to-string file))
+	 (make-instance 'add-dir-patch :directory (pathname-to-string file))))))

Modified: cl-darcs/trunk/repo.lisp
==============================================================================
--- cl-darcs/trunk/repo.lisp	(original)
+++ cl-darcs/trunk/repo.lisp	Fri Aug 24 01:05:53 2007
@@ -162,24 +162,3 @@
     (values (intersection ours-list theirs-list :test #'equalp)
 	    (set-difference ours-list theirs-list :test #'equalp)
 	    (set-difference theirs-list ours-list :test #'equalp))))
-
-(defun pending-filename (repodir)
-  "Get the name of the file containing \"pending\" patches for REPODIR."
-  (upath-subdir repodir '("_darcs" "patches") "pending"))
-
-(defun read-pending (repodir)
-  "Read the \"pending\" patches of REPODIR."
-  (let ((pending-file (pending-filename repodir)))
-    (when (probe-file pending-file)
-      (read-patch-from-file pending-file :compressed nil))))
-
-(defun add-to-pending (repodir patch)
-  "Add PATCH to the list of \"pending\" patches in REPODIR."
-  (let ((pending (read-pending repodir)))
-    (when (null pending)
-      (setf pending (make-instance 'composite-patch)))
-    (setf (patches pending) (append (patches pending) (list patch)))
-    (with-open-file (out (pending-filename repodir)
-			 :direction :output :element-type '(unsigned-byte 8)
-			 :if-exists :supersede)
-      (write-patch pending out))))



More information about the Cl-darcs-cvs mailing list