From mhenoch at common-lisp.net Thu Aug 31 13:09:18 2006 From: mhenoch at common-lisp.net (mhenoch at common-lisp.net) Date: Thu, 31 Aug 2006 09:09:18 -0400 (EDT) Subject: [Cl-darcs-cvs] r35 - cl-darcs/trunk Message-ID: <20060831130918.E490C5301D@common-lisp.net> Author: mhenoch Date: Thu Aug 31 09:09:18 2006 New Revision: 35 Modified: cl-darcs/trunk/get.lisp cl-darcs/trunk/pull.lisp cl-darcs/trunk/repo.lisp Log: Enable specifying which patches to get in get-repo, at the cost of not writing tag-based inventories. Modified: cl-darcs/trunk/get.lisp ============================================================================== --- cl-darcs/trunk/get.lisp (original) +++ cl-darcs/trunk/get.lisp Thu Aug 31 09:09:18 2006 @@ -41,50 +41,44 @@ (apply-patch checkpoint-patch outname)) (format t "done")) - (write-inventory outname patchinfo-list) - (let ((patches (if checkpoint - ;; XXX: patchinfo-list is a list of lists now - (find-remaining-patches patchinfo-list checkpoint) - (apply #'append (reverse patchinfo-list))))) + (let* ((all-patches (if checkpoint + ;; XXX: patchinfo-list is a list of lists now + (find-remaining-patches patchinfo-list checkpoint) + (apply #'append (reverse patchinfo-list)))) + (patches + (if (or (null query) (y-or-n-p "Apply all patches?")) + all-patches + (select-some-patches all-patches)))) + ;; write-inventory wants patches ordered by tags, but we have + ;;them all in a list in all-patches and patches... + ;;(write-inventory outname patchinfo-list) (copy-repo-patches repodir outname patches) - (if (or (null query) (y-or-n-p "Apply patches?")) - (progn - (format t "~&Applying patches") - (dolist (patch patches) - (apply-patch (read-patch-from-repo outname patch) - outname) - (format t "."))) - (format t "~&Not applying patches")) + (format t "~&Applying patches") + (dolist (patchinfo patches) + (let ((patch (read-patch-from-repo outname patchinfo))) + (apply-patch patch outname) + ;; XXX: this is where we write tags to inventory correctly + ;; Check how darcs handles tags - rotate inventory files? + ;; What happens when adding patches one by one? + (append-inventory outname patchinfo) + (format t "."))) (format t "~&All done")))) -(defun apply-some-patches (repo) - "Interactively select some patches to apply to REPO." - (setf repo (fad:pathname-as-directory repo)) - (let ((patch-files - (sort - (directory - (merge-pathnames - (make-pathname :directory (list :relative "_darcs" "patches") - :name :wild :type "gz") - repo)) - #'string< :key #'pathname-name))) - (format t "~&Available patches:") - (loop for file in patch-files - count file into i - do (format t "~&~3 at A ~A" i (pathname-name file))) - (format t "~&Specify inclusive start and end (NIL will do): ") - (let ((start (read)) (end (read))) - (if start - (decf start) - (setf start 0)) - (let ((file-subset (subseq patch-files start end))) - (format t "~&Applying patches") - (dolist (patch-file file-subset) - (apply-patch (read-patch-from-file patch-file) repo) - (format t ".")) - (format t "~&Done"))))) +(defun select-some-patches (patchinfo-list) + "Interactively select some patches from PATCHINFO-LIST. +Return a new list containing the selected patches." + (format t "~&Available patches:") + (loop for patchinfo in patchinfo-list + count patchinfo into i + do (format t "~&~3 at A ~A" i patchinfo)) + (format t "~&Specify inclusive start and end (NIL will do): ") + (let ((start (read)) (end (read))) + (if start + (decf start) + (setf start 0)) + (subseq patchinfo-list start end))) (defun find-remaining-patches (patchinfo-list checkpoint) "Find the patches remaining after getting to CHECKPOINT." Modified: cl-darcs/trunk/pull.lisp ============================================================================== --- cl-darcs/trunk/pull.lisp (original) +++ cl-darcs/trunk/pull.lisp Thu Aug 31 09:09:18 2006 @@ -34,7 +34,7 @@ (dolist (p only-theirs) (format t "~& - ~A" p)) ;; XXX: This is where we pick which of their patches we want to - ;; pull. + ;; pull. And copy them to our repo. (let* ((their-patches (mapcar (lambda (pi) (read-patch-from-repo theirrepo pi)) Modified: cl-darcs/trunk/repo.lisp ============================================================================== --- cl-darcs/trunk/repo.lisp (original) +++ cl-darcs/trunk/repo.lisp Thu Aug 31 09:09:18 2006 @@ -138,7 +138,9 @@ (make-pathname :directory '(:relative "_darcs") :name "inventory") outrepo) - :direction :output :if-exists :append + :direction :output + :if-exists :append + :if-does-not-exist :create :element-type '(unsigned-byte 8)) (map nil (lambda (char) (write-byte (char-code char) f)) From mhenoch at common-lisp.net Thu Aug 31 22:48:18 2006 From: mhenoch at common-lisp.net (mhenoch at common-lisp.net) Date: Thu, 31 Aug 2006 18:48:18 -0400 (EDT) Subject: [Cl-darcs-cvs] r36 - cl-darcs/trunk Message-ID: <20060831224818.3275C390E4@common-lisp.net> Author: mhenoch Date: Thu Aug 31 18:48:17 2006 New Revision: 36 Modified: cl-darcs/trunk/util.lisp Log: Add string-to-bytes, and explaining comment Modified: cl-darcs/trunk/util.lisp ============================================================================== --- cl-darcs/trunk/util.lisp (original) +++ cl-darcs/trunk/util.lisp Thu Aug 31 18:48:17 2006 @@ -63,10 +63,16 @@ (atom (lambda (c) (eql c delimiters))) (list (lambda (c) (member c delimiters))))) +;; These two functions should be eachother's inverses, and be defined +;; for all possible 8-bit values. (defun bytes-to-string (sequence) "Convert SEQUENCE, a sequence of binary values, to a string." (map 'string #'code-char sequence)) +(defun string-to-bytes (string) + "Convert STRING to a vector of (unsigned-byte 8)." + (map '(vector (unsigned-byte 8)) #'char-code string)) + ;; These functions read vaguely character-like data from binary ;; streams.