(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))
(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))
;; - 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
(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
(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"
(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.")
;; 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)
;;
(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.
(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.
;; 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)