Hi,

Please find below a patch that allows bzr to commit only selected
files in a diff or status buffer.

First, feel free to comment on everything in this mail (including
subject line)  and even on the  process used (should  I have used
another way to submit that patch ?).

Now some comments on the why and how of this patch :

* I add a buffer-local variable  to dvc-log buffers to record the
  source buffer which have created  it. This is done in an ad-hoc
  way copied/pasted  from tla-edit-log. There may  be better ways
  (like encapsulations done in dvc-diff-edit-log).

* I tried to insert the file  list into the buffer itself as done
  by dvc-log-insert-commit-file-list, but  the format of the file
  list   seems    a   bit    tied   to   xhg    (Mercurial)   and
  xhg-dvc-files-to-commit run  a command to obtain  the file list
  which address a  different purpose than this patch.   So I gave
  up.

* I corrected  some typos in  doc strings which need  review (the
  corrections :).

  Vincent


* looking for [EMAIL PROTECTED] to compare with
* comparing to [EMAIL PROTECTED]: ..... done.


  M lisp/bzr.el 
  M lisp/dvc-defs.el 
  M lisp/dvc-lisp.el 
  M lisp/dvc-log.el 
  M lisp/dvc-register.el 
                                                                        

* modified files

--- orig/lisp/bzr.el
+++ mod/lisp/bzr.el
@@ -192,7 +192,15 @@
   (let ((buffer (find-file-noselect (dvc-log-edit-file-name))))
     (save-buffer buffer)
     (dvc-run-dvc-async
-     'bzr (list "commit" "--verbose" "--file" (dvc-log-edit-file-name))
+     'bzr
+     (append 
+      (list "commit" "--verbose" "--file" (dvc-log-edit-file-name))
+      ;;  Get marked  files to  do  a selected  file commit.  Nil
+      ;; otherwise (which means commit all files).
+      (when (buffer-live-p dvc-log-source-buffer)
+       (with-current-buffer dvc-log-source-buffer
+         dvc-buffer-marked-file-list)
+       ))
      :finished (dvc-capturing-lambda
                    (output error status arguments)
                  (dvc-show-error-buffer output 'commit)


--- orig/lisp/dvc-defs.el
+++ mod/lisp/dvc-defs.el
@@ -349,11 +349,15 @@
   :group 'dvc)
 
 (defvar dvc-buffer-marked-file-list nil
-  "List of marked and not hidden files in the current buffer.")
+  "List of marked and not hidden files in the current buffer.
+
+This variable is buffer-local.")
 (defvar dvc-buffer-all-marked-file-list nil
   "List of marked files, including hidden ones, in the current buffer.
 
-`dvc-buffer-marked-file-list' is a subset of this one.")
+`dvc-buffer-marked-file-list' is a subset of this one.
+
+This variable is buffer-local")
 
 ;;
 ;; Executable location


--- orig/lisp/dvc-lisp.el
+++ mod/lisp/dvc-lisp.el
@@ -67,14 +67,15 @@
     Values to be captured should be surrounded by (capture ...).
     For example:
 
-      (let* ((y 'lexical-y)
+      (let* ((x 'lexical-x)
+             (y 'lexical-y)
              (l (dvc-capturing-lambda (arg)
                   (list x (capture y) arg))))
         (let ((y 'dynamic-y)
               (x 'dynamic-x))
-          (funcall l 'dyn-arg)))
+          (funcall l 'arg)))
 
-    => (dynamic-x lexical-y)
+    => (dynamic-x lexical-y 'arg)
     "
     (let ((captured-values '()))
       (let ((body (dvc-capturing-lambda-helper body)))


--- orig/lisp/dvc-log.el
+++ mod/lisp/dvc-log.el
@@ -48,6 +48,12 @@
 
 (defvar dvc-log-edit-flush-prefix "## ")
 
+(defvar dvc-log-source-buffer nil
+  "Buffer from which the edit-log command was called.
+Used to obtain the files to commit.
+
+This variable is buffer-local.")
+
 ;; 
--------------------------------------------------------------------------------
 ;; Menus
 ;; 
--------------------------------------------------------------------------------
@@ -63,6 +69,7 @@
   (dvc-install-buffer-menu)
   (set (make-local-variable 'font-lock-defaults)
        '(dvc-log-edit-font-lock-keywords t))
+  (make-local-variable 'dvc-log-source-buffer)
   (setq fill-column 73)
   (run-hooks 'dvc-log-edit-mode-hook))
 
@@ -86,18 +93,31 @@
 
 ;;;###autoload
 (defun dvc-dvc-log-edit ()
-  (interactive)
+  "Edit the log file before a commit.
+
+If  invoked from  a buffer  containing marked  files,  only those
+files  will be  taken  into  account when  you  will commit  with
+\\<dvc-log-edit-mode-map>\\[dvc-log-edit-done] (dvc-log-edit-done)."
+  (interactive "P")
   (setq dvc-pre-commit-window-configuration
-        (current-window-configuration))
+       (current-window-configuration))
   (dvc-switch-to-buffer (dvc-get-buffer-create (dvc-current-active-dvc) 
'log-edit))
   (let ((buffer-name (buffer-name))
-        (file-name (dvc-log-edit-file-name)))
+       (file-name (dvc-log-edit-file-name)))
     (set-visited-file-name file-name t t)
     (when (and (= (point-min) (point-max)) (file-readable-p file-name))
       (insert-file-contents file-name)
       (set-buffer-modified-p nil))
     (rename-buffer buffer-name))
-  (dvc-log-edit-mode))
+  (dvc-log-edit-mode)
+  ;; Get  source buffer  from a presumed  origin (first  the diff
+  ;; buffer from which the command was invoked (presumably), then
+  ;;   from   the  status   buffer   the   command  was   invoked
+  ;;  (presumably). It  may  be better  to  explicitly call  with
+  ;; source-buffer as a param from these buffers...
+  (setq dvc-log-source-buffer
+       (or (dvc-get-buffer (dvc-current-active-dvc) 'diff)
+           (dvc-get-buffer (dvc-current-active-dvc) 'status))))
 
 (defun dvc-log-edit-abort ()
   "Abort the current log edit."


--- orig/lisp/dvc-register.el
+++ mod/lisp/dvc-register.el
@@ -60,7 +60,7 @@
   "Return the function for DVC backend concatenated with POSTFIX.
 
 To be used with `apply' or `funcall'. If NODEFAULT is nil and no
-function is available for this backend, use dvc-<prefix>
+function is available for this backend, use dvc-<postfix>
 instead."
   (let ((res (dvc-intern-symbol-name dvc postfix)))
     (if (or nodefault (fboundp res)) res





Reply via email to