Generalize vc-pull-and-push to support more backends (bug#60569)

* lisp/vc/vc-git.el (vc-git-pull-and-push): Remove and move its logic to
vc-pull-and-push.

* lisp/vc/vc.el (vc-pull-and-push): Add code from vc-git-pull-and-push.
This commit is contained in:
Juri Linkov 2023-01-22 19:27:10 +02:00
parent 846838dbab
commit 2343a067c3
2 changed files with 14 additions and 22 deletions

View file

@ -1182,25 +1182,6 @@ Normally, this runs \"git push\". If PROMPT is non-nil, prompt
for the Git command to run."
(vc-git--pushpull "push" prompt nil))
(defun vc-git-pull-and-push (prompt)
"Pull changes into the current Git branch, and then push.
The push will only be performed if the pull was successful.
Normally, this runs \"git pull\". If PROMPT is non-nil, prompt
for the Git command to run."
(let ((proc (vc-git--pushpull "pull" prompt '("--stat"))))
(when (process-buffer proc)
(with-current-buffer (process-buffer proc)
(if (and (eq (process-status proc) 'exit)
(zerop (process-exit-status proc)))
(let ((vc--inhibit-async-window t))
(vc-git-push nil))
(vc-exec-after
(lambda ()
(let ((vc--inhibit-async-window t))
(vc-git-push nil)))
proc))))))
(defun vc-git-merge-branch ()
"Merge changes into the current Git branch.
This prompts for a branch to merge from."

View file

@ -3071,9 +3071,20 @@ It also signals an error in a Bazaar bound branch."
(interactive "P")
(let* ((vc-fileset (vc-deduce-fileset t))
(backend (car vc-fileset)))
(if (vc-find-backend-function backend 'pull-and-push)
(vc-call-backend backend 'pull-and-push arg)
(user-error "VC pull-and-push is unsupported for `%s'" backend))))
(if (vc-find-backend-function backend 'pull)
(let ((proc (vc-call-backend backend 'pull arg)))
(when (and (processp proc) (process-buffer proc))
(with-current-buffer (process-buffer proc)
(if (and (eq (process-status proc) 'exit)
(zerop (process-exit-status proc)))
(let ((vc--inhibit-async-window t))
(vc-push arg))
(vc-exec-after
(lambda ()
(let ((vc--inhibit-async-window t))
(vc-push arg)))
proc)))))
(user-error "VC pull is unsupported for `%s'" backend))))
(defun vc-version-backup-file (file &optional rev)
"Return name of backup file for revision REV of FILE.