/[meta-cvs]/meta-cvs/F-233AD6EEE14894A7303F09519A2AB734
ViewVC logotype

Contents of /meta-cvs/F-233AD6EEE14894A7303F09519A2AB734

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.69.2.27 - (hide annotations)
Thu Jul 10 05:48:38 2003 UTC (10 years, 9 months ago) by kaz
Branch: mcvs-1-0-branch
Changes since 1.69.2.26: +1 -1 lines
Cosmetic change in usage.
1 kaz 1.16 ;;; This source file is part of the Meta-CVS program,
2 kaz 1.7 ;;; which is distributed under the GNU license.
3     ;;; Copyright 2002 Kaz Kylheku
4    
5 kaz 1.69.2.7 ;; Clear out requires for mcvs-upgrade to work right.
6     (setf *modules* nil)
7    
8 kaz 1.45 (require "create")
9 kaz 1.1 (require "checkout")
10 kaz 1.46 (require "grab")
11 kaz 1.1 (require "add")
12 kaz 1.3 (require "remove")
13 kaz 1.4 (require "move")
14 kaz 1.69.2.10 (require "link")
15 kaz 1.1 (require "update")
16 kaz 1.12 (require "filt")
17 kaz 1.21 (require "generic")
18 kaz 1.25 (require "convert")
19 kaz 1.38 (require "branch")
20 kaz 1.44 (require "remap")
21 kaz 1.48 (require "purge")
22 kaz 1.49 (require "restore")
23 kaz 1.54 (require "prop")
24 kaz 1.69.2.3 (require "watch")
25 kaz 1.8 (require "split")
26     (require "restart")
27 kaz 1.27 (require "error")
28 kaz 1.10 (require "options")
29 kaz 1.33 (require "find-bind")
30 kaz 1.6 (provide "mcvs-main")
31 kaz 1.5
32 kaz 1.69.2.15 (define-option-constant *global-options*
33 kaz 1.55 (0 arg "H" "help" "Q" "q" "r" "w" "l" "n" "t" "v" "f" "version"
34 kaz 1.69.2.20 "meta" "metaonly" "nometa" "error-continue" "error-terminate" "debug")
35 kaz 1.69.2.16 (1 arg "T" "e" "d" "r" "z" "s" "i" "up"))
36 kaz 1.55
37 kaz 1.58 (define-option-constant *help-options*)
38    
39 kaz 1.55 (define-option-constant *create-options*
40     (0 arg "d")
41     (1 arg "k" "I" "b" "m" "W"))
42    
43     (define-option-constant *grab-options*
44     (0 arg "A")
45     (1 arg "r"))
46    
47     (define-option-constant *checkout-options*
48 kaz 1.61 (0 arg "f")
49 kaz 1.55 (1 arg "r" "D" "d" "k" "j"))
50    
51 kaz 1.69.2.2 (define-option-constant *export-options*
52     (0 arg "f")
53     (1 arg "r" "D" "d" "k"))
54    
55 kaz 1.55 (define-option-constant *add-options*
56     (0 arg "R")
57     (1 arg "k" "m"))
58    
59     (define-option-constant *remove-options*
60     (0 arg "R"))
61    
62     (define-option-constant *update-options*
63 kaz 1.69.2.1 (0 arg "A" "C" "f" "p")
64 kaz 1.55 (1 arg "k" "r" "D" "j" "I" "W"))
65    
66     (define-option-constant *switch-options*
67     (1 arg "k" "I" "W"))
68    
69     (define-option-constant *commit-options*
70     (0 arg "f")
71     (1 arg "F" "m" "r"))
72    
73     (define-option-constant *diff-options*
74     (0 arg "a" "b" "B" "brief" "c" "d" "e" "ed" "expand-tabs" "f" "forward-ed"
75     "H" "i" "ignore-all-space" "ignore-blank-lines" "ignore-case"
76     "ignore-space-change" "initial-tab" "l" "left-column" "minimal" "n"
77     "N" "new-file" "p" "P" "--paginate" "q" "rcs" "report-identical-files"
78     "s" "show-c-function" "side-by-side" "speed-large-files"
79     "suppress-common-lines" "t" "T" "text" "u" "unidirectional-new-file"
80     "w" "y")
81     (1 arg "C" "context" "D" "F" "horizon-lines" "ifdef" "ignore-matching-lines"
82     "L" "label" "line-format" "new-group-format" "new-line-format"
83     "old-group-format" "old-line-format" "r" "show-function-line"
84     "unchanged-group-format" "unchanged-line-format" "U" "unified" "W"
85     "width"))
86    
87     (define-option-constant *tag-options*
88     (0 arg "l" "d" "f" "b" "F" "c")
89     (1 arg "r" "D"))
90    
91     (define-option-constant *log-options*
92     (0 arg "R" "h" "t" "N" "b")
93     (1 arg "r" "d" "s" "w"))
94    
95     (define-option-constant *status-options*
96     (0 arg "v"))
97    
98     (define-option-constant *annotate-options*
99     (0 arg "f")
100     (1 arg "r" "D"))
101    
102     (define-option-constant *filt-options*
103     (1 arg "r" "D"))
104    
105 kaz 1.69.2.18 (define-option-constant *remote-filt-options*
106     (1 arg "r" "D"))
107    
108 kaz 1.57 (define-option-constant *move-options*)
109 kaz 1.69.2.10 (define-option-constant *link-options*)
110 kaz 1.55 (define-option-constant *convert-options*)
111     (define-option-constant *branch-options*)
112 kaz 1.69.2.14
113     (define-option-constant *merge-options*
114     (1 arg "k"))
115    
116     (define-option-constant *remerge-options*
117     (1 arg "k"))
118    
119 kaz 1.55 (define-option-constant *list-branches-options*)
120     (define-option-constant *remap-options*)
121     (define-option-constant *purge-options*)
122     (define-option-constant *restore-options*)
123    
124     (define-option-constant *prop-options*
125     (1 arg "set" "clear" "remove")
126     (2 arg "value"))
127 kaz 1.18
128 kaz 1.69.2.3 (define-option-constant *watch-options*
129     (0 arg "on" "off")
130     (1 arg "add" "remove"))
131    
132 kaz 1.69.2.5 (define-option-constant *watchers-options*)
133     (define-option-constant *edit-options*)
134     (define-option-constant *unedit-options*)
135     (define-option-constant *editors-options*)
136 kaz 1.69.2.21 (define-option-constant *sync-to-cvs-options*)
137     (define-option-constant *sync-from-cvs-options*)
138 kaz 1.69.2.5
139 kaz 1.69.2.24 (declaim (special *usage* *mcvs-command-table*))
140    
141 kaz 1.58 (defun mcvs-help (global-options command-options args)
142 kaz 1.69.2.24 (declare (ignore global-options command-options))
143 kaz 1.58 (cond
144     ((null args)
145     (terpri)
146     (write-line *usage*)
147     (terpri))
148     ((= (length args) 1)
149     (let* ((command-name (first args))
150     (command (find command-name *mcvs-command-table*
151     :key #'first
152     :test #'string=)))
153     (when (null command)
154 kaz 1.69 (error "~a is not a recognized mcvs command."
155 kaz 1.58 command-name))
156 kaz 1.59 (let ((help-text (third command)))
157     (when (null help-text)
158 kaz 1.69 (error "sorry, no help available for ~a command."
159 kaz 1.58 command-name))
160 kaz 1.59 (terpri)
161     (write-line help-text)
162     (terpri))))
163 kaz 1.69 (t (error "try \"mcvs help <name-of-command>\"."))))
164 kaz 1.58
165 kaz 1.5 (defconstant *mcvs-command-table*
166 kaz 1.58 `(("help" ,#'mcvs-help nil ,*help-options*)
167 kaz 1.59 ("create" ,#'mcvs-create-wrapper ,*create-help* ,*create-options*)
168 kaz 1.60 ("grab" ,#'mcvs-grab-wrapper ,*grab-help* ,*grab-options*)
169 kaz 1.61 ("checkout" ,#'mcvs-checkout-wrapper ,*checkout-help* ,*checkout-options*)
170     ("co" ,#'mcvs-checkout-wrapper ,*checkout-help* ,*checkout-options*)
171 kaz 1.69.2.2 ("export" ,#'mcvs-export-wrapper ,*export-help* ,*export-options*)
172     ("ex" ,#'mcvs-export-wrapper ,*export-help* ,*export-options*)
173 kaz 1.61 ("add" ,#'mcvs-add-wrapper ,*add-help* ,*add-options*)
174 kaz 1.63 ("remove" ,#'mcvs-remove-wrapper ,*remove-help* ,*remove-options*)
175 kaz 1.64 ("rm" ,#'mcvs-remove-wrapper ,*remove-help* ,*remove-options*)
176 kaz 1.69.2.8 ("move" ,#'mcvs-move-wrapper ,*move-help* ,*move-options*)
177     ("mv" ,#'mcvs-move-wrapper ,*move-help* ,*move-options*)
178 kaz 1.69.2.10 ("link" ,#'mcvs-link-wrapper ,*link-help* ,*link-options*)
179     ("ln" ,#'mcvs-link-wrapper ,*link-help* ,*link-options*)
180 kaz 1.58 ("update" ,#'mcvs-update-wrapper nil ,*update-options*)
181     ("up" ,#'mcvs-update-wrapper nil ,*update-options*)
182     ("commit" ,#'mcvs-commit-wrapper nil ,*commit-options*)
183     ("ci" ,#'mcvs-commit-wrapper nil ,*commit-options*)
184     ("diff" ,#'mcvs-diff-wrapper nil ,*diff-options*)
185     ("tag" ,#'mcvs-tag-wrapper nil ,*tag-options*)
186     ("log" ,#'mcvs-log-wrapper nil ,*log-options*)
187     ("status" ,#'mcvs-status-wrapper nil ,*status-options*)
188     ("stat" ,#'mcvs-status-wrapper nil ,*status-options*)
189     ("annotate" ,#'mcvs-annotate-wrapper nil ,*annotate-options*)
190     ("filt" ,#'mcvs-filt-wrapper nil ,*filt-options*)
191     ("fi" ,#'mcvs-filt-wrapper nil ,*filt-options*)
192 kaz 1.69.2.18 ("remote-filt" ,#'mcvs-remote-filt-wrapper nil ,*remote-filt-options*)
193     ("rfilt" ,#'mcvs-remote-filt-wrapper nil ,*remote-filt-options*)
194     ("rfi" ,#'mcvs-remote-filt-wrapper nil ,*remote-filt-options*)
195 kaz 1.58 ("convert" ,#'mcvs-convert-wrapper nil ,*convert-options*)
196 kaz 1.69.2.12 ("branch" ,#'mcvs-branch-wrapper ,*branch-help* ,*branch-options*)
197 kaz 1.58 ("switch" ,#'mcvs-switch-wrapper nil ,*switch-options*)
198     ("sw" ,#'mcvs-switch-wrapper nil ,*switch-options*)
199     ("merge" ,#'mcvs-merge-wrapper nil ,*merge-options*)
200     ("remerge" ,#'mcvs-remerge-wrapper nil ,*remerge-options*)
201     ("list-branches" ,#'mcvs-list-branches-wrapper nil ,*list-branches-options*)
202     ("lb" ,#'mcvs-list-branches-wrapper nil ,*list-branches-options*)
203     ("purge" ,#'mcvs-purge-wrapper nil ,*purge-options*)
204     ("restore" ,#'mcvs-restore-wrapper nil ,*restore-options*)
205     ("remap" ,#'mcvs-remap-wrapper nil ,*remap-options*)
206 kaz 1.69.2.3 ("prop" ,#'mcvs-prop-wrapper nil ,*prop-options*)
207 kaz 1.69.2.5 ("watch" ,#'mcvs-watch-wrapper nil ,*watch-options*)
208     ("watchers" ,#'mcvs-watchers-wrapper nil ,*watchers-options*)
209     ("edit" ,#'mcvs-edit-wrapper nil ,*edit-options*)
210     ("unedit" ,#'mcvs-unedit-wrapper nil ,*unedit-options*)
211 kaz 1.69.2.21 ("editors" ,#'mcvs-editors-wrapper nil ,*editors-options*)
212     ("sync-from-cvs" ,#'mcvs-sync-from-wrapper nil ,*editors-options*)
213     ("sync-to-cvs" ,#'mcvs-sync-to-wrapper nil ,*editors-options*)))
214 kaz 1.5
215 kaz 1.33 (defconstant *usage*
216     "Meta-CVS command syntax:
217    
218 kaz 1.69.2.27 mcvs [ global-options ] command [ command-options ] [ command-arguments ]
219 kaz 1.33
220     Global options:
221    
222 kaz 1.35 -H --help Print this help and terminate. If a command is specified,
223     help specific to that command is printed instead.
224     -Q Very quiet, generate output only for serious problems. (*)
225     -q Somewhat quiet, some informational messages suppresed. (*)
226 kaz 1.69.2.13 -n Dry run; do not modify filesystem. (*)
227 kaz 1.69 --debug Verbose debug output; -Q and -q are ignored but still
228     passed to CVS.
229 kaz 1.35 -r Make working files read-only. (@)
230     -w Make new working files read-write (default). (@)
231     -l Do not log cvs command in command history, but execute
232     it anyway. (@)
233     -t Trace CVS execution. (@)
234     -v --version Display version information and terminate.
235     -f CVS not to read ~/.cvsrc file. (@)
236 kaz 1.65 -i script-name Load a Lisp file and evaluate its top level forms,
237     allowing Meta-CVS to behave as an interpreter.
238 kaz 1.50 --meta Include metafiles such as MCVS/MAP in the set of files
239     to operate on.
240     --metaonly Operate only on metafiles.
241     --nometa Exclude metafiles from the set of files to operate on.
242 kaz 1.35 --error-continue Instead of interactive error handling, automatically
243     continue all continuable errors.
244 kaz 1.69.2.20 --error-terminate Terminate with cleanup when an error happens instead
245 kaz 1.69.2.19 of interactive error handling.
246 kaz 1.35 -T tempdir Place temporary files in tempdir. (@)
247     -e editor Edit messages with editor. (*)
248     -d root Specify CVSROOT. (@)
249     -z gzip-level Specify compression level. (@)
250 kaz 1.69.2.17 --up N Escape out of N levels of sandbox nesting before executing
251     operation.
252 kaz 1.33
253     Notes: (*) option processed by Meta-CVS and passed to CVS too.
254     (@) option merely passed to CVS.
255    
256     Commands:
257    
258 kaz 1.59 help Obtain more detailed help for a specific command.
259 kaz 1.45 create Create new project from an existing file tree.
260 kaz 1.46 grab Take a snapshot of an external source tree, such
261     as a third-party release, and incorporate it into
262     the working copy. Tries to discover file moves.
263 kaz 1.69.2.4 checkout (co) Retrieve a Meta-CVS project from the repository to
264     create a working copy.
265     export (ex) Retrieve a Meta-CVS project without creating a
266 kaz 1.35 working copy.
267     add Place files (or directories with add -R) under
268     version control.
269     remove (rm) Remove files or directories.
270     move (mv) Rename files and directories.
271 kaz 1.69.2.10 link (ln) Create a versioned symbolic link.
272 kaz 1.35 update (up) Incorporate latest changes from repository into
273     working copy.
274     commit (ci) Incorporate outstanding changes in the working copy
275     into the repository.
276     diff Compute differences between files in the working copy
277     and the repository or between revisions in the repository.
278     tag Associate a symbolic name with file revisions to create
279     an identifiable baseline. By default, tags the
280     revisions that were last synchronized with the
281 kaz 1.69.2.25 directory. Note: tag -b creates a CVS branch,
282     it won't be a Meta-CVS branch with managed merges.
283     Consider the branch command instead!
284 kaz 1.35 log Display log information for files.
285     status (stat) Show current status of files.
286     annotate Perform a detailed analysis of files, showing the
287     version information about every individual line of text.
288     filt (fi) Act as a text filter, which converts Meta-CVS F- file
289     names to readable paths, according to the current mapping.
290 kaz 1.69.2.18 remote-filt (rfi) Remote version of filt, requires module name.
291 kaz 1.38 branch Create a managed branch. Meta-CVS managed branches keep
292     track of what has been merged where, so users don't have
293     to track merges with tags at all.
294     merge Merge a managed branch to the current branch or trunk.
295 kaz 1.40 remerge Re-apply the most recent merge without changing any tags.
296     Useful when a merge goes bad so the local changes have
297     to be discarded and the merge done over again.
298 kaz 1.41 list-branches (lb) List Meta-CVS managed branches.
299 kaz 1.43 switch (sw) Switch to a branch. With no arguments, switch to
300 kaz 1.42 main trunk.
301 kaz 1.44 remap Force Meta-CVS to notice and incorporate moves and
302     deletions that were performed directly on the sandbox.
303 kaz 1.48 purge Execute a CVS remove on files that have been unmapped
304     with the remove command.
305 kaz 1.51 restore Restore files that have been deleted with the remove
306     command, but not purged. These appear in the lost+found
307     directory under cryptic names.
308 kaz 1.54 prop Manipulate properties.
309 kaz 1.56 prop --set <bool-prop-name> [ files ... ]
310 kaz 1.69.2.9 prop --clear <bool-prop-name> [ files ... ]
311     prop --value <prop-name> <new-value> [ files ... ]
312     prop --remove <prop-name> [ files ... ]
313     The ``exec'' property represents the execute permission
314     of a file. More than one --set, --clear, --value
315     or --remove may be specified before the files.
316 kaz 1.69.2.4 watch Manipulate per-file CVS watch settings.
317     watch --on [ files ... ]
318     watch --off [ files ... ]
319     watch --add <action> [ files ... ]
320     watch --remove <action> [ files ... ]
321 kaz 1.69.2.5 watchers See who is watching files.
322     edit Indicate the intent to edit a watched file.
323     unedit Retract the indication signaled by edit.
324     editors See who is editing files.
325 kaz 1.69.2.21 sync-to-cvs Synchronize tree in the direction of the CVS sandbox.
326     Useful when extending Meta-CVS with external scripts.
327     sync-from-cvs Synchronize CVS sandbox to the tree.
328 kaz 1.35 convert Convert a CVS module to a Meta-CVS project. This requires
329     filesystem-level access to the repository. This is
330     currently an experimental command that is known not
331     to work 100%.")
332 kaz 1.33
333 kaz 1.69.2.26 (defmacro with-open-file-ignore-errors ((var &rest open-args) &body forms)
334     `(let ((,var (ignore-errors (open ,@open-args))))
335     (unwind-protect
336     (progn ,@forms)
337     (when ,var (close ,var)))))
338    
339 kaz 1.5 (defun mcvs-execute (args)
340 kaz 1.69.2.26 (with-open-file-ignore-errors (*interactive-error-io* (parse-posix-namestring
341     (unix-funcs:ctermid))
342     :direction :io
343     :if-does-not-exist nil)
344 kaz 1.69.2.22 (let ((*mcvs-error-treatment* (if *interactive-error-io*
345     :interactive
346     :terminate)))
347 kaz 1.69.2.23 (unless *interactive-error-io*
348 kaz 1.69.2.26 (chatter-info "unable to open terminal device ~a .~%"
349 kaz 1.69.2.23 (unix-funcs:ctermid))
350 kaz 1.69.2.26 (chatter-info "interactive error handling disabled.~%"))
351 kaz 1.69.2.22 (handler-bind ((error #'mcvs-error-handler))
352     (multiple-value-bind (global-options global-args)
353     (parse-opt args *global-options*)
354     (setf global-options (filter-global-options global-options))
355 kaz 1.69.2.19
356 kaz 1.69.2.22 (when *print-usage*
357     (terpri)
358     (write-line *usage*)
359     (terpri)
360     (throw 'mcvs-terminate nil))
361 kaz 1.69.2.19
362 kaz 1.69.2.22 (when (not (first global-args))
363     (write-line "Meta-CVS requires a command argument." *error-output*)
364     (write-line "Use mcvs -H to view help." *error-output*)
365     (throw 'mcvs-terminate nil))
366 kaz 1.69.2.19
367 kaz 1.69.2.22 (let ((command (find (first global-args) *mcvs-command-table*
368     :key #'first
369     :test #'string=)))
370     (when (not command)
371     (error "~a is not a recognized mcvs command."
372     (first global-args)))
373     (destructuring-bind (name func help-text opt-spec) command
374     (declare (ignore name help-text))
375     (multiple-value-bind (command-options command-args)
376     (parse-opt (rest global-args) opt-spec)
377     (funcall func global-options command-options command-args)))))))
378 kaz 1.69.2.19 nil))
379 kaz 1.5
380 kaz 1.8 (defun mcvs-debug-shell ()
381 kaz 1.24 (let ((counter 0)
382     (*mcvs-error-treatment* :decline))
383     (loop
384     (format t "~&mcvs[~a]> " (incf counter))
385     (let ((line (string-trim #(#\space #\tab) (read-line))))
386 kaz 1.29 (restart-case
387 kaz 1.24 (cond
388     ((zerop (length line)))
389     ((string-equal line "exit")
390     (return-from mcvs-debug-shell))
391     ((char-equal (char line 0) #\!)
392     (print (eval (read-from-string (subseq line 1)))))
393 kaz 1.29 (t (mcvs-execute (split-words line #(#\space #\tab)))))
394 kaz 1.36 (debug () :report "Return to mcvs debug shell"
395 kaz 1.29 (terpri)))))))
396 kaz 1.10
397 kaz 1.5 #+clisp
398     (defun mcvs ()
399 kaz 1.28 (exit (catch 'mcvs-terminate (or (mcvs-execute ext:*args*)
400     *mcvs-errors-occured-p*))))

  ViewVC Help
Powered by ViewVC 1.1.5