# HG changeset patch # User Dan Nicolaescu # Date 1258316938 0 # Node ID 2bed02fa304108b09c1ec3071e412493108a4926 # Parent 42cdafa98c50907fce6c274a596880720dff93f2 * vc.el (vc-log-show-limit): New variable. (vc-print-log, vc-print-root-log): Add new argument LIMIT. Set it when using a prefix argument. (vc-print-log-internal): Add new argument LIMIT. * vc-svn.el (vc-svn-print-log): * vc-mtn.el (vc-mtn-print-log): * vc-hg.el (vc-hg-print-log): * vc-bzr.el (vc-bzr-print-log): Add new optional argument LIMIT, pass it to the log command when set. Make the BUFFER argument non-optional. * vc-sccs.el (vc-sccs-print-log): * vc-rcs.el (vc-rcs-print-log): * vc-git.el (vc-git-print-log): * vc-cvs.el (vc-cvs-print-log): Add new optional argument LIMIT, ignore it. Make the BUFFER argument non-optional diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/ChangeLog --- a/lisp/ChangeLog Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/ChangeLog Sun Nov 15 20:28:58 2009 +0000 @@ -1,5 +1,23 @@ 2009-11-15 Dan Nicolaescu + * vc.el (vc-log-show-limit): New variable. + (vc-print-log, vc-print-root-log): Add new argument LIMIT. Set it + when using a prefix argument. + (vc-print-log-internal): Add new argument LIMIT. + + * vc-svn.el (vc-svn-print-log): + * vc-mtn.el (vc-mtn-print-log): + * vc-hg.el (vc-hg-print-log): + * vc-bzr.el (vc-bzr-print-log): Add new optional argument LIMIT, + pass it to the log command when set. Make the BUFFER argument + non-optional. + + * vc-sccs.el (vc-sccs-print-log): + * vc-rcs.el (vc-rcs-print-log): + * vc-git.el (vc-git-print-log): + * vc-cvs.el (vc-cvs-print-log): Add new optional argument LIMIT, + ignore it. Make the BUFFER argument non-optional + * bindings.el (mode-line-buffer-identification): Do not purecopy. 2009-11-15 Chong Yidong diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-bzr.el --- a/lisp/vc-bzr.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-bzr.el Sun Nov 15 20:28:58 2009 +0000 @@ -481,7 +481,7 @@ (2 'change-log-email)) ("^ *timestamp: \\(.*\\)" (1 'change-log-date-face))))))) -(defun vc-bzr-print-log (files &optional buffer shortlog) ; get buffer arg in Emacs 22 +(defun vc-bzr-print-log (files buffer &optional shortlog limit) "Get bzr change log for FILES into specified BUFFER." ;; `vc-do-command' creates the buffer, but we need it before running ;; the command. @@ -493,7 +493,8 @@ ;; way of getting the above regexps working. (with-current-buffer buffer (apply 'vc-bzr-command "log" buffer 'async files - (if shortlog "--short") + (when shortlog "--short") + (when limit (list "-l" (format "%s" limit))) (if (stringp vc-bzr-log-switches) (list vc-bzr-log-switches) vc-bzr-log-switches)))) diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-cvs.el --- a/lisp/vc-cvs.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-cvs.el Sun Nov 15 20:28:58 2009 +0000 @@ -496,7 +496,7 @@ (declare-function vc-rcs-print-log-cleanup "vc-rcs" ()) -(defun vc-cvs-print-log (files &optional buffer shortlog) +(defun vc-cvs-print-log (files buffer &optional shortlog limit) "Get change logs associated with FILES." (require 'vc-rcs) ;; It's just the catenation of the individual logs. diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-git.el --- a/lisp/vc-git.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-git.el Sun Nov 15 20:28:58 2009 +0000 @@ -77,7 +77,7 @@ ;; - merge-news (file) see `merge' ;; - steal-lock (file &optional revision) NOT NEEDED ;; HISTORY FUNCTIONS -;; * print-log (files &optional buffer shortlog) OK +;; * print-log (files buffer &optional shortlog limit) OK ;; - log-view-mode () OK ;; - show-log-entry (revision) OK ;; - comment-history (file) ?? @@ -508,7 +508,7 @@ ;;; HISTORY FUNCTIONS -(defun vc-git-print-log (files &optional buffer shortlog) +(defun vc-git-print-log (files buffer &optional shortlog limit) "Get change log associated with FILES." (let ((coding-system-for-read git-commits-coding-system)) ;; `vc-do-command' creates the buffer, but we need it before running diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-hg.el --- a/lisp/vc-hg.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-hg.el Sun Nov 15 20:28:58 2009 +0000 @@ -68,7 +68,7 @@ ;; - merge-news (file) NEEDED ;; - steal-lock (file &optional revision) NOT NEEDED ;; HISTORY FUNCTIONS -;; * print-log (files &optional buffer shortlog)OK +;; * print-log (files buffer &optional shortlog) OK ;; - log-view-mode () OK ;; - show-log-entry (revision) NOT NEEDED, DEFAULT IS GOOD ;; - comment-history (file) NOT NEEDED @@ -219,12 +219,8 @@ (repeat :tag "Argument List" :value ("") string)) :group 'vc-hg) -(defun vc-hg-print-log (files &optional buffer shortlog) +(defun vc-hg-print-log (files buffer &optional shortlog limit) "Get change log associated with FILES." - ;; `log-view-mode' needs to have the file names in order to function - ;; correctly. "hg log" does not print it, so we insert it here by - ;; hand. - ;; `vc-do-command' creates the buffer, but we need it before running ;; the command. (vc-setup-buffer buffer) @@ -234,9 +230,10 @@ (with-current-buffer buffer (apply 'vc-hg-command buffer 0 files "log" - (if shortlog - (append '("--style" "compact") vc-hg-log-switches) - vc-hg-log-switches))))) + (append + (when limit (list "-l" (format "%s" limit))) + (when shortlog '("--style" "compact")) + vc-hg-log-switches))))) (defvar log-view-message-re) (defvar log-view-file-re) diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-mtn.el --- a/lisp/vc-mtn.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-mtn.el Sun Nov 15 20:28:58 2009 +0000 @@ -188,8 +188,9 @@ ;; (defun vc-mtn-roolback (files) ;; ) -(defun vc-mtn-print-log (files &optional buffer shortlog) - (vc-mtn-command buffer 0 files "log")) +(defun vc-mtn-print-log (files buffer &optional shortlog limit) + (apply 'vc-mtn-command buffer 0 files "log" + (when limit (list "--last" (format "%s" limit))))) (defvar log-view-message-re) (defvar log-view-file-re) diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-rcs.el --- a/lisp/vc-rcs.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-rcs.el Sun Nov 15 20:28:58 2009 +0000 @@ -559,7 +559,7 @@ (when (looking-at "[\b\t\n\v\f\r ]+") (delete-char (- (match-end 0) (match-beginning 0)))))) -(defun vc-rcs-print-log (files &optional buffer shortlog) +(defun vc-rcs-print-log (files buffer &optional shortlog limit) "Get change log associated with FILE. If FILE is a directory the operation is applied to all registered files beneath it." (vc-do-command (or buffer "*vc*") 0 "rlog" (mapcar 'vc-name (vc-expand-dirs files))) diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-sccs.el --- a/lisp/vc-sccs.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-sccs.el Sun Nov 15 20:28:58 2009 +0000 @@ -335,7 +335,7 @@ ;;; History functions ;;; -(defun vc-sccs-print-log (files &optional buffer shortlog) +(defun vc-sccs-print-log (files buffer &optional shortlog limit) "Get change log associated with FILES." (setq files (vc-expand-dirs files)) (vc-sccs-do-command buffer 0 "prs" (mapcar 'vc-name files))) diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc-svn.el --- a/lisp/vc-svn.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc-svn.el Sun Nov 15 20:28:58 2009 +0000 @@ -462,7 +462,7 @@ (require 'add-log) (set (make-local-variable 'log-view-per-file-logs) nil)) -(defun vc-svn-print-log (files &optional buffer shortlog) +(defun vc-svn-print-log (files buffer &optional shortlog limit) "Get change log(s) associated with FILES." (save-current-buffer (vc-setup-buffer buffer) @@ -471,7 +471,8 @@ (if files (dolist (file files) (insert "Working file: " file "\n") - (vc-svn-command + (apply + 'vc-svn-command buffer 'async ;; (if (and (= (length files) 1) (vc-stay-local-p file 'SVN)) 'async 0) @@ -481,9 +482,11 @@ ;; working revision, whereas we also want the log of the ;; subsequent commits. At least that's what the ;; vc-cvs.el code does. - "-rHEAD:0")) + "-rHEAD:0" + (when limit (list "-l" (format "%s" limit))))) ;; Dump log for the entire directory. - (vc-svn-command buffer 0 nil "log" "-rHEAD:0"))))) + (apply vc-svn-command buffer 0 nil "log" "-rHEAD:0" + (when limit (list "-l" (format "%s" limit)))))))) (defun vc-svn-diff (files &optional oldvers newvers buffer) "Get a difference report using SVN between two revisions of fileset FILES." diff -r 42cdafa98c50 -r 2bed02fa3041 lisp/vc.el --- a/lisp/vc.el Sun Nov 15 20:25:55 2009 +0000 +++ b/lisp/vc.el Sun Nov 15 20:28:58 2009 +0000 @@ -333,12 +333,11 @@ ;; ;; HISTORY FUNCTIONS ;; -;; * print-log (files &optional buffer shortlog) +;; * print-log (files buffer &optional shortlog limit) ;; -;; Insert the revision log for FILES into BUFFER, or the *vc* buffer -;; if BUFFER is nil. (Note: older versions of this function expected -;; only a single file argument.) +;; Insert the revision log for FILES into BUFFER. ;; If SHORTLOG is true insert a short version of the log. +;; If LIMIT is true insert only insert LIMIT log entries. ;; ;; - log-view-mode () ;; @@ -695,6 +694,13 @@ :type '(choice (const :tag "Work out" nil) (const yes) (const no)) :group 'vc) +(defcustom vc-log-show-limit 0 + "Limit the number of items shown by the VC log commands. +Zero means unlimited. +Not all VC backends are able to support this feature." + :type 'integer + :group 'vc) + (defcustom vc-allow-async-revert nil "Specifies whether the diff during \\[vc-revert] may be asynchronous. Enabling this option means that you can confirm a revert operation even @@ -1839,7 +1845,7 @@ If it contains `file' then show short logs for files. Not all VC backends support short logs!") -(defun vc-print-log-internal (backend files working-revision) +(defun vc-print-log-internal (backend files working-revision limit) ;; Don't switch to the output buffer before running the command, ;; so that any buffer-local settings in the vc-controlled ;; buffer can be accessed by the command. @@ -1852,7 +1858,7 @@ (not (null (if dir-present (memq 'directory vc-log-short-style) (memq 'file vc-log-short-style))))) - (vc-call-backend backend 'print-log files "*vc-change-log*" vc-short-log) + (vc-call-backend backend 'print-log files "*vc-change-log*" vc-short-log limit) (pop-to-buffer "*vc-change-log*") (vc-exec-after `(let ((inhibit-read-only t) @@ -1868,20 +1874,45 @@ (set-buffer-modified-p nil))))) ;;;###autoload -(defun vc-print-log (&optional working-revision) +(defun vc-print-log (&optional working-revision limit) "List the change log of the current fileset in a window. If WORKING-REVISION is non-nil, leave the point at that revision." - (interactive) + (interactive + (cond + (current-prefix-arg + (let ((rev (read-from-minibuffer "Log from revision (default: last revision): " nil + nil nil nil)) + (lim (string-to-number + (read-from-minibuffer + "Limit display (unlimited: 0): " + (format "%s" vc-log-show-limit) + nil nil nil)))) + (when (string= rev "") (setq rev nil)) + (when (<= lim 0) (setq lim nil)) + (list rev lim))) + (t + (list nil nil)))) (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef (backend (car vc-fileset)) (files (cadr vc-fileset)) (working-revision (or working-revision (vc-working-revision (car files))))) - (vc-print-log-internal backend files working-revision))) + (vc-print-log-internal backend files working-revision limit))) ;;;###autoload -(defun vc-print-root-log () +(defun vc-print-root-log (&optional limit) "List the change log of for the current VC controlled tree in a window." - (interactive) + (interactive + (cond + (current-prefix-arg + (let ((lim (string-to-number + (read-from-minibuffer + "Limit display (unlimited: 0): " + (format "%s" vc-log-show-limit) + nil nil nil)))) + (when (<= lim 0) (setq lim nil)) + (list lim))) + (t + (list nil)))) (let ((backend (cond ((derived-mode-p 'vc-dir-mode) vc-dir-backend) (vc-mode (vc-backend buffer-file-name)))) @@ -1890,7 +1921,7 @@ (error "Buffer is not version controlled")) (setq rootdir (vc-call-backend backend 'root default-directory)) (setq working-revision (vc-working-revision rootdir)) - (vc-print-log-internal backend (list rootdir) working-revision))) + (vc-print-log-internal backend (list rootdir) working-revision limit))) ;;;###autoload (defun vc-revert ()