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