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." for the Git command to run."
(vc-git--pushpull "push" prompt nil)) (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 () (defun vc-git-merge-branch ()
"Merge changes into the current Git branch. "Merge changes into the current Git branch.
This prompts for a branch to merge from." 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") (interactive "P")
(let* ((vc-fileset (vc-deduce-fileset t)) (let* ((vc-fileset (vc-deduce-fileset t))
(backend (car vc-fileset))) (backend (car vc-fileset)))
(if (vc-find-backend-function backend 'pull-and-push) (if (vc-find-backend-function backend 'pull)
(vc-call-backend backend 'pull-and-push arg) (let ((proc (vc-call-backend backend 'pull arg)))
(user-error "VC pull-and-push is unsupported for `%s'" backend)))) (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) (defun vc-version-backup-file (file &optional rev)
"Return name of backup file for revision REV of FILE. "Return name of backup file for revision REV of FILE.