Function: vc-cvs-merge-news
vc-cvs-merge-news is a byte-compiled function defined in vc-cvs.el.gz.
Signature
(vc-cvs-merge-news FILE)
Documentation
Merge in any new changes made to FILE.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/vc-cvs.el.gz
(defun vc-cvs-merge-news (file)
"Merge in any new changes made to FILE."
(message "Merging changes into %s..." file)
;; (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time 0)
(vc-cvs-command nil nil file "update")
;; Analyze the merge result reported by CVS, and set
;; file properties accordingly.
(with-current-buffer "*vc*"
(goto-char (point-min))
;; get new working revision
(if (re-search-forward
"^Merging differences between [0-9.]* and \\([0-9.]*\\) into" nil t)
(vc-file-setprop file 'vc-working-revision (match-string 1))
(vc-file-setprop file 'vc-working-revision nil))
;; get file status
(prog1
(if (eq (buffer-size) 0)
0 ;; there were no news; indicate success
(if (re-search-forward
(concat "^\\([CMUP] \\)?"
(regexp-quote
(substring file (1+ (length (expand-file-name
"." default-directory)))))
"\\( already contains the differences between \\)?")
nil t)
(cond
;; Merge successful, we are in sync with repository now
((or (match-string 2)
(string= (match-string 1) "U ")
(string= (match-string 1) "P "))
(vc-file-setprop file 'vc-state 'up-to-date)
(vc-file-setprop file 'vc-checkout-time
(file-attribute-modification-time
(file-attributes file)))
0);; indicate success to the caller
;; Merge successful, but our own changes are still in the file
((string= (match-string 1) "M ")
(vc-file-setprop file 'vc-state 'edited)
0);; indicate success to the caller
;; Conflicts detected!
(t
(vc-file-setprop file 'vc-state 'conflict)
1);; signal the error to the caller
)
(pop-to-buffer "*vc*")
(error "Couldn't analyze cvs update result")))
(message "Merging changes into %s...done" file))))