Function: cvs-tree-merge
cvs-tree-merge is a byte-compiled function defined in
cvs-status.el.gz.
Signature
(cvs-tree-merge TREE1 TREE2)
Documentation
Merge tags trees TREE1 and TREE2 into one.
BEWARE: because of stability issues, this is not a symmetric operation.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/cvs-status.el.gz
(defun cvs-tree-merge (tree1 tree2)
"Merge tags trees TREE1 and TREE2 into one.
BEWARE: because of stability issues, this is not a symmetric operation."
(cl-assert (and (listp tree1) (listp tree2)))
(cond
((null tree1) tree2)
((null tree2) tree1)
(t
(let* ((rev1 (car tree1))
(tag1 (cvs-car rev1))
(vl1 (cvs-tag->vlist tag1))
(l1 (length vl1))
(rev2 (car tree2))
(tag2 (cvs-car rev2))
(vl2 (cvs-tag->vlist tag2))
(l2 (length vl2)))
(cond
((= l1 l2)
(pcase (cvs-tag-compare tag1 tag2)
('more1 (cons rev2 (cvs-tree-merge tree1 (cdr tree2))))
('more2 (cons rev1 (cvs-tree-merge (cdr tree1) tree2)))
('equal
(cons (cons (cvs-tag-merge tag1 tag2)
(cvs-tree-merge (cvs-cdr rev1) (cvs-cdr rev2)))
(cvs-tree-merge (cdr tree1) (cdr tree2))))))
((> l1 l2)
(cvs-tree-merge
(list (cons (cvs-tag-make (butlast vl1)) tree1)) tree2))
((< l1 l2)
(cvs-tree-merge
tree1 (list (cons (cvs-tag-make (butlast vl2)) tree2)))))))))