/[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.21 - (hide annotations)
Thu Apr 24 04:32:25 2003 UTC (10 years, 11 months ago) by kaz
Branch: mcvs-1-0-branch
CVS Tags: mcvs-1-0-7
Changes since 1.69.2.20: +8 -1 lines
New commands, sync-from-cvs and sync-to-cvs.

* code/mcvs-main.lisp (*sync-to-cvs-options*, *sync-from-cvs-options*):
New option constants.
(*mcvs-command-table*): New entries.
(*usage*): New help text.

* code/generic.lisp (mcvs-generic): New keyword parameter
no-invoke-cvs.
(mcvs-sync-to-wrapper, mcvs-sync-from-wrapper): New functions.
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.58 (defun mcvs-help (global-options command-options args)
140     (declare (special *usage* *mcvs-command-table*)
141     (ignore global-options command-options))
142     (cond
143     ((null args)
144     (terpri)
145     (write-line *usage*)
146     (terpri))
147     ((= (length args) 1)
148     (let* ((command-name (first args))
149     (command (find command-name *mcvs-command-table*
150     :key #'first
151     :test #'string=)))
152     (when (null command)
153 kaz 1.69 (error "~a is not a recognized mcvs command."
154 kaz 1.58 command-name))
155 kaz 1.59 (let ((help-text (third command)))
156     (when (null help-text)
157 kaz 1.69 (error "sorry, no help available for ~a command."
158 kaz 1.58 command-name))
159 kaz 1.59 (terpri)
160     (write-line help-text)
161     (terpri))))
162 kaz 1.69 (t (error "try \"mcvs help <name-of-command>\"."))))
163 kaz 1.58
164 kaz 1.5 (defconstant *mcvs-command-table*
165 kaz 1.58 `(("help" ,#'mcvs-help nil ,*help-options*)
166 kaz 1.59 ("create" ,#'mcvs-create-wrapper ,*create-help* ,*create-options*)
167 kaz 1.60 ("grab" ,#'mcvs-grab-wrapper ,*grab-help* ,*grab-options*)
168 kaz 1.61 ("checkout" ,#'mcvs-checkout-wrapper ,*checkout-help* ,*checkout-options*)
169     ("co" ,#'mcvs-checkout-wrapper ,*checkout-help* ,*checkout-options*)
170 kaz 1.69.2.2 ("export" ,#'mcvs-export-wrapper ,*export-help* ,*export-options*)
171     ("ex" ,#'mcvs-export-wrapper ,*export-help* ,*export-options*)
172 kaz 1.61 ("add" ,#'mcvs-add-wrapper ,*add-help* ,*add-options*)
173 kaz 1.63 ("remove" ,#'mcvs-remove-wrapper ,*remove-help* ,*remove-options*)
174 kaz 1.64 ("rm" ,#'mcvs-remove-wrapper ,*remove-help* ,*remove-options*)
175 kaz 1.69.2.8 ("move" ,#'mcvs-move-wrapper ,*move-help* ,*move-options*)
176     ("mv" ,#'mcvs-move-wrapper ,*move-help* ,*move-options*)
177 kaz 1.69.2.10 ("link" ,#'mcvs-link-wrapper ,*link-help* ,*link-options*)
178     ("ln" ,#'mcvs-link-wrapper ,*link-help* ,*link-options*)
179 kaz 1.58 ("update" ,#'mcvs-update-wrapper nil ,*update-options*)
180     ("up" ,#'mcvs-update-wrapper nil ,*update-options*)
181     ("commit" ,#'mcvs-commit-wrapper nil ,*commit-options*)
182     ("ci" ,#'mcvs-commit-wrapper nil ,*commit-options*)
183     ("diff" ,#'mcvs-diff-wrapper nil ,*diff-options*)
184     ("tag" ,#'mcvs-tag-wrapper nil ,*tag-options*)
185     ("log" ,#'mcvs-log-wrapper nil ,*log-options*)
186     ("status" ,#'mcvs-status-wrapper nil ,*status-options*)
187     ("stat" ,#'mcvs-status-wrapper nil ,*status-options*)
188     ("annotate" ,#'mcvs-annotate-wrapper nil ,*annotate-options*)
189     ("filt" ,#'mcvs-filt-wrapper nil ,*filt-options*)
190     ("fi" ,#'mcvs-filt-wrapper nil ,*filt-options*)
191 kaz 1.69.2.18 ("remote-filt" ,#'mcvs-remote-filt-wrapper nil ,*remote-filt-options*)
192     ("rfilt" ,#'mcvs-remote-filt-wrapper nil ,*remote-filt-options*)
193     ("rfi" ,#'mcvs-remote-filt-wrapper nil ,*remote-filt-options*)
194 kaz 1.58 ("convert" ,#'mcvs-convert-wrapper nil ,*convert-options*)
195 kaz 1.69.2.12 ("branch" ,#'mcvs-branch-wrapper ,*branch-help* ,*branch-options*)
196 kaz 1.58 ("switch" ,#'mcvs-switch-wrapper nil ,*switch-options*)
197     ("sw" ,#'mcvs-switch-wrapper nil ,*switch-options*)
198     ("merge" ,#'mcvs-merge-wrapper nil ,*merge-options*)
199     ("remerge" ,#'mcvs-remerge-wrapper nil ,*remerge-options*)
200     ("list-branches" ,#'mcvs-list-branches-wrapper nil ,*list-branches-options*)
201     ("lb" ,#'mcvs-list-branches-wrapper nil ,*list-branches-options*)
202     ("purge" ,#'mcvs-purge-wrapper nil ,*purge-options*)
203     ("restore" ,#'mcvs-restore-wrapper nil ,*restore-options*)
204     ("remap" ,#'mcvs-remap-wrapper nil ,*remap-options*)
205 kaz 1.69.2.3 ("prop" ,#'mcvs-prop-wrapper nil ,*prop-options*)
206 kaz 1.69.2.5 ("watch" ,#'mcvs-watch-wrapper nil ,*watch-options*)
207     ("watchers" ,#'mcvs-watchers-wrapper nil ,*watchers-options*)
208     ("edit" ,#'mcvs-edit-wrapper nil ,*edit-options*)
209     ("unedit" ,#'mcvs-unedit-wrapper nil ,*unedit-options*)
210 kaz 1.69.2.21 ("editors" ,#'mcvs-editors-wrapper nil ,*editors-options*)
211     ("sync-from-cvs" ,#'mcvs-sync-from-wrapper nil ,*editors-options*)
212     ("sync-to-cvs" ,#'mcvs-sync-to-wrapper nil ,*editors-options*)))
213 kaz 1.5
214 kaz 1.33 (defconstant *usage*
215     "Meta-CVS command syntax:
216    
217 kaz 1.59 mcvs [ global-options] command [ command-options ] [ command-arguments ]
218 kaz 1.33
219     Global options:
220    
221 kaz 1.35 -H --help Print this help and terminate. If a command is specified,
222     help specific to that command is printed instead.
223     -Q Very quiet, generate output only for serious problems. (*)
224     -q Somewhat quiet, some informational messages suppresed. (*)
225 kaz 1.69.2.13 -n Dry run; do not modify filesystem. (*)
226 kaz 1.69 --debug Verbose debug output; -Q and -q are ignored but still
227     passed to CVS.
228 kaz 1.35 -r Make working files read-only. (@)
229     -w Make new working files read-write (default). (@)
230     -l Do not log cvs command in command history, but execute
231     it anyway. (@)
232     -t Trace CVS execution. (@)
233     -v --version Display version information and terminate.
234     -f CVS not to read ~/.cvsrc file. (@)
235 kaz 1.65 -i script-name Load a Lisp file and evaluate its top level forms,
236     allowing Meta-CVS to behave as an interpreter.
237 kaz 1.50 --meta Include metafiles such as MCVS/MAP in the set of files
238     to operate on.
239     --metaonly Operate only on metafiles.
240     --nometa Exclude metafiles from the set of files to operate on.
241 kaz 1.35 --error-continue Instead of interactive error handling, automatically
242     continue all continuable errors.
243 kaz 1.69.2.20 --error-terminate Terminate with cleanup when an error happens instead
244 kaz 1.69.2.19 of interactive error handling.
245 kaz 1.35 -T tempdir Place temporary files in tempdir. (@)
246     -e editor Edit messages with editor. (*)
247     -d root Specify CVSROOT. (@)
248     -z gzip-level Specify compression level. (@)
249 kaz 1.69.2.17 --up N Escape out of N levels of sandbox nesting before executing
250     operation.
251 kaz 1.33
252     Notes: (*) option processed by Meta-CVS and passed to CVS too.
253     (@) option merely passed to CVS.
254    
255     Commands:
256    
257 kaz 1.59 help Obtain more detailed help for a specific command.
258 kaz 1.45 create Create new project from an existing file tree.
259 kaz 1.46 grab Take a snapshot of an external source tree, such
260     as a third-party release, and incorporate it into
261     the working copy. Tries to discover file moves.
262 kaz 1.69.2.4 checkout (co) Retrieve a Meta-CVS project from the repository to
263     create a working copy.
264     export (ex) Retrieve a Meta-CVS project without creating a
265 kaz 1.35 working copy.
266     add Place files (or directories with add -R) under
267     version control.
268     remove (rm) Remove files or directories.
269     move (mv) Rename files and directories.
270 kaz 1.69.2.10 link (ln) Create a versioned symbolic link.
271 kaz 1.35 update (up) Incorporate latest changes from repository into
272     working copy.
273     commit (ci) Incorporate outstanding changes in the working copy
274     into the repository.
275     diff Compute differences between files in the working copy
276     and the repository or between revisions in the repository.
277     tag Associate a symbolic name with file revisions to create
278     an identifiable baseline. By default, tags the
279     revisions that were last synchronized with the
280     directory. A branch is created using tag -b.
281     log Display log information for files.
282     status (stat) Show current status of files.
283     annotate Perform a detailed analysis of files, showing the
284     version information about every individual line of text.
285     filt (fi) Act as a text filter, which converts Meta-CVS F- file
286     names to readable paths, according to the current mapping.
287 kaz 1.69.2.18 remote-filt (rfi) Remote version of filt, requires module name.
288 kaz 1.38 branch Create a managed branch. Meta-CVS managed branches keep
289     track of what has been merged where, so users don't have
290     to track merges with tags at all.
291     merge Merge a managed branch to the current branch or trunk.
292 kaz 1.40 remerge Re-apply the most recent merge without changing any tags.
293     Useful when a merge goes bad so the local changes have
294     to be discarded and the merge done over again.
295 kaz 1.41 list-branches (lb) List Meta-CVS managed branches.
296 kaz 1.43 switch (sw) Switch to a branch. With no arguments, switch to
297 kaz 1.42 main trunk.
298 kaz 1.44 remap Force Meta-CVS to notice and incorporate moves and
299     deletions that were performed directly on the sandbox.
300 kaz 1.48 purge Execute a CVS remove on files that have been unmapped
301     with the remove command.
302 kaz 1.51 restore Restore files that have been deleted with the remove
303     command, but not purged. These appear in the lost+found
304     directory under cryptic names.
305 kaz 1.54 prop Manipulate properties.
306 kaz 1.56 prop --set <bool-prop-name> [ files ... ]
307 kaz 1.69.2.9 prop --clear <bool-prop-name> [ files ... ]
308     prop --value <prop-name> <new-value> [ files ... ]
309     prop --remove <prop-name> [ files ... ]
310     The ``exec'' property represents the execute permission
311     of a file. More than one --set, --clear, --value
312     or --remove may be specified before the files.
313 kaz 1.69.2.4 watch Manipulate per-file CVS watch settings.
314     watch --on [ files ... ]
315     watch --off [ files ... ]
316     watch --add <action> [ files ... ]
317     watch --remove <action> [ files ... ]
318 kaz 1.69.2.5 watchers See who is watching files.
319     edit Indicate the intent to edit a watched file.
320     unedit Retract the indication signaled by edit.
321     editors See who is editing files.
322 kaz 1.69.2.21 sync-to-cvs Synchronize tree in the direction of the CVS sandbox.
323     Useful when extending Meta-CVS with external scripts.
324     sync-from-cvs Synchronize CVS sandbox to the tree.
325 kaz 1.35 convert Convert a CVS module to a Meta-CVS project. This requires
326     filesystem-level access to the repository. This is
327     currently an experimental command that is known not
328     to work 100%.")
329 kaz 1.33
330 kaz 1.5 (defun mcvs-execute (args)
331 kaz 1.69.2.19 (let* ((*interactive-error-io* (open (unix-funcs:ctermid) :direction :io))
332     (*mcvs-error-treatment* (if *interactive-error-io*
333     :interactive
334 kaz 1.69.2.20 :terminate)))
335 kaz 1.69.2.19 (handler-bind ((error #'mcvs-error-handler))
336     (multiple-value-bind (global-options global-args)
337     (parse-opt args *global-options*)
338     (setf global-options (filter-global-options global-options))
339    
340     (when *print-usage*
341     (terpri)
342     (write-line *usage*)
343     (terpri)
344     (throw 'mcvs-terminate nil))
345    
346     (when (not (first global-args))
347     (write-line "Meta-CVS requires a command argument." *error-output*)
348     (write-line "Use mcvs -H to view help." *error-output*)
349     (throw 'mcvs-terminate nil))
350    
351     (let ((command (find (first global-args) *mcvs-command-table*
352     :key #'first
353     :test #'string=)))
354     (when (not command)
355     (error "~a is not a recognized mcvs command."
356     (first global-args)))
357     (destructuring-bind (name func help-text opt-spec) command
358     (declare (ignore name help-text))
359     (multiple-value-bind (command-options command-args)
360     (parse-opt (rest global-args) opt-spec)
361     (funcall func global-options command-options command-args))))))
362     nil))
363 kaz 1.5
364 kaz 1.8 (defun mcvs-debug-shell ()
365 kaz 1.24 (let ((counter 0)
366     (*mcvs-error-treatment* :decline))
367     (loop
368     (format t "~&mcvs[~a]> " (incf counter))
369     (let ((line (string-trim #(#\space #\tab) (read-line))))
370 kaz 1.29 (restart-case
371 kaz 1.24 (cond
372     ((zerop (length line)))
373     ((string-equal line "exit")
374     (return-from mcvs-debug-shell))
375     ((char-equal (char line 0) #\!)
376     (print (eval (read-from-string (subseq line 1)))))
377 kaz 1.29 (t (mcvs-execute (split-words line #(#\space #\tab)))))
378 kaz 1.36 (debug () :report "Return to mcvs debug shell"
379 kaz 1.29 (terpri)))))))
380 kaz 1.10
381 kaz 1.5 #+clisp
382     (defun mcvs ()
383 kaz 1.28 (exit (catch 'mcvs-terminate (or (mcvs-execute ext:*args*)
384     *mcvs-errors-occured-p*))))

  ViewVC Help
Powered by ViewVC 1.1.5