From: Sean Whitton Date: Fri, 6 Jun 2025 08:53:32 +0000 (+0100) Subject: VC: Deprecate log-incoming and log-outgoing backend functions X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2a19e802c945a3d668688d037dde34af3c470f7f;p=emacs.git VC: Deprecate log-incoming and log-outgoing backend functions * lisp/vc/vc-git.el (vc-git-incoming-revision): Inline vc-git--fetch-incoming. (vc-git--fetch-incoming, vc-git-log-incoming) (vc-git-log-outgoing): Delete. * lisp/vc/vc-hg.el (vc-hg-mergebase): * lisp/vc/vc.el (vc-default-log-incoming) (vc-default-log-outgoing): New functions. * lisp/vc/vc.el: * etc/NEWS: Document the deprecation. (cherry picked from commit ac4869c71293c28f861f306420f5d0620cf3a7cc) --- diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index f4a1978a40b..1a4db1320e5 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -816,6 +816,7 @@ If LIMIT is non-nil, show no more than this many entries." (indent-region (match-end 0) (point-max) 2) (buffer-substring (match-end 0) (point-max))))) +;; FIXME: Implement `vc-bzr-mergebase' and then delete this. (defun vc-bzr-log-incoming (buffer remote-location) (apply #'vc-bzr-command "missing" buffer 'async nil (list "--theirs-only" (and (not (string-empty-p remote-location)) @@ -832,6 +833,7 @@ If LIMIT is non-nil, show no more than this many entries." (and (re-search-forward "^revision-id: " nil t) (buffer-substring (point) (pos-eol))))) +;; FIXME: Implement `vc-bzr-mergebase' and then delete this. (defun vc-bzr-log-outgoing (buffer remote-location) (apply #'vc-bzr-command "missing" buffer 'async nil (list "--mine-only" (and (not (string-empty-p remote-location)) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index c6e95ccd973..4409af63041 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -70,8 +70,7 @@ ;; - get-change-comment (files rev) OK ;; HISTORY FUNCTIONS ;; * print-log (files buffer &optional shortlog start-revision limit) OK -;; * log-outgoing (buffer remote-location) OK -;; * log-incoming (buffer remote-location) OK +;; * incoming-revision (remote-location) OK ;; - log-search (buffer pattern) OK ;; - log-view-mode () OK ;; - show-log-entry (revision) OK @@ -1577,41 +1576,12 @@ If LIMIT is a revision string, use it as an end-revision." (list "-p")) '("--"))))))) -(defun vc-git-log-outgoing (buffer remote-location) - (vc-setup-buffer buffer) - (apply #'vc-git-command buffer 'async nil - `("log" - "--no-color" "--graph" "--decorate" "--date=short" - ,(format "--pretty=tformat:%s" (car vc-git-root-log-format)) - "--abbrev-commit" - ,@(ensure-list vc-git-shortlog-switches) - ,(concat (if (string-empty-p remote-location) - "@{upstream}" - remote-location) - "..HEAD")))) - -(defun vc-git--fetch-incoming (remote-location) +(defun vc-git-incoming-revision (remote-location) (vc-git-command nil 0 nil "fetch" (and (not (string-empty-p remote-location)) ;; Extract remote from "remote/branch". (replace-regexp-in-string "/.*" "" - remote-location)))) - -(defun vc-git-log-incoming (buffer remote-location) - (vc-setup-buffer buffer) - (vc-git--fetch-incoming remote-location) - (apply #'vc-git-command buffer 'async nil - `("log" - "--no-color" "--graph" "--decorate" "--date=short" - ,(format "--pretty=tformat:%s" (car vc-git-root-log-format)) - "--abbrev-commit" - ,@(ensure-list vc-git-shortlog-switches) - ,(concat "HEAD.." (if (string-empty-p remote-location) - "@{upstream}" - remote-location))))) - -(defun vc-git-incoming-revision (remote-location) - (vc-git--fetch-incoming remote-location) + remote-location))) (ignore-errors ; in order to return nil if no such branch (with-output-to-string (vc-git-command standard-output 0 nil diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index e1527935861..04a85fadd92 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -1458,6 +1458,7 @@ This runs the command \"hg summary\"." (nreverse result)) "\n")))) +;; FIXME: Resolve issue with `vc-hg-mergebase' and then delete this. (defun vc-hg-log-incoming (buffer remote-location) (vc-setup-buffer buffer) (vc-hg-command buffer 1 nil "incoming" "-n" @@ -1475,12 +1476,23 @@ This runs the command \"hg summary\"." (and (not (string-empty-p output)) output))) +;; FIXME: Resolve issue with `vc-hg-mergebase' and then delete this. (defun vc-hg-log-outgoing (buffer remote-location) (vc-setup-buffer buffer) (vc-hg-command buffer 1 nil "outgoing" "-n" (and (not (string-empty-p remote-location)) remote-location))) +;; FIXME: This works only when both rev1 and rev2 have already been pulled. +;; That means it can't do the work +;; `vc-default-log-incoming' and `vc-default-log-outgoing' need it to do. +(defun vc-hg-mergebase (rev1 &optional rev2) + (or (vc-hg--run-log "{node}" + (format "last(ancestors(%s) and ancestors(%s))" + rev1 (or rev2 "tip")) + nil) + (error "No common ancestor for merge base"))) + (defvar vc-hg-error-regexp-alist '(("^M \\(.+\\)" 1 nil nil 0)) "Value of `compilation-error-regexp-alist' in *vc-hg* buffers.") diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 44b309e784c..c55b268867d 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -344,15 +344,17 @@ ;; revision shown, rather than the working revision, which is normally ;; the case). Not all backends support this. ;; -;; * log-outgoing (buffer remote-location) +;; - log-outgoing (buffer remote-location) (DEPRECATED) ;; ;; Insert in BUFFER the revision log for the changes that will be ;; sent when performing a push operation to REMOTE-LOCATION. +;; Deprecated: implement incoming-revision and mergebase instead. ;; -;; * log-incoming (buffer remote-location) +;; - log-incoming (buffer remote-location) (DEPRECATED) ;; ;; Insert in BUFFER the revision log for the changes that will be ;; received when performing a pull operation from REMOTE-LOCATION. +;; Deprecated: implement incoming-revision and mergebase instead. ;; ;; * incoming-revision (remote-location) ;; @@ -3247,6 +3249,16 @@ In some version control systems REMOTE-LOCATION can be a remote branch name." (vc-incoming-outgoing-internal backend (or remote-location "") "*vc-incoming*" 'log-incoming))) +(defun vc-default-log-incoming (_backend buffer remote-location) + (vc--with-backend-in-rootdir "" + (let ((incoming (or (vc-call-backend backend + 'incoming-revision + remote-location) + (user-error "No incoming revision -- local-only branch?")))) + (vc-call-backend backend 'print-log (list rootdir) buffer t + (vc-call-backend backend 'mergebase incoming) + incoming)))) + ;;;###autoload (defun vc-log-outgoing (&optional remote-location) "Show log of changes that will be sent with a push operation to REMOTE-LOCATION. @@ -3259,6 +3271,16 @@ In some version control systems REMOTE-LOCATION can be a remote branch name." (vc-incoming-outgoing-internal backend (or remote-location "") "*vc-outgoing*" 'log-outgoing))) +(defun vc-default-log-outgoing (_backend buffer remote-location) + (vc--with-backend-in-rootdir "" + (let ((incoming (or (vc-call-backend backend + 'incoming-revision + remote-location) + (user-error "No incoming revision -- local-only branch?")))) + (vc-call-backend backend 'print-log (list rootdir) buffer t + (vc-call-backend backend 'mergebase incoming) + "")))) + ;;;###autoload (defun vc-log-search (pattern) "Search the VC log of changes for PATTERN and show log of matching changes. diff --git a/test/lisp/vc/vc-tests/vc-tests.el b/test/lisp/vc/vc-tests/vc-tests.el index 632a6a792bd..e8aaa070018 100644 --- a/test/lisp/vc/vc-tests/vc-tests.el +++ b/test/lisp/vc/vc-tests/vc-tests.el @@ -69,8 +69,8 @@ ;; HISTORY FUNCTIONS ;; ;; * print-log (files buffer &optional shortlog start-revision limit) -;; * log-outgoing (backend remote-location) -;; * log-incoming (backend remote-location) +;; - log-outgoing (backend remote-location) +;; - log-incoming (backend remote-location) ;; - log-view-mode () ;; - show-log-entry (revision) ;; - comment-history (file)