annotate lisp/cvs-status.el @ 56905:661d52db56de

(isearch-toggle-regexp): Set `isearch-success' and `isearch-adjusted' to `t'. (isearch-toggle-case-fold): Set `isearch-success' to `t'. (isearch-message-prefix): Add "pending" for isearch-adjusted. (isearch-other-meta-char): Restore isearch-point unconditionally. (isearch-query-replace): Add new arg `regexp-flag' and use it. Set point to start of match if region is not active in transient mark mode (to include the current match to region boundaries). Push the search string to `query-replace-from-history-variable'. Add prompt "Query replace regexp" for isearch-regexp. Add region beginning/end as last arguments of `perform-replace.' (isearch-query-replace-regexp): Replace code by the call to `isearch-query-replace' with arg `t'.
author Juri Linkov <juri@jurta.org>
date Fri, 03 Sep 2004 20:32:57 +0000
parents ba72d48889b4
children 4d0805441612 d8411455de48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
1 ;;; cvs-status.el --- major mode for browsing `cvs status' output -*- coding: utf-8 -*-
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
54579
5133c27cc4f0 (cvs-tree-use-jisx0208): Use char-displayable-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
3 ;; Copyright (C) 1999, 2000, 03, 2004 Free Software Foundation, Inc.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5 ;; Author: Stefan Monnier <monnier@cs.yale.edu>
42557
c450330ea833 Add keyword header `tools' to actually get listed in finder.
Pavel Janík <Pavel@Janik.cz>
parents: 42217
diff changeset
6 ;; Keywords: pcl-cvs cvs status tree tools
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; any later version.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; GNU General Public License for more details.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 ;;; Commentary:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27 ;; Todo:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 ;; - Somehow allow cvs-status-tree to work on-the-fly
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;;; Code:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 (eval-when-compile (require 'cl))
56752
ba72d48889b4 Require pcvs during byte-compiling for
Andreas Schwab <schwab@suse.de>
parents: 56750
diff changeset
34 (eval-when-compile (require 'pcvs))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 (require 'pcvs-util)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 ;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 (defgroup cvs-status nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 "Major mode for browsing `cvs status' output."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 :group 'pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 :prefix "cvs-status-")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 (easy-mmode-defmap cvs-status-mode-map
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 '(("n" . next-line)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46 ("p" . previous-line)
28249
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
47 ("N" . cvs-status-next)
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
48 ("P" . cvs-status-prev)
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
49 ("\M-n" . cvs-status-next)
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
50 ("\M-p" . cvs-status-prev)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 ("t" . cvs-status-cvstrees)
56750
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
52 ("T" . cvs-status-trees)
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
53 (">" . cvs-status-checkout))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 "CVS-Status' keymap."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 :group 'cvs-status
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 :inherit 'cvs-mode-map)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 ;;(easy-menu-define cvs-status-menu cvs-status-mode-map
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 ;; "Menu for `cvs-status-mode'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 ;; '("CVS-Status"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 ;; ["Show Tag Trees" cvs-status-tree t]
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 ;; ))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 (defvar cvs-status-mode-hook nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 "Hook run at the end of `cvs-status-mode'.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 (defconst cvs-status-tags-leader-re "^ Existing Tags:$")
31972
5fbecb49e386 (cvs-status-entry-leader-re): Minor fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30887
diff changeset
68 (defconst cvs-status-entry-leader-re
5fbecb49e386 (cvs-status-entry-leader-re): Minor fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30887
diff changeset
69 "^File:\\s-+\\(?:no file \\)?\\(.*\\S-\\)\\s-+Status: \\(.+\\)$")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 (defconst cvs-status-dir-re "^cvs[.ex]* [a-z]+: Examining \\(.+\\)$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 (defconst cvs-status-rev-re "[0-9][.0-9]*\\.[.0-9]*[0-9]")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 (defconst cvs-status-tag-re "[ \t]\\([a-zA-Z][^ \t\n.]*\\)")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 (defconst cvs-status-font-lock-keywords
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 `((,cvs-status-entry-leader-re
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 (1 'cvs-filename-face)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 (2 'cvs-need-action-face))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 (,cvs-status-tags-leader-re
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 (,cvs-status-rev-re
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 (save-excursion (re-search-forward "^\n" nil 'move) (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 (progn (re-search-backward cvs-status-tags-leader-re nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 (forward-line 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 (0 font-lock-comment-face))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 (,cvs-status-tag-re
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 (save-excursion (re-search-forward "^\n" nil 'move) (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
86 (progn (re-search-backward cvs-status-tags-leader-re nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 (forward-line 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 (1 font-lock-function-name-face)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 (defconst cvs-status-font-lock-defaults
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
90 '(cvs-status-font-lock-keywords t nil nil nil (font-lock-multiline . t)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42557
diff changeset
91
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 (put 'cvs-status-mode 'mode-class 'special)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94 ;;;###autoload
28250
3cfb9a01a935 (cvs-status-mode): Use define-derived-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28249
diff changeset
95 (define-derived-mode cvs-status-mode fundamental-mode "CVS-Status"
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 "Mode used for cvs status output."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 (set (make-local-variable 'font-lock-defaults) cvs-status-font-lock-defaults)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 (set (make-local-variable 'cvs-minor-wrap-function) 'cvs-status-minor-wrap))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99
28249
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
100 ;; Define cvs-status-next and cvs-status-prev
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
101 (easy-mmode-define-navigation cvs-status cvs-status-entry-leader-re "entry")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103 (defun cvs-status-current-file ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 (forward-line 1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 (or (re-search-backward cvs-status-entry-leader-re nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107 (re-search-forward cvs-status-entry-leader-re))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108 (let* ((file (match-string 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 (cvsdir (and (re-search-backward cvs-status-dir-re nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 (match-string 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 (pcldir (and (re-search-backward cvs-pcl-cvs-dirchange-re nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 (match-string 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 (dir ""))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 (let ((default-directory ""))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 (when pcldir (setq dir (expand-file-name pcldir dir)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 (when cvsdir (setq dir (expand-file-name cvsdir dir)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117 (expand-file-name file dir)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119 (defun cvs-status-current-tag ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (let ((pt (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 (col (current-column))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 (start (progn (re-search-backward cvs-status-tags-leader-re nil t) (point)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124 (end (progn (re-search-forward "^$" nil t) (point))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125 (when (and (< start pt) (> end pt))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 (goto-char pt)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 (end-of-line)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 (let ((tag nil) (dist pt) (end (point)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 (beginning-of-line)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 (while (re-search-forward cvs-status-tag-re end t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131 (let* ((cole (current-column))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
132 (colb (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 (goto-char (match-beginning 1)) (current-column)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 (ndist (min (abs (- cole col)) (abs (- colb col)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 (when (< ndist dist)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 (setq dist ndist)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137 (setq tag (match-string 1)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138 tag)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 (defun cvs-status-minor-wrap (buf f)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 (let ((data (with-current-buffer buf
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 (cons
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 (cons (cvs-status-current-file)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144 (cvs-status-current-tag))
28857
3ec1142abebd (cvs-status-minor-wrap): Use mark-active.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28250
diff changeset
145 (when mark-active
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 (goto-char (mark))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 (cons (cvs-status-current-file)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 (cvs-status-current-tag))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (let ((cvs-branch-prefix (cdar data))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
151 (cvs-secondary-branch-prefix (and (cdar data) (cddr data)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 (cvs-minor-current-files
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153 (cons (caar data)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 (when (and (cadr data) (not (equal (caar data) (cadr data))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155 (list (cadr data)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 ;; FIXME: I need to force because the fileinfos are UNKNOWN
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 (cvs-force-command "/F"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 (funcall f))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 ;; Tagelt, tag element
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 (defstruct (cvs-tag
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165 (:constructor nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 (:constructor cvs-tag-make
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 (vlist &optional name type))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 (:conc-name cvs-tag->))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 vlist
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170 name
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 type)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 (defsubst cvs-status-vl-to-str (vl) (mapconcat 'number-to-string vl "."))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 (defun cvs-tag->string (tag)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 (if (stringp tag) tag
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177 (let ((name (cvs-tag->name tag))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 (vl (cvs-tag->vlist tag)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 (if (null name) (cvs-status-vl-to-str vl)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180 (let ((rev (if vl (concat " (" (cvs-status-vl-to-str vl) ")") "")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 (if (consp name) (mapcar (lambda (name) (concat name rev)) name)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
182 (concat name rev)))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184 (defun cvs-tag-compare-1 (vl1 vl2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 ((and (null vl1) (null vl2)) 'equal)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 ((null vl1) 'more2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 ((null vl2) 'more1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 (t (let ((v1 (car vl1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 (v2 (car vl2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
191 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192 ((> v1 v2) 'more1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 ((< v1 v2) 'more2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194 (t (cvs-tag-compare-1 (cdr vl1) (cdr vl2))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
196 (defsubst cvs-tag-compare (tag1 tag2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
197 (cvs-tag-compare-1 (cvs-tag->vlist tag1) (cvs-tag->vlist tag2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
199 (defun cvs-tag-merge (tag1 tag2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 "Merge TAG1 and TAG2 into one."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201 (let ((type1 (cvs-tag->type tag1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
202 (type2 (cvs-tag->type tag2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
203 (name1 (cvs-tag->name tag1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
204 (name2 (cvs-tag->name tag2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 (unless (equal (cvs-tag->vlist tag1) (cvs-tag->vlist tag2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 (setf (cvs-tag->vlist tag1) nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
207 (if type1
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
208 (unless (or (not type2) (equal type1 type2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
209 (setf (cvs-tag->type tag1) nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
210 (setf (cvs-tag->type tag1) type2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211 (if name1
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 (setf (cvs-tag->name tag1) (cvs-append name1 name2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
213 (setf (cvs-tag->name tag1) name2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214 tag1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
216 (defun cvs-tree-print (tags printer column)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217 "Print the tree of TAGS where each tag's string is given by PRINTER.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
218 PRINTER should accept both a tag (in which case it should return a string)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219 or a string (in which case it should simply return its argument).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
220 A tag cannot be a CONS. The return value can also be a list of strings,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221 if several nodes where merged into one.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 The tree will be printed no closer than column COLUMN."
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42557
diff changeset
223
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 (let* ((eol (save-excursion (end-of-line) (current-column)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 (column (max (+ eol 2) column)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 (if (null tags) column
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
227 ;;(move-to-column-force column)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
228 (let* ((rev (cvs-car tags))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
229 (name (funcall printer (cvs-car rev)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
230 (rest (append (cvs-cdr name) (cvs-cdr tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
231 (prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
232 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
233 (or (= (forward-line 1) 0) (insert "\n"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
234 (cvs-tree-print rest printer column))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
235 (assert (>= prefix column))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236 (move-to-column prefix t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 (assert (eolp))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
238 (insert (cvs-car name))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239 (dolist (br (cvs-cdr rev))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 (let* ((column (current-column))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 (brrev (funcall printer (cvs-car br)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
242 (brlength (length (cvs-car brrev)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
243 (brfill (concat (make-string (/ brlength 2) ? ) "|"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
244 (prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
245 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
246 (insert " -- ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247 (cvs-tree-print (cvs-append brrev brfill (cvs-cdr br))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
248 printer (current-column)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
249 (delete-region (save-excursion (move-to-column prefix) (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250 (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
251 (insert " " (make-string (- prefix column 2) ?-) " ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
252 (end-of-line)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
253 prefix))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
254
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
255 (defun cvs-tree-merge (tree1 tree2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
256 "Merge tags trees TREE1 and TREE2 into one.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
257 BEWARE: because of stability issues, this is not a symetric operation."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
258 (assert (and (listp tree1) (listp tree2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
259 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
260 ((null tree1) tree2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261 ((null tree2) tree1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
262 (t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
263 (let* ((rev1 (car tree1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
264 (tag1 (cvs-car rev1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
265 (vl1 (cvs-tag->vlist tag1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (l1 (length vl1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 (rev2 (car tree2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
268 (tag2 (cvs-car rev2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
269 (vl2 (cvs-tag->vlist tag2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
270 (l2 (length vl2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
271 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
272 ((= l1 l2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
273 (case (cvs-tag-compare tag1 tag2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
274 (more1 (list* rev2 (cvs-tree-merge tree1 (cdr tree2))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
275 (more2 (list* rev1 (cvs-tree-merge (cdr tree1) tree2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
276 (equal
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
277 (cons (cons (cvs-tag-merge tag1 tag2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
278 (cvs-tree-merge (cvs-cdr rev1) (cvs-cdr rev2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
279 (cvs-tree-merge (cdr tree1) (cdr tree2))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
280 ((> l1 l2)
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
281 (cvs-tree-merge
55790
45bf91de4d41 (cvs-tree-merge, cvs-tags->tree): Use `butlast', not `cvs-butlast'.
Juanma Barranquero <lekktu@gmail.com>
parents: 55076
diff changeset
282 (list (cons (cvs-tag-make (butlast vl1)) tree1)) tree2))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283 ((< l1 l2)
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
284 (cvs-tree-merge
55790
45bf91de4d41 (cvs-tree-merge, cvs-tags->tree): Use `butlast', not `cvs-butlast'.
Juanma Barranquero <lekktu@gmail.com>
parents: 55076
diff changeset
285 tree1 (list (cons (cvs-tag-make (butlast vl2)) tree2)))))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
286
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
287 (defun cvs-tag-make-tag (tag)
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 28857
diff changeset
288 (let ((vl (mapcar 'string-to-number (split-string (nth 2 tag) "\\."))))
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 28857
diff changeset
289 (cvs-tag-make vl (nth 0 tag) (intern (nth 1 tag)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
290
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
291 (defun cvs-tags->tree (tags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
292 "Make a tree out of a list of TAGS."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
293 (let ((tags
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
294 (mapcar
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
295 (lambda (tag)
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
296 (let ((tag (cvs-tag-make-tag tag)))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
297 (list (if (not (eq (cvs-tag->type tag) 'branch)) tag
55790
45bf91de4d41 (cvs-tree-merge, cvs-tags->tree): Use `butlast', not `cvs-butlast'.
Juanma Barranquero <lekktu@gmail.com>
parents: 55076
diff changeset
298 (list (cvs-tag-make (butlast (cvs-tag->vlist tag)))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
299 tag)))))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
300 tags)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
301 (while (cdr tags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
302 (let (tl)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
303 (while tags
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
304 (push (cvs-tree-merge (pop tags) (pop tags)) tl))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
305 (setq tags (nreverse tl))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
306 (car tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
307
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
308 (defun cvs-status-get-tags ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
309 "Look for a list of tags, read them in and delete them.
42206
0f4506820432 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 34652
diff changeset
310 Return nil if there was an empty list of tags and t if there wasn't
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
311 even a list. Else, return the list of tags where each element of
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
312 the list is a three-string list TAG, KIND, REV."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
313 (let ((tags nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
314 (if (not (re-search-forward cvs-status-tags-leader-re nil t)) t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
315 (forward-char 1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
316 (let ((pt (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
317 (lastrev nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
318 (case-fold-search t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
319 (or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
320 (looking-at "\\s-+no\\s-+tags")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
321
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
322 (progn ; normal listing
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
323 (while (looking-at "^[ \t]+\\([^ \t\n]+\\)[ \t]+(\\([a-z]+\\): \\(.+\\))$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
324 (push (list (match-string 1) (match-string 2) (match-string 3)) tags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
325 (forward-line 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
326 (unless (looking-at "^$") (setq tags nil) (goto-char pt))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
327 tags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
328
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
329 (progn ; cvstree-style listing
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
330 (while (or (looking-at "^ .+\\(.\\) \\([0-9.]+\\): \\([^\n\t .0-9][^\n\t ]*\\)?$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
331 (and lastrev
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
332 (looking-at "^ .+\\(\\) \\(8\\)? \\([^\n\t .0-9][^\n\t ]*\\)$")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
333 (setq lastrev (or (match-string 2) lastrev))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
334 (push (list (match-string 3)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
335 (if (equal (match-string 1) " ") "branch" "revision")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
336 lastrev) tags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
337 (forward-line 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
338 (unless (looking-at "^$") (setq tags nil) (goto-char pt))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
339 (setq tags (nreverse tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
340
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
341 (progn ; new tree style listing
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
342 (let* ((re-lead "[ \t]*\\(-+\\)?\\(|\n?[ \t]+\\)*")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
343 (re3 (concat re-lead "\\(\\.\\)?\\(" cvs-status-rev-re "\\)"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
344 (re2 (concat re-lead cvs-status-tag-re "\\(\\)"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
345 (re1 (concat re-lead cvs-status-tag-re
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
346 " (\\(" cvs-status-rev-re "\\))")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
347 (while (or (looking-at re1) (looking-at re2) (looking-at re3))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
348 (push (list (match-string 3)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
349 (if (match-string 1) "branch" "revision")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
350 (match-string 4)) tags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
351 (goto-char (match-end 0))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
352 (when (eolp) (forward-char 1))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
353 (unless (looking-at "^$") (setq tags nil) (goto-char pt))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
354 (setq tags (nreverse tags))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
355
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
356 (delete-region pt (point)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
357 tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
358
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
359 (defvar font-lock-mode)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
360 (defun cvs-refontify (beg end)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
361 (when (and (boundp 'font-lock-mode)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
362 font-lock-mode
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
363 (fboundp 'font-lock-fontify-region))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
364 (font-lock-fontify-region (1- beg) (1+ end))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
365
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
366 (defun cvs-status-trees ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
367 "Look for a lists of tags, and replace them with trees."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
368 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
369 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
370 (goto-char (point-min))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
371 (let ((inhibit-read-only t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
372 (tags nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
373 (while (listp (setq tags (cvs-status-get-tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
374 ;;(let ((pt (save-excursion (forward-line -1) (point))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
375 (save-restriction
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
376 (narrow-to-region (point) (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
377 ;;(newline)
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
378 (combine-after-change-calls
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
379 (cvs-tree-print (cvs-tags->tree tags) 'cvs-tag->string 3)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
380 ;;(cvs-refontify pt (point))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
381 ;;(sit-for 0)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
382 ;;)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
383 ))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
384
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
385 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
386 ;;;; CVSTree-style trees
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
387 ;;;;
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
388
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
389 (defvar cvs-tree-use-jisx0208 nil) ;Old compat var.
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
390 (defvar cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
391 (cond
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
392 (cvs-tree-use-jisx0208 'jisx0208)
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
393 ((char-displayable-p ?━) 'unicode)
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
394 ((char-displayable-p (make-char 'japanese-jisx0208 40 44)) 'jisx0208))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
395 "*Non-nil if we should use the graphical glyphs from `japanese-jisx0208'.
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
396 Otherwise, default to ASCII chars like +, - and |.")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
397
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
398 (defconst cvs-tree-char-space
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
399 (case cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
400 (jisx0208 (make-char 'japanese-jisx0208 33 33))
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
401 (unicode " ")
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
402 (t " ")))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
403 (defconst cvs-tree-char-hbar
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
404 (case cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
405 (jisx0208 (make-char 'japanese-jisx0208 40 44))
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
406 (unicode "━")
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
407 (t "--")))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
408 (defconst cvs-tree-char-vbar
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
409 (case cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
410 (jisx0208 (make-char 'japanese-jisx0208 40 45))
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
411 (unicode "┃")
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
412 (t "| ")))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
413 (defconst cvs-tree-char-branch
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
414 (case cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
415 (jisx0208 (make-char 'japanese-jisx0208 40 50))
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
416 (unicode "┣")
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
417 (t "+-")))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
418 (defconst cvs-tree-char-eob ;end of branch
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
419 (case cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
420 (jisx0208 (make-char 'japanese-jisx0208 40 49))
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
421 (unicode "┗")
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
422 (t "`-")))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
423 (defconst cvs-tree-char-bob ;beginning of branch
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
424 (case cvs-tree-use-charset
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
425 (jisx0208 (make-char 'japanese-jisx0208 40 51))
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
426 (unicode "┳")
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
427 (t "+-")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
428
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
429 (defun cvs-tag-lessp (tag1 tag2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
430 (eq (cvs-tag-compare tag1 tag2) 'more2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
431
28249
090fad6a7bcb (cvs-status-(prev|next)): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
432 (defvar cvs-tree-nomerge nil)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
433
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
434 (defun cvs-status-cvstrees (&optional arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
435 "Look for a list of tags, and replace it with a tree.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
436 Optional prefix ARG chooses between two representations."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
437 (interactive "P")
55076
913c2e3a059f (cvs-tree-use-charset): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54579
diff changeset
438 (when (and cvs-tree-use-charset
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
439 (not enable-multibyte-characters))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
440 ;; We need to convert the buffer from unibyte to multibyte
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
441 ;; since we'll use multibyte chars for the tree.
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
442 (let ((modified (buffer-modified-p))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
443 (inhibit-read-only t)
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
444 (inhibit-modification-hooks t))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
445 (unwind-protect
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
446 (progn
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
447 (decode-coding-region (point-min) (point-max) 'undecided)
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
448 (set-buffer-multibyte t))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
449 (restore-buffer-modified-p modified))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
450 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
451 (goto-char (point-min))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
452 (let ((inhibit-read-only t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
453 (tags nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
454 (cvs-tree-nomerge (if arg (not cvs-tree-nomerge) cvs-tree-nomerge)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
455 (while (listp (setq tags (cvs-status-get-tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
456 (let ((tags (mapcar 'cvs-tag-make-tag tags))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
457 ;;(pt (save-excursion (forward-line -1) (point)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
458 )
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
459 (setq tags (sort tags 'cvs-tag-lessp))
30887
c4366892a814 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
460 (let* ((first (car tags))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
461 (prev (if (cvs-tag-p first)
30887
c4366892a814 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
462 (list (car (cvs-tag->vlist first))) nil)))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
463 (combine-after-change-calls
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
464 (cvs-tree-tags-insert tags prev))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
465 ;;(cvs-refontify pt (point))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
466 ;;(sit-for 0)
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
467 ))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
468
56750
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
469 (defun-cvs-mode (cvs-status-checkout . NOARGS) (dir)
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
470 "Run cvs-checkout against the tag under the point.
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
471 The files are stored to DIR."
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
472 (interactive
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
473 (let* ((module (cvs-get-module))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
474 (branch (cvs-prefix-get 'cvs-branch-prefix))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
475 (prompt (format "CVS Checkout Directory for `%s%s': "
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
476 module
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
477 (if branch (format "(branch: %s)" branch)
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
478 ""))))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
479 (list
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
480 (read-directory-name prompt
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
481 nil default-directory nil))))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
482 (let ((modules (cvs-string->strings (cvs-get-module)))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
483 (flags (cvs-add-branch-prefix
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
484 (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
485 (cvs-cvsroot (cvs-get-cvsroot)))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
486 (cvs-checkout modules dir flags)))
5ca81cc9c2de (cvs-status-checkout): New function.
Masatake YAMATO <jet@gyve.org>
parents: 55790
diff changeset
487
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
488 (defun cvs-tree-tags-insert (tags prev)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
489 (when tags
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
490 (let* ((tag (car tags))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
491 (vlist (cvs-tag->vlist tag))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
492 (nprev ;"next prev"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
493 (let* ((next (cvs-car (cadr tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
494 (nprev (if (and cvs-tree-nomerge next
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
495 (equal vlist (cvs-tag->vlist next)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
496 prev vlist)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
497 (cvs-map (lambda (v p) v) nprev prev)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
498 (after (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
499 (newline)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
500 (cvs-tree-tags-insert (cdr tags) nprev)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
501 (pe t) ;"prev equal"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
502 (nas nil)) ;"next afters" to be returned
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
503 (insert " ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
504 (do* ((vs vlist (cdr vs))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
505 (ps prev (cdr ps))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
506 (as after (cdr as)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
507 ((and (null as) (null vs) (null ps))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
508 (let ((revname (cvs-status-vl-to-str vlist)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
509 (if (cvs-every 'identity (cvs-map 'equal prev vlist))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
510 (insert (make-string (+ 4 (length revname)) ? )
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
511 (or (cvs-tag->name tag) ""))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
512 (insert " " revname ": " (or (cvs-tag->name tag) "")))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
513 (let* ((eq (and pe (equal (car ps) (car vs))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
514 (next-eq (equal (cadr ps) (cadr vs))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
515 (let* ((na+char
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
516 (if (car as)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
517 (if eq
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
518 (if next-eq (cons t cvs-tree-char-vbar)
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
519 (cons t cvs-tree-char-branch))
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
520 (cons nil cvs-tree-char-bob))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
521 (if eq
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
522 (if next-eq (cons nil cvs-tree-char-space)
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
523 (cons t cvs-tree-char-eob))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
524 (cons nil (if (and (eq (cvs-tag->type tag) 'branch)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
525 (cvs-every 'null as))
33231
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
526 cvs-tree-char-space
c08a986392cd (cvs-tree-merge): Use cvs-butlast (avoid CL).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31972
diff changeset
527 cvs-tree-char-hbar))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
528 (insert (cdr na+char))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
529 (push (car na+char) nas))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
530 (setq pe eq)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
531 (nreverse nas))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
532
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42557
diff changeset
533 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
534 ;;;; Merged trees from different files
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42557
diff changeset
535 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
536
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
537 (defun cvs-tree-fuzzy-merge-1 (trees tree prev)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
538 )
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
539
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
540 (defun cvs-tree-fuzzy-merge (trees tree)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
541 "Do the impossible: merge TREE into TREES."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
542 ())
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
543
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
544 (defun cvs-tree ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
545 "Get tags from the status output and merge tham all into a big tree."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
546 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
547 (goto-char (point-min))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
548 (let ((inhibit-read-only t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
549 (trees (make-vector 31 0)) tree)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
550 (while (listp (setq tree (cvs-tags->tree (cvs-status-get-tags))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
551 (cvs-tree-fuzzy-merge trees tree))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
552 (erase-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
553 (let ((cvs-tag-print-rev nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
554 (cvs-tree-print tree 'cvs-tag->string 3)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42557
diff changeset
555
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
556
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
557 (provide 'cvs-status)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
558
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
559 ;;; arch-tag: db8b5094-d02a-473e-a476-544e89ff5ad0
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
560 ;;; cvs-status.el ends here