Make ‘vc-revert’ work with the current client

This commit is contained in:
Tom Willemse 2021-01-22 21:58:40 -08:00
parent a60278efa7
commit a535c47e93
2 changed files with 30 additions and 14 deletions

View file

@ -459,7 +459,7 @@ value with `-m'; if S-VAL is non-nil, pass that value with `-s'."
;; DO need to support diffing a single file. ;; DO need to support diffing a single file.
;; Do NOT need to support diffing multiple files. ;; Do NOT need to support diffing multiple files.
(defun p4-lowlevel-diff (files &optional rev buffer) (cl-defun p4-lowlevel-diff (files &key rev buffer client)
"Run `p4 diff' on FILE at revision REV and return a buffer "Run `p4 diff' on FILE at revision REV and return a buffer
containing the results. REV is in the syntax described by `p4 help containing the results. REV is in the syntax described by `p4 help
revisions'. If REV is nil, compare the client's sync'd revision to revisions'. If REV is nil, compare the client's sync'd revision to
@ -478,13 +478,14 @@ that buffer."
(let* ((file-specs (if rev (let* ((file-specs (if rev
(mapcar (lambda (file) (concat file rev)) files) (mapcar (lambda (file) (concat file rev)) files)
files)) files))
(diff-args (append (list "diff") p4-lowlevel-diff-switches (client-args (if client (list "-c" client)))
(diff-args (append client-args (list "diff") p4-lowlevel-diff-switches
(list "-f" "-t") file-specs)) (list "-f" "-t") file-specs))
(buffer (p4-lowlevel-command-into-buffer diff-args (buffer (p4-lowlevel-command-into-buffer diff-args
(or buffer "diff")))) (or buffer "diff"))))
buffer)) buffer))
(defun p4-lowlevel-diff-s (file flag &key client) (cl-defun p4-lowlevel-diff-s (file flag &key client)
"Run `p4 diff -s' on FILE, using FLAG as the argument to `-s', and "Run `p4 diff -s' on FILE, using FLAG as the argument to `-s', and
return a list of the matching files." return a list of the matching files."
(p4-lowlevel-items-matching-tag (p4-lowlevel-items-matching-tag
@ -501,7 +502,7 @@ return a list of the matching files."
;; DO need to support "-t" (in fact, need to specify it all the time). ;; DO need to support "-t" (in fact, need to specify it all the time).
;; Do NOT need to support "-b". ;; Do NOT need to support "-b".
(defun p4-lowlevel-diff2 (file1 file2 &optional rev1 rev2 buffer) (cl-defun p4-lowlevel-diff2 (file1 file2 &key rev1 rev2 buffer client)
"Run `p4 diff2' on FILE and FILE2 and return a buffer containing the "Run `p4 diff2' on FILE and FILE2 and return a buffer containing the
results. If optional REV1 and/or REV2 are non-nil, they specify the results. If optional REV1 and/or REV2 are non-nil, they specify the
revisions to diff in the syntax described by `p4 help revisions'. If revisions to diff in the syntax described by `p4 help revisions'. If
@ -511,7 +512,8 @@ optional BUFFER is non-nil, output goes in that buffer. Uses
rev2 (p4-lowlevel-canonicalize-revision rev2)) rev2 (p4-lowlevel-canonicalize-revision rev2))
(let* ((file1-spec (if rev1 (concat file1 rev1) file1)) (let* ((file1-spec (if rev1 (concat file1 rev1) file1))
(file2-spec (if rev2 (concat file2 rev2) file2)) (file2-spec (if rev2 (concat file2 rev2) file2))
(diff-args (append (list "diff2") p4-lowlevel-diff-switches (client-args (if client (list "-c" client)))
(diff-args (append client-args (list "diff2") p4-lowlevel-diff-switches
(list "-t" file1-spec file2-spec))) (list "-t" file1-spec file2-spec)))
(buffer (p4-lowlevel-command-into-buffer diff-args (buffer (p4-lowlevel-command-into-buffer diff-args
(or buffer "diff")))) (or buffer "diff"))))
@ -614,7 +616,7 @@ files, then returns a list of lists of field-name/value elements."
info-alist (cons (cons tag value) info-alist)))) info-alist (cons (cons tag value) info-alist))))
(nreverse info-alist))) (nreverse info-alist)))
(defun p4-lowlevel-print (file &optional rev output-format quiet) (cl-defun p4-lowlevel-print (file &key rev output-format quiet client)
"Retrieve the contents of FILE using `p4 print'. "Retrieve the contents of FILE using `p4 print'.
If optional REV is non-nil, retrieve that revision, which should be in If optional REV is non-nil, retrieve that revision, which should be in
the syntax described by `p4 help revisions'. Optional OUTPUT-FORMAT the syntax described by `p4 help revisions'. Optional OUTPUT-FORMAT
@ -623,7 +625,8 @@ QUIET is non-nil, then the `-q' flag is passed to `p4 print'."
(setq rev (p4-lowlevel-canonicalize-revision rev)) (setq rev (p4-lowlevel-canonicalize-revision rev))
(let* ((fullfile (if rev (concat file rev) file)) (let* ((fullfile (if rev (concat file rev) file))
(quiet-args (if quiet (list "-q"))) (quiet-args (if quiet (list "-q")))
(args (append (list "print") quiet-args (list fullfile)))) (client-args (if client (list "-c" client)))
(args (append client-args (list "print") quiet-args (list fullfile))))
(p4-lowlevel-command-or-error args nil output-format))) (p4-lowlevel-command-or-error args nil output-format)))
;; Here's what we need to support from the "p4 reopen" command, at least for the ;; Here's what we need to support from the "p4 reopen" command, at least for the

View file

@ -290,7 +290,11 @@ administered by Perforce."
file))))) file)))))
(defun vc-p4-find-version (file rev buffer) (defun vc-p4-find-version (file rev buffer)
(p4-lowlevel-print file rev buffer t)) (p4-lowlevel-print file
:rev rev
:output-format buffer
:quiet t
:client vc-p4-client))
(defun vc-p4-checkin (files rev comment) (defun vc-p4-checkin (files rev comment)
"Check FILES into Perforce. Error if REV is non-nil. Check in with "Check FILES into Perforce. Error if REV is non-nil. Check in with
@ -520,6 +524,8 @@ files under the default directory otherwise."
((stringp buff) (get-buffer-create buff)) ((stringp buff) (get-buffer-create buff))
(t (get-buffer-create "*vc-diff*")))) (t (get-buffer-create "*vc-diff*"))))
(files (if (atom file-or-files) (list file-or-files) file-or-files)) (files (if (atom file-or-files) (list file-or-files) file-or-files))
(vc-p4-client (with-current-buffer (find-file (car files))
vc-p4-client))
(inhibit-read-only t)) (inhibit-read-only t))
(cond (cond
((and (null rev1) (null rev2)) ((and (null rev1) (null rev2))
@ -554,7 +560,10 @@ files under the default directory otherwise."
file)))) file))))
(dolist (file deleted) (dolist (file deleted)
(with-temp-buffer (with-temp-buffer
(p4-lowlevel-print file nil (current-buffer) :quiet) (p4-lowlevel-print file
:output-format (current-buffer)
:quiet t
:client vc-p4-client)
(goto-char (point-min)) (goto-char (point-min))
(while (search-forward-regexp "^text: " nil t) (while (search-forward-regexp "^text: " nil t)
(replace-match "" nil nil)) (replace-match "" nil nil))
@ -580,7 +589,7 @@ files under the default directory otherwise."
(let (temp-buffer) (let (temp-buffer)
(unwind-protect (unwind-protect
(progn (progn
(setq temp-buffer (p4-lowlevel-diff modified)) (setq temp-buffer (p4-lowlevel-diff modified :client vc-p4-client))
(insert-buffer-substring temp-buffer)) (insert-buffer-substring temp-buffer))
(when (buffer-live-p temp-buffer) (when (buffer-live-p temp-buffer)
(kill-buffer temp-buffer)))))))) (kill-buffer temp-buffer))))))))
@ -596,12 +605,16 @@ files under the default directory otherwise."
(cond (cond
((and (not rev1) rev2) ((and (not rev1) rev2)
(p4-lowlevel-diff2 file file (p4-lowlevel-diff2 file file
(vc-file-getprop file 'vc-workfile-version) :rev1 (vc-file-getprop file 'vc-workfile-version)
rev2)) :rev2 rev2
:client vc-p4-client))
((and rev1 rev2) ((and rev1 rev2)
(p4-lowlevel-diff2 file file rev1 rev2)) (p4-lowlevel-diff2 file file
:rev1 rev1
:rev2 rev2
:client vc-p4-client))
((and rev1 (not rev2)) ((and rev1 (not rev2))
(p4-lowlevel-diff file rev1)))) (p4-lowlevel-diff file :rev rev1 :client vc-p4-client))))
(insert-buffer-substring temp-buffer) (insert-buffer-substring temp-buffer)
(kill-buffer temp-buffer)))))) (kill-buffer temp-buffer))))))