/[meta-cvs]/meta-cvs/F-0C9187C87304A15BD59A42657A3BE5A3
ViewVC logotype

Contents of /meta-cvs/F-0C9187C87304A15BD59A42657A3BE5A3

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.301 - (hide annotations)
Mon Nov 27 02:51:45 2006 UTC (7 years, 4 months ago) by kaz
Branch: MAIN
Changes since 1.300: +18 -0 lines
Implement automatic ``| mcvs filt'' right in the program.

* code/main.lisp (*global-options*): Add "nofilt" option.
(*mcvs-command-table*): Add a new boolean column that specifies
which commands add filtering to their execution of CVS.
(*usage*): Add help text for --nofilt option, and make a reference
to it in the paragraph about filt.
(mcvs-execute): Pull extra boolean from the command table,
and also take into account the value of *nofilt-option*.
Set up the filtering accordingly, using the new
with-filtered-execute-program macro.

* code/options.lisp (*nofilt-option*): New variable.
(filter-mcvs-options): Parse out "nofilt" and set value of
*nofilt-option*.
1 kaz 1.297 2006-11-26 Kaz Kylheku <kkylheku@gmail.com>
2    
3 kaz 1.301 Implement automatic ``| mcvs filt'' right in the program.
4    
5     * code/main.lisp (*global-options*): Add "nofilt" option.
6     (*mcvs-command-table*): Add a new boolean column that specifies
7     which commands add filtering to their execution of CVS.
8     (*usage*): Add help text for --nofilt option, and make a reference
9     to it in the paragraph about filt.
10     (mcvs-execute): Pull extra boolean from the command table,
11     and also take into account the value of *nofilt-option*.
12     Set up the filtering accordingly, using the new
13     with-filtered-execute-program macro.
14    
15     * code/options.lisp (*nofilt-option*): New variable.
16     (filter-mcvs-options): Parse out "nofilt" and set value of
17     *nofilt-option*.
18    
19     2006-11-26 Kaz Kylheku <kkylheku@gmail.com>
20    
21 kaz 1.300 Implement process pipes. This feature is quite different from
22     CLISP's make-pipe-*-stream because it doesn't exec a different
23     process image in the child. Rather, the child process evaluates
24     an arbitrary Lisp expression. Special trickery is used to ensure
25     that both the *standard-output* and file descriptor 1 are
26     redirected (or, *standard-input* and file descriptor 0 in the
27     case of an input pipe), so that the process /can/ spawn child
28     programs, as well as use the standrad Lisp file streams, all being
29     correctly redirected.
30    
31     * code/clisp-unix.lisp (process-pipe): New struct.
32     (create-process-pipe, close-process-pipe): New functions.
33     (*default-execute-filter*): New special variable. This can be set
34     in order to automatically add an input or output pipe to a
35     process spawned by the execute-program function.
36     (execute-program): Observe the value of *default-execute-filter*
37     and set up a pipe as required. This means that an additional process
38     is spawned, which handles output from the command being run, or
39     possibly supplied input to it.
40     (with-filtered-execute-program): Macro which sets up the
41     *default-execute-filter* dynamic variable, using syntax which is
42     similar to that of create-process-pipe. The macro asserts that
43     in this dynamic scope, calls to execute-program will set up such and
44     such a filter. A boolean variable additionally controls whether the
45     construct has any effect at all, allowing it to be turned on and
46     off.
47    
48     2006-11-26 Kaz Kylheku <kkylheku@gmail.com>
49    
50 kaz 1.299 Fix for new issue. CLISP now sets up some restarts, which ANSI
51     CL allows. Meta-CVS previously assumed that if there are any
52     restarts visible, they were set up by Meta-CVS itself. The
53     manifestation of this problem is that there is /always/ a menu,
54     even for trivial errors which should just terminate.
55    
56     * code/error.lisp (mcvs-error-handler): Filter the output of
57     compute-restarts to only work with restarts that are named by symbols
58     from the META-CVS package.
59    
60     2006-11-26 Kaz Kylheku <kkylheku@gmail.com>
61    
62 kaz 1.298 Bugfix and enhancmenet in new CLISP FFI module.
63    
64     * code/clisp-ffi.lisp (pipe): New call-out function added.
65     (spawn): Fix reversed result comparison.
66     (defpackage): Export some new symbols.
67    
68     2006-11-26 Kaz Kylheku <kkylheku@gmail.com>
69    
70 kaz 1.297 Bugfix and enhancement in mcvs-filt.
71    
72     * code/mcvs.filt (mcvs-filt-loop): When a "/F-" pattern is found,
73     suggesting a F- name embedded in a path, the algorithm was skipping
74     ahead from that position by 7 characters instead of 3. That's because
75     that pattern used to be the 7 character "MCVS/F-" string long ago.
76     The enhancement is that the F- names are now not filtered if they
77     immediately follow a ".#", which is part of the prefix used by CVS
78     for naming backup files. The names must not be decoded in this context
79     since the backup files are not mapped to human-readable names.
80    
81 kaz 1.291 2006-11-23 Kaz Kylheku <kkylheku@gmail.com>
82    
83 kaz 1.296 Introduce mcvs-debug tool for reproducing Meta-CVS problems in
84     a debugging environment.
85    
86     * code/main.lisp (mcvs-execute): The setup of *interactive-error-io*
87     and *mcvs-error-treatment* is no longer done here, but in the caller.
88     Setting these here interferes with debugging.
89     (mcvs-debug-shell): Removed.
90     (main): Dependency on CLISP removed. Sets up *interactive-error-io*
91     and *mcvs-error-treatment* as mcvs-execute did previously.
92     Return value from mcvs-execute is now ignored.
93     (main-debug): New function. Sets *interactive-error-io* to
94     *terminal-io*, and *mcvs-error-treatment* to :decline.
95     Otherwise behaves like main.
96    
97     * code/install.sh: Create mcvs-debug.mem in lib directory, and
98     mcvs-debug in bin directory. In mcvs-debug, the debugger is enabled
99     by passing ``-on-debug debug'' to CLISP.
100    
101     * code/package.lisp (defpackage): Export main-debug.
102    
103     2006-11-23 Kaz Kylheku <kkylheku@gmail.com>
104    
105 kaz 1.295 * code/package.lisp (defpackage): Use keywords instead of strings.
106    
107     2006-11-23 Kaz Kylheku <kkylheku@gmail.com>
108    
109 kaz 1.294 Get rid of the ffi-pointer-null stuff, since c-pointer foreign types
110     are automatically converted to null now.
111    
112     * code/clisp-ffi.lisp (null-pointer-p): Function removed.
113    
114     * code/clisp-unix.lisp (pointer-null, null-to-nil, when-not-null):
115     macros removed.
116     (opendir, closedir): Revert to normal Lisp null checks.
117    
118     2006-11-23 Kaz Kylheku <kkylheku@gmail.com>
119    
120 kaz 1.293 Stylistic change.
121    
122     * code/add.lisp: Change in-package calls not to use the all-caps
123     "META-CVS" string string, but rather the :meta-cvs keyword.
124     * code/branch.lisp: Likewise.
125     * code/chatter.lisp: Likewise.
126     * code/checkout.lisp: Likewise.
127     * code/clisp-unix.lisp: Likewise.
128     * code/cmucl-unix.lisp: Likewise.
129     * code/convert.lisp: Likewise.
130     * code/create.lisp: Likewise.
131     * code/dirwalk.lisp: Likewise.
132     * code/error.lisp: Likewise.
133     * code/execute.lisp: Likewise.
134     * code/filt.lisp: Likewise.
135     * code/find-bind.lisp: Likewise.
136     * code/generic.lisp: Likewise.
137     * code/grab.lisp: Likewise.
138     * code/link.lisp: Likewise.
139     * code/main.lisp: Likewise.
140     * code/mapping.lisp: Likewise.
141     * code/memoize.lisp: Likewise.
142     * code/move.lisp: Likewise.
143     * code/multi-hash.lisp: Likewise.
144     * code/options.lisp: Likewise.
145     * code/paths.lisp: Likewise.
146     * code/print.lisp: Likewise.
147     * code/prop.lisp: Likewise.
148     * code/purge.lisp: Likewise.
149     * code/rcs-utils.lisp: Likewise.
150     * code/remap.lisp: Likewise.
151     * code/remove.lisp: Likewise.
152     * code/restart.lisp: Likewise.
153     * code/restore.lisp: Likewise.
154     * code/seqfuncs.lisp: Likewise.
155     * code/slot-refs.lisp: Likewise.
156     * code/split.lisp: Likewise.
157     * code/sync.lisp: Likewise.
158     * code/types.lisp: Likewise.
159     * code/unix.lisp: Likewise.
160     * code/update.lisp: Likewise.
161     * code/watch.lisp: Likewise.
162    
163     2006-11-23 Kaz Kylheku <kkylheku@gmail.com>
164    
165 kaz 1.292 Rewrote the CLISP bindings. The CLISP FFI is used to directly
166     access the glibc shared library on Linux. This completely eliminates
167     the need to create a custom linking set. Meta-CVS can now be built
168     without any C development tools. The downside is that the the FFI
169     definitions are not portable, since they depend on the glibc ABI.
170     Support for other C libraries has to be hacked in the clisp-ffi.lisp
171     module now. The main() hack is gone now too.
172    
173     * code/unix-bindings/link.sh: Removed.
174     * code/unix-bindings/Makefile: Likewise.
175     * code/unix-bindings/wrap.c: Likewise.
176    
177     * code/unix-bindings/unix.lisp: Renamed to
178     code/unix-bindings/clisp-ffi.lisp. Contains revamped FFI definitions
179     targetting Linux glibc.
180    
181     * code/install.sh: Substantially simplified. No longer builds a CLISP
182     linking set. No longer builds the mcvs-upgrade tool, which is not
183     useful any longer. Error tests eliminated with use of ``set -e''.
184 kaz 1.291
185 kaz 1.292 * code/mcvs.lisp: Updated to load everything properly.
186 kaz 1.291
187 kaz 1.290 2004-12-16 Kaz Kylheku <kaz@ashi.footprints.net>
188    
189     Add hack to get our own main() function which calls the one
190     inside CLISP.
191    
192     * code/unix-bindings/link.sh: Add objcopy hack.
193    
194     * code/unix-bindings/wrap.c (main): New function.
195    
196 kaz 1.289 2004-12-10 Kaz Kylheku <kaz@ashi.footprints.net>
197    
198     Get rid of CLISP 2.27 support.
199    
200     * code/unix-bindings/unix.lisp (null-pointer-p): Function removed.
201    
202     * code/clisp-unix.lisp: The :clisp-old symbol no longer conditionally
203     pushed onto *features*
204     (pointer-null): Just version of the macro present; no more
205     read-time switch.
206    
207 kaz 1.288 2004-07-25 Kaz Kylheku <kaz@ashi.footprints.net>
208    
209     * code/unix-bindings/unix.lisp: Get rid of bogus version check
210     which assumes that the version can be read as a floating point
211     number! Rather than rely on the version, check for the specific
212     features.
213    
214 kaz 1.285 2004-03-07 Kaz Kylheku <kaz@ashi.footprints.net>
215    
216 kaz 1.287 * code/install.sh: Generated mcvs-upgrade script cleans away
217     old Meta-CVS package and does garbage collection.
218    
219     2004-03-07 Kaz Kylheku <kaz@ashi.footprints.net>
220    
221 kaz 1.285 Revamped loading system. Got rid of require/provide in all
222     Lisp source files.
223    
224     * code/mcvs.lisp: New file. Responsible for compiling and loading
225     everything in the right order.
226    
227     * code/mcvs-main.lisp: File renamed to main.lisp.
228    
229     * code/mcvs-package.lisp: File renamed to package.lisp.
230    
231     * code/system.lisp: File removed.
232    
233 kaz 1.286 * code/install.sh: Use module mcvs for compiling and loading.
234    
235 kaz 1.284 2004-02-03 Kaz Kylheku <kaz@ashi.footprints.net>
236    
237     * docs/Meta-CVS-PAPER.txt: Revising and editing.
238    
239 kaz 1.283 2004-02-02 Kaz Kylheku <kaz@ashi.footprints.net>
240    
241     * code/convert.lisp (mcvs-convert): Ensure that the converted
242     project has TYPES and .cvsignore files, not just a MAP, and that
243     these have all the branch and version tags. This is important,
244     because users might end up independently adding these on branches
245     and end up with merge problems.
246    
247 kaz 1.281 2004-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
248    
249 kaz 1.282 * code/clisp-unix.lisp (current-dir-restore): An inner macro
250     called in-original-dir is now visible to the body enclosed in
251     current-dir-restore. This allows the current directory to be
252     temporarily escaped back to the original directory.
253    
254     * code/convert.lisp (mcvs-convert): Fixed to no longer assume
255     that the target directory is a sibling of the source. The two can be
256     located anywhere.
257     (*convert-help*): Revise text.
258 kaz 1.281
259 kaz 1.282 2004-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
260    
261     * code/remap.lisp (mcvs-remap): Provide a restart for continuing
262     in the case when an F- file is referenced in the MAP, but no
263     working copy of it exists. By continuing through all these
264     errors, the MAP is cleaned of the nonexistent entries, which
265     provies a way to clean up after the naive ``mcvs convert''
266     algorithm.
267    
268     * code/convert.lisp (*convert-help*): Add text recommending the use
269 kaz 1.281 of ``mcvs remap'' to clean up.
270    
271     2004-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
272    
273 kaz 1.282 * code/convert.lisp (mcvs-convert): RCS files that are in an Attic
274 kaz 1.281 subdirectory in the source CVS project end up in the Attic
275     directory of the target Meta-CVS project.
276     (remove-attic-component): Return second value that indicates
277     whether the Attic component was stripped.
278    
279 kaz 1.278 2004-01-28 Kaz Kylheku <kaz@ashi.footprints.net>
280    
281 kaz 1.282 * code/convert.lisp (mcvs-convert): Skip CVS directories.
282 kaz 1.280 In the repository, these contain things like watcher and editor lists,
283     which probably should not be be replicated in the Meta-CVS sandbox.
284     Sort the newly created MAP properly.
285     (remove-attic-component): If input is "Attic", produce ".".
286    
287     2004-01-28 Kaz Kylheku <kaz@ashi.footprints.net>
288    
289 kaz 1.279 More convert-related changes.
290    
291 kaz 1.282 * code/mcvs-main.lisp (*mcvs-command-table*): Add *convert-help*.
292 kaz 1.279
293 kaz 1.282 * code/convert.lisp (mcvs-convert): Bugfix: failure to increment
294 kaz 1.279 branch number by two to generate unique branch tags.
295     Bugfix: paths going into MAP must be canonicalized.
296     (*convert-help*): New string constant.
297    
298     2004-01-28 Kaz Kylheku <kaz@ashi.footprints.net>
299    
300 kaz 1.278 * code/execute.lisp (execute-program-xargs): In the case that
301     there are no variable args passed, the fixed trailing args should
302     still be passed to the command.
303    
304     2004-01-28 Kaz Kylheku <kaz@ashi.footprints.net>
305    
306     Fixes to convert command to make it useable.
307    
308     * code/posix.lisp (suffix): Return dir name as additional value.
309    
310     * code/convert.lisp (remove-attic-component): Rewrite with
311     different semantics.
312     (mcvs-convert): Fix path handling bug whereby basenames
313     instead of full paths were written to MAP file.
314     Don't call rcs to make tags when there are none.
315     Extra tracing to tell user what is going on.
316    
317 kaz 1.276 2004-01-26 Kaz Kylheku <kaz@ashi.footprints.net>
318    
319 kaz 1.277 * code/grab.lisp (mcvs-grab): Bugfixes to repeated grab over
320     partial sandbox: abstract path instead of real path used for
321     reading new symbolic link targets, and execute permissions.
322    
323     2004-01-26 Kaz Kylheku <kaz@ashi.footprints.net>
324    
325 kaz 1.276 * code/branch.lisp (equal-sticky): Add missing cases for handling
326     the valid tag value NIL.
327    
328 kaz 1.273 2004-01-08 Kaz Kylheku <kaz@ashi.footprints.net>
329    
330 kaz 1.275 * code/link.lisp (*link-help*): Grammar fix.
331    
332     2004-01-08 Kaz Kylheku <kaz@ashi.footprints.net>
333    
334 kaz 1.274 * code/options.lisp (process-cvs-options): Update
335     --version copyright message to 2004.
336    
337     2004-01-08 Kaz Kylheku <kaz@ashi.footprints.net>
338    
339 kaz 1.273 Parsing directory sticky tag from CVS/Tag requires
340     slightly different logic from the sticky tags in CVS/Entries.
341     CVS/Entries doesn't distinguish branch and version
342     sticky tags.
343    
344     This change gets rid of the incorrect warning about
345     not all files being on the same tag when the working
346     copy is sticky to a version tag.
347    
348     * code/branch.lisp (parse-sticky): Function renamed to
349     parse-dir-sticky.
350     (parse-entries-sticky): New function.
351     (equal-sticky): New function.
352     (read-cvs-entries): Use parse-entries-sticky.
353     (same-tag-check): Use equal-sticky instead of equal.
354     (what-are-we-sticky-to): Use parse-dir-sticky.
355    
356     2004-01-08 Kaz Kylheku <kaz@ashi.footprints.net>
357    
358     Cleanup.
359    
360     * code/grab.lisp (*grab-help*): Spelling error.
361    
362     * code/system.lisp: Require posix module before clisp-unix,
363     which wants it.
364    
365     * code/clisp-unix.lisp: Don't bother requiring posix,
366     since it comes from system.
367     Require "chatter" rather than "chatter.lisp"; this is why
368     were not getting the compiled version of this module
369     into the images.
370    
371     2004-01-08 Kaz Kylheku <kaz@ashi.footprints.net>
372    
373     Upgrade to CLISP 2.32.
374    
375     * code/unix-bindings/unix.lisp: If the CLISP version is
376     newer than 2.31 then set the variables ffi::*output-c-functions*
377     and ffi::*output-c-variables* to get the old translator
378     behavior.
379    
380     * code/rcs-utils.lisp: We can't use #s read syntax for
381     specifying an rcs-token structure literal, because
382     we have not specialized make-load-form. This used to
383     work anyway but now breaks under CLISP 2.32.
384    
385 kaz 1.272 2003-07-15 Kaz Kylheku <kaz@ashi.footprints.net>
386    
387     * code/mcvs-generic.lisp (mcvs-generic): Removed
388     the default-include-meta-files keyword parameter.
389     (mcvs-tag, mcvs-commit): Remove use of keyword parameter.
390     This fixes the silly behavior of including meta files
391     even when the command line specifies a file list.
392     Also, bugfix: *nometa-option* now works when
393     global-if-empty-file-list is true, and there are no files.
394    
395     * code/update.lisp (mcvs-update): Remove use of keyword
396     parameter in call to mcvs-generic.
397    
398 kaz 1.270 2003-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
399    
400 kaz 1.271 Based on a patch from Walter C. Pelissero <walter@pelissero.de>
401    
402 kaz 1.270 * code/mcvs-main.lisp (with-open-file-ignore-errors): New macro.
403     (mcvs-execute): Use new macro to properly handle opening the
404     controlling terminal when there are errors other than
405     the non-existence of the object.
406    
407     2003-06-12 Kaz Kylheku <kaz@ashi.footprints.net>
408    
409     * code/mcvs-main.lisp (mcvs-help): Move some special declarations
410     out of the function to the top level.
411    
412 kaz 1.269 2003-05-25 Kaz Kylheku <kaz@ashi.footprints.net>
413    
414     * code/filt.lisp (mcvs-filt-loop): Do not filter F- names that
415     are embedded in paths (preceded by a slash). This supersedes
416     the old behavior which was to avoid filtering F- names preceded
417     by "MCVS/".
418    
419 kaz 1.268 2003-04-30 Kaz Kylheku <kaz@ashi.footprints.net>
420    
421     * code/generic.lisp (mcvs-generic): The after-synchronization
422     was going in both directions rather than just MCVS -> tree.
423    
424     2003-04-30 Kaz Kylheku <kaz@ashi.footprints.net>
425    
426     * code/mcvs-main.lisp (mcvs-execute): If not able to open controlling
427     tty, emit some warning messages that interactive error handling is
428     disabled. This alerts users to problems, like missing /dev directory
429     on Cygwin.
430    
431 kaz 1.267 2003-04-24 Kaz Kylheku <kaz@ashi.footprints.net>
432    
433     * docs/generate.sh: Use valid shell syntax for identifiers.
434    
435     2003-04-24 Kaz Kylheku <kaz@ashi.footprints.net>
436    
437     * code/mcvs-main.lisp (mcvs-execute): Bugfix: add missing OPEN
438     option to avoid trying to create the controlling terminal device
439     if it does not exist, and yield NIL as expected.
440    
441 kaz 1.265 2003-04-23 Kaz Kylheku <kaz@ashi.footprints.net>
442    
443 kaz 1.266 New commands, sync-from-cvs and sync-to-cvs.
444    
445     * code/mcvs-main.lisp (*sync-to-cvs-options*, *sync-from-cvs-options*):
446     New option constants.
447     (*mcvs-command-table*): New entries.
448     (*usage*): New help text.
449    
450     * code/generic.lisp (mcvs-generic): New keyword parameter
451     no-invoke-cvs.
452     (mcvs-sync-to-wrapper, mcvs-sync-from-wrapper): New functions.
453    
454     2003-04-23 Kaz Kylheku <kaz@ashi.footprints.net>
455    
456 kaz 1.265 Improved error handling again in a flash of sanity. The whole
457     idea of ``bail'' as a restart is gone. All code which must perform
458     some complex cleanup action does so as part of normal unwinding.
459     And so termination becomes safe.
460    
461     * code/update.lisp (mcvs-update): Change bail restart to continue.
462    
463     * code/mcvs-main.lisp (*global-options*): Remove "error-bail".
464     (*usage*): Remove description of --error-bail.
465     (mcvs-execute): Bind *mcvs-error-treatment* to :terminate rather
466     than :bail if controlling TTY cannot be opened.
467    
468     * code/move.lisp (mcvs-move): Change "Undoing move" error message
469     to "Undoing changes to map".
470    
471     * code/add.lisp (mcvs-add): Get rid of bail restart; move cleanup
472     code into unwind-protect block.
473    
474     * code/error.lisp (*mcvs-error-treatment*): Touch up docstring.
475     (mcvs-error-handler): Remove anything having to do with :bail.
476     Change description of `T' command to suggest that it is safe.
477    
478     * code/options.lisp (filter-mcvs-options): Remove handling of
479     "error-bail" option.
480    
481     * code/mapping.lisp (mapping-update): Get rid of outermost
482     restart-case, which had just a bail restart. Replace it with
483     unwind-protect block which does exactly the same restoration.
484    
485 kaz 1.264 2003-04-22 Kaz Kylheku <kaz@ashi.footprints.net>
486    
487     Improved error handling. Use of tty for user interaction, plus
488     new global option for selecting non-interactive bail behavior.
489    
490     * code/mcvs-main.lisp (*global-options*): add --error-bail option.
491     (*usage*): Describe new option.
492     (mcvs-execute): Dynamically bind *interactive-error-io* variable
493     to a stream formed by opening the controlling tty.
494     Send error message to *error-output* rather than *standard-output*.
495    
496     * code/unix-bindings/unix.lisp (unix-funcs:ctermid): New function,
497     FFI interface to mcvs_ctermid.
498    
499     * code/unix-bindings/wrap.c (mcvs_ctermid): New function.
500    
501     * code/chatter.lisp (chatter): Chatter now goes to *error-output*
502     rather than *standard-output*.
503    
504     * code/error.lisp (*interactive-error-io*): New special variable,
505     holds stream open to controlling tty.
506     (mcvs-terminate): New function.
507     (mcvs-error-handler): Use *interactive-error-io* to print menu
508     and obtain user input. Support the :bail value of
509     *mcvs-error-treatment* Plus some cosmetic changes.
510    
511     * code/options.lisp (filter-mcvs-options): Support --error-bail option.
512    
513     * code/filt.lisp (mcvs-filt-loop): Bugfix, (read-line t ...)
514     should be (read-line *standard-input* ...) because t stands
515     for *terminal-io* rather than *standard-io*, unlike in the
516     format function!
517    
518     * code/rcs-utils.lisp (rcs-read-token): Read from *standard-input*
519     rather than *terminal-io*.
520    
521    
522 kaz 1.263 2003-04-21 Kaz Kylheku <kaz@ashi.footprints.net>
523    
524     Slightly redesigned error handling protocol.
525    
526     * code/update.lisp (mcvs-update): Change continue restart to bail.
527    
528     * code/add.lisp (mcvs-add): Likewise.
529    
530     * code/error.lisp (mcvs-error-handler): Specially recognize two
531     additional restart symbols, bail and info. A bail restart performs
532     any rolling back and cleanup and terminates. Continuation is now
533     properly reserved for actions that proceed boldly to finish
534     the job, possibly irretrievably clobbering precious data.
535     The info restart is now a standard way to indicate that more
536     details about the error can be obtained, so this does not have
537     to be represented as a special action with an ad-hoc restart.
538    
539     * code/create.lisp (mcvs-create): Change show restart to info.
540    
541     * code/remap.lisp (mcvs-remap): Change ignore restart to continue.
542    
543     * code/mapping.lisp (mapping-update): Change ignore and do-clobber
544     restarts to continue, and print-clobbers restart to info.
545     Change continue restart to bail.
546    
547 kaz 1.262 2003-04-14 Kaz Kylheku <kaz@ashi.footprints.net>
548    
549     New command, remote-filt.
550    
551     * code/mcvs-main.lisp (*remote-filt-options*): New option constant.
552     (*mcvs-command-table*): Entries for new command added.
553     (*usage*): Help text added.
554    
555     * code/filt.lisp (filt-select-map): New keyword parameter for
556     specifing repository module. CVS up -p or co -p command generated
557     accordingly. Also, little glitch fixed: the local case descends
558     into the MCVS directory, to avoid a warning message that occurs
559     when CVS is used in server mode.
560     (mcvs-filt-loop): New function, contains most of the old mcvs-filt
561     function body.
562     (mcvs-filt): Calls new mcvs-filt-loop to do actual filtering work.
563     (mcvs-remote-filt, mcvs-remote-filt-wrapper): New functions.
564    
565     * code/clisp-unix.lisp (with-input-from-program): Macro changed
566     to include debug tracing of the invoked command.
567    
568 kaz 1.261 2003-04-13 Kaz Kylheku <kaz@ashi.footprints.net>
569    
570     * code/grab.lisp (read-word-hash): Convert each token to a simple
571     string object. This can save a lot of memory when large numbers
572     of files have to be analyzed.
573    
574 kaz 1.260 2003-04-12 Kaz Kylheku <kaz@ashi.footprints.net>
575    
576     * code/mapping.lisp (mapping-read): Provide a restart for
577     file errors, which lets the user interactively substitute an
578     empty map if the file can't be read. This is intended to handle
579     the case when MCVS/MAP is missing; for example, the user
580     updated to a sticky date for which no revision of the MAP
581     exists. The effect of continuing will be that all files
582     will disappear.
583    
584     2003-04-12 Kaz Kylheku <kaz@ashi.footprints.net>
585    
586     Revamped the synchronization logic. Synchronization now happens
587     in a specific direction. For example, if we are doing a diff,
588     we just need to push changes from the tree to the MCVS directory,
589     not the other way around. Or: before an update or commit, we push from
590     the tree to MCVS, then after the update, in the other direction.
591    
592     * code/update.lisp (mcvs-update): The before update is done
593     in the :left direction only, and the after update in the :right.
594    
595     * code/move.lisp (mcvs-move): The just-in-case sync is done
596     in the :left direction only.
597    
598     * code/link.lisp (mcvs-link): Likewise.
599    
600     * code/remove.lisp (mcvs-remove): Likewise.
601    
602     * code/add.lisp (mcvs-add): Get rid of mapping-synchronize call;
603     it's completely unnecessary, since the new files are not even
604     in the MAP-LOCAL, and the add logic explicitly links them into
605     the MCVS directory.
606    
607     * code/generic.lisp (mcvs-generic): New keyword parameter,
608     need-sync-before. Before-synchronization done in :left direction,
609     after-synchronization in :right direction. Before-synchronization
610     is now not done by default; need-sync-before must be specified.
611     (mcvs-commit-wrapper): Specify before and after sync.
612     (mcvs-diff-wrapper, mcvs-status-wrapper,
613     mcvs-edit-wrapper): Explicitly specify before sync.
614     (mcvs-tag-wrapper, mcvs-annotate-wrapper): Implicitly specify no sync.
615     (mcvs-unedit-wrapper): Add before sync.
616    
617     * code/sync.lisp (synchronize-files): New key parameter :direction,
618     values can be :left, :right or :either. Default is :either.
619     If the value is :left or :right, then a sync is done only in that
620     direction, otherwise the value :no-sync is returned.
621     Behavior change: if the left file is missing (F- file in MCVS
622     directory) it is not re-created, but rather :no-sync is returned.
623     Also, if both files exist, have the same timestamp, and are
624     distinct objects, if the direction is :left or :right, then
625     the appropriate restart is automatically chosen. So this will
626     do the right thing on filesystems where link() is performed by
627     copying, without bothering the user with the error.
628    
629     * code/mapping.lisp (mapping-synchronize): New :direction key
630     parameter, passed down to synchronize-filed. The new :no-sync
631     return value from synchronize-files is handled.
632     (mapping-update): Select the :right direction for synchronizing
633     moves, adds or rollbacks.
634    
635 kaz 1.259 2003-04-06 Kaz Kylheku <kaz@ashi.footprints.net>
636    
637     * code/execute.lisp (execute-program-xargs): Fix again: perform
638     all of the split command lines, even if some of them fail.
639     The returned status is a logical AND combination; if all of the
640     subcommands succeeded then it's T, otherwise NIL.
641    
642    
643 kaz 1.258 2003-03-31 Kaz Kylheku <kaz@ashi.footprints.net>
644    
645     * code/execute.lisp (execute-program-xargs): Bugfix: if program
646     execution fails, then bail out of the entire function, not just
647     the inner loop. Otherwise the program is wrongly run again,
648     on a bogus file list.
649    
650 kaz 1.257 2003-03-04 Kaz Kylheku <kaz@ashi.footprints.net>
651    
652     * code/update.lisp (mcvs-update): Simplified restart code.
653    
654     2003-03-04 Kaz Kylheku <kaz@ashi.footprints.net>
655    
656     * code/restart.lisp (parse-restart-case-keywords): New function.
657     (super-restart-case-expander): Some logic factored out
658     into new function.
659    
660 kaz 1.256 2003-03-03 Kaz Kylheku <kaz@ashi.footprints.net>
661    
662     * code/mapping.lisp (mapping-update): Rewrite restart-bind
663     block using super-restart-case.
664    
665 kaz 1.254 2003-03-01 Kaz Kylheku <kaz@ashi.footprints.net>
666    
667 kaz 1.255 * code/restart.lisp (super-restart-case-expander): Roll the
668     functionality of :report-format into :report.
669     (super-restart-case): Slight rearrangement of the tagbody
670     to eliminate the skip around the out-code.
671    
672     2003-03-01 Kaz Kylheku <kaz@ashi.footprints.net>
673    
674 kaz 1.254 * code/restart.lisp (super-restart-case-expander): New function.
675     (super-restart-case): New macro.
676    
677     * code/create.lisp (mcvs-create): Rewrite a restart-bind
678     construct more succinctly using super-restart-case.
679    
680 kaz 1.253 2003-02-26 Kaz Kylheku <kaz@ashi.footprints.net>
681    
682     * code/create.lisp (mcvs-create): After the TYPES file is
683     edited, scan the MCVS directory for unexpected files.
684     The intent is to detect text editor backups. If any are
685     found, some interactive error handling lets the user acknowledge
686     their deletion. If they are not deleted, then cvs import will
687     bring them into the repository. This behavior was discovered
688     by Johannes Grødem who suggested that it could be handled.
689    
690 kaz 1.252 2003-02-25 Kaz Kylheku <kaz@ashi.footprints.net>
691    
692     * code/unix-bindings/wrap.c (mcvs_spawn): One more waitpid() bug!
693     The SIGCHLD signal handler was being set in the child process only,
694     so although we fixed the waitpid() behavior in the CVS child
695     process, we did not fix it in the Meta-CVS process. The ECHILD
696     problem was sporadically reproduced by Johannes Grødem on a fast
697     Athlon machine; it requires CVS to exit before Meta-CVS reaches
698     the waitpid() call.
699    
700 kaz 1.251 2003-02-24 Kaz Kylheku <kaz@ashi.footprints.net>
701    
702     * code/options.lisp (format-opt): Some one-argument options of
703     CVS must appear as one command parameter, with no separation
704     between the option letter and the argument characters.
705     For example, ``cvs log -r foo::bar'' is invalid, it must
706     be ``cvs log -rfoo::bar''. The format-opt function now
707     formats *all* one-letter options that have one argument
708     as one string.
709    
710 kaz 1.250 2003-02-23 Kaz Kylheku <kaz@ashi.footprints.net>
711    
712     * code/mcvs-main.lisp (*usage*): Add help text for --up option.
713    
714    
715 kaz 1.249 2003-02-20 Kaz Kylheku <kaz@ashi.footprints.net>
716    
717     Fix remaining occurences of SIG_IGN action for SIGCHLD being
718     passed to child processes.
719    
720     * code/unix-bindings/unix.lisp (unix-funcs:default-sigchld): New call
721     out function.
722    
723     * code/clisp-unix.lisp (with-input-from-program,
724     with-output-to-program): Call the new default-sigchild function
725     to set SIGCHILD signal handler to SIG_DFL just before creating
726     the pipe.
727    
728     * code/unix-bindings/wrap.c (mcvs_default_sigchld): New function.
729    
730 kaz 1.248 2003-02-17 Kaz Kylheku <kaz@ashi.footprints.net>
731    
732     Fix portability mistakes.
733    
734     * code/grab.lisp (read-word-hash): Use the standard code-char
735     function instead of the int-char CLISP extension.
736    
737     * code/branch.lisp (parse-sticky, mcvs-list-branches): Use the
738     portable subseq function instead of CLISP's ext::substring.
739    
740 kaz 1.246 2003-02-12 Kaz Kylheku <kaz@ashi.footprints.net>
741    
742 kaz 1.247 New --up option added for escaping out of nested sandboxes.
743    
744     * code/mcvs-main.lisp (*cvs-options*): Added "up" 1 arg option.
745    
746     * code/options.lisp (*nesting-escape-option*): New global,
747     default value 0.
748     (filter-mcvs-options): Filter new option, parse out and validate
749     integer argument.
750    
751     * code/mapping.lisp (mcvs-locate): When searching for MCVS
752     directory, skip N matches, where N is the value of
753     *nesting-escape-option*.
754    
755     2003-02-12 Kaz Kylheku <kaz@ashi.footprints.net>
756    
757     * code/mcvs-main.lisp (*cvs-options*): Constant renamed
758     to *global-options*.
759    
760     2003-02-12 Kaz Kylheku <kaz@ashi.footprints.net>
761    
762 kaz 1.246 * code/unix-bindings/wrap.c (mcvs-spawn): In the child process,
763     reset the signal handler for SIGCHLD to SIG_DFL before exec-ing
764     the new image. This is needed because CLISP set it to SIG_IGN,
765     which causes child reaping problems in spawned programs.
766     This should fix the ``No child processes'' problem when running
767     CVS from Meta-CVS.
768    
769 kaz 1.245 2003-02-11 Kaz Kylheku <kaz@ashi.footprints.net>
770    
771     * code/memoize.lisp (remove-key-aux-rest, strip-lambda-list,
772     extract-tests, remove-tests, memoize-expander, factor-memo-labels,
773     define-memoized-function, memoized-labels): Documentation strings
774     added to this cryptic code.
775    
776 kaz 1.244 2003-02-02 Kaz Kylheku <kaz@ashi.footprints.net>
777    
778     Make tag command work on whole tree if no arguments are given,
779     just like commit.
780    
781     * code/generic.lisp (mcvs-generic): no-fix-empty-filelist keyword
782     parameter renamed to global-if-empty-file-list, which more closely
783     reveals the purpose.
784     (mcvs-commit-wrapper): Use new keyword name.
785     (mcvs-tag-wrapper): Specify T value for :global-if-empty-filelist
786     argument, so the whole project is tagged by default if no arguments
787     are given.
788    
789 kaz 1.243 2003-02-01 Kaz Kylheku <kaz@ashi.footprints.net>
790    
791     * code/unix-bindings/wrap.c (impl_spawn): Try waitpid again in a loop
792     while it returns -1, and errno is EINTR.
793     Reported by Johannes Grødem <johs@copyleft.no>.
794    
795 kaz 1.242 2003-01-30 Kaz Kylheku <kaz@ashi.footprints.net>
796    
797     * code/paths.lisp: Move some (declaim inline) to the correct
798     location, before the function to be inlined.
799    
800     * code/clisp-unix.lisp: Likewise.
801     * code/cmucl-unix.lisp: Likewise.
802     * code/mapping.lisp: Likewise.
803    
804 kaz 1.240 2003-01-25 Kaz Kylheku <kaz@ashi.footprints.net>
805    
806     * code/unix-bindings/wrap.c (mcvs_getcwd): If getcwd() returns
807     NULL, it only means that the buffer is too small if errno is also
808     set to ERANGE. This second condition was not being tested.
809 kaz 1.241 Reported by Johannes Grødem <johs@copyleft.no>.
810 kaz 1.240
811     * code/clisp-unix.lisp (getcwd-error): New condition.
812     (initialize-instance (getcwd-error)): New method.
813     (getcwd): Raise getcwd-error condition if unix-funcs::getcwd
814     returns NIL.
815    
816 kaz 1.239 2003-01-15 Kaz Kylheku <kaz@ashi.footprints.net>
817    
818     * code/unix-bindings/impl.c: File renamed to wrap.c.
819     (impl_null_pointer_p, impl_get_errno, impl_set_errno, impl_readdir,
820     impl_readlink, impl_stat, impl_lstat, impl_fstat, impl_getcwd,
821     impl_spawn): Prefix changed from ``impl_'' to ``mcvs_''.
822    
823     * code/unix-bindings/link.sh, code/unix-bindings/Makefile,
824     code/unix-bindings/unix.lisp: Updated accordingly.
825    
826 kaz 1.237 2003-01-13 Kaz Kylheku <kaz@ashi.footprints.net>
827    
828 kaz 1.238 Support -k CVS option in merge and remerge commands.
829     Reported by Jamie Wellnitz.
830    
831     * code/mcvs-main.lisp (*merge-options*, *remerge-options*): Add
832     one argument -k option.
833    
834     * code/merge.lisp (mcvs-merge): Support extra argument for passing
835     command options. Pass them down to mcvs-update.
836     (mcvs-merge-wrapper, mcvs-remerge-wrapper): Don't ignore command
837     options but pass them to mcvs-merge.
838    
839     2003-01-13 Kaz Kylheku <kaz@ashi.footprints.net>
840    
841 kaz 1.237 * code/install.sh: More fail-safe way to locate library directory;
842     works even when clisp executable is a symlink. Thanks to Sam
843     Steingold, CLISP maintainer, for tip.
844    
845 kaz 1.236 2003-01-12 Kaz Kylheku <kaz@ashi.footprints.net>
846    
847     Hard link sync optimization.
848    
849     * code/mapping.lisp (mapping-synchronize): New optional parameter,
850     specifies map to use instead of reading *map-local*.
851    
852     * code/mcvs-generic.lisp (mcvs-generic): Pass extra parameter to
853     mapping-synchronize to only sync the selected subset of files.
854    
855 kaz 1.235 2003-01-01 Kaz Kylheku <kaz@ashi.footprints.net>
856    
857     * code/unix-bindings/impl.c (impl_spawn): For Cygwin, re-implemented
858     this function as a wrapper for the spawnvp function. The combination
859     of fork + execvp + waitpid does not work because waitpid is broken;
860     it waits for thep rocess, but then returns -1 and sets errno
861     to ECHILD.
862    
863 kaz 1.234 2002-12-27 Kaz Kylheku <kaz@ashi.footprints.net>
864    
865     * code/options.lisp (process-cvs-options): The version number
866     now has three components.
867    
868 kaz 1.233 2002-12-13 Kaz Kylheku <kaz@ashi.footprints.net>
869    
870     * code/install.sh: Now works under CLISP installations which
871     call the CLISP executable lisp.exe rather than lisp.run.
872     This is the case under Cygwin as of CLISP 2.30 or so.
873    
874 kaz 1.232 2002-12-03 Kaz Kylheku <kaz@ashi.footprints.net>
875    
876     * code/sync.lisp (synchronize-files): Call exec-check using
877     file info object, rather than file name. This cuts in half
878     the number of calls to stat().
879    
880     2002-12-03 Kaz Kylheku <kaz@ashi.footprints.net>
881 kaz 1.231
882     Discontinuing use of CLISP's ext:run-program function in favor
883     of a new workalike which doesn't rely on the shell interpreter.
884    
885     * code/unix-bindings/unix.lisp (unix-funcs:spawn): New C call out
886     function (unix-funcs:run-program): New function, implemented using
887     spawn.
888    
889     * code/unix-bindings/impl.c (impl_spawn): New function; wraps
890     up fork, execvp and waitpid.
891    
892     * code/clisp-unix.lisp: Switch from ext:run-program to
893     unix-funcs:run-program.
894    
895 kaz 1.230 2002-11-20 Kaz Kylheku <kaz@ashi.footprints.net>
896    
897     Some security fixes. Funny I didn't think of this sooner!
898    
899     * code/types.lisp (types-read): Make sure *read-eval* is bound to
900     nil when calling READ.
901    
902     * code/mapping.lisp (mapping-read-raw-map, displaced-path-read):
903     Likewise.
904    
905    
906 kaz 1.228 2002-11-16 Kaz Kylheku <kaz@ashi.footprints.net>
907    
908 kaz 1.229 * code/unix.lisp (invoke-editor-on): Honor the CVSEDITOR and VISUAL
909 kaz 1.228 environment variables, not just EDITOR.
910    
911 kaz 1.227 2002-11-09 Kaz Kylheku <kaz@ashi.footprints.net>
912    
913     * code/link.lisp (mcvs-link): Revamped link command to behave properly
914     when the destination object is a directory. It must create the link in
915     that directory, rather than try to create a link with that name.
916     Plus handles various tricky cases. Trailing slash in destination name,
917     destination that is a directory within target directory, attempted
918     link creation in MCVS etc.
919    
920 kaz 1.226 2002-11-03 Kaz Kylheku <kaz@ashi.footprints.net>
921    
922     More support for -n option.
923    
924     * code/mcvs-main.lisp (*usage*): Document -n option.
925    
926     * code/move.lisp (mcvs-move-wrapper): Remove bogus error check
927     for presence of global options.
928    
929     * code/options.lisp (honor-dry-run): New macro for conditionally
930     not executing some forms if it's a dry run, and logging some
931     debugging information.
932    
933     * code/sync.lisp (synchronize-files): Honor dry run.
934    
935     * code/mapping.lisp (mapping-synchronize, mapping-update): Likewise.
936    
937     2002-11-03 Kaz Kylheku <kaz@ashi.footprints.net>
938    
939     Start of support for global option -n (dry run).
940    
941     * code/options.lisp (*dry-run-option*): New boolean variable.
942     (process-cvs-options): Look for -n and set *dry-run-option*.
943    
944     * code/types.lisp (types-write): Do not write file if *dry-run-option*
945     is true.
946    
947     * code/types.lisp (mapping-write): Likewise.
948    
949     * code/add.lisp (mcvs-add): When calling types-let-user-edit,
950     temporarily disable the dry run option, so that TYPES-NEW can
951     be written. When the dry run option is in effect, do not try
952     to cvs add the TYPES file.
953    
954     2002-11-03 Kaz Kylheku <kaz@ashi.footprints.net>
955    
956     * code/branch.lisp (*branch-help*): New string constant.
957    
958     * code/mcvs-main.lisp (*mcvs-command-table*): *branch-help* hooked in.
959    
960     2002-11-02 Kaz Kylheku <kaz@ashi.footprints.net>
961    
962     * code/mcvs-main (*args*, *options*): Unused variables removed.
963     (mcvs-execute): Global option processing code removed.
964    
965     * code/options.lisp (*print-usage*): New boolean variable; tells
966     mcvs-execute to print usage and terminate.
967     (filter-mcvs-options): New function. Does the job that
968     filter-global-options did.
969     (process-cvs-options): Does the global option processing that
970     was previously in mcvs-execute.
971     (filter-global-options): Now just calls filter-mcvs-options,
972     process-cvs-options.
973    
974 kaz 1.225 2002-11-02 Kaz Kylheku <kaz@ashi.footprints.net>
975    
976     * INSTALL: Include caveat about GCC 3 problems.
977    
978 kaz 1.222 2002-10-30 Kaz Kylheku <kaz@ashi.footprints.net>
979    
980 kaz 1.224 * code/prop.lisp (mcvs-prop): If there are no options specified,
981     don't do anything.
982    
983     2002-10-30 Kaz Kylheku <kaz@ashi.footprints.net>
984    
985 kaz 1.223 * code/mcvs-package.lisp: New file, defines META-CVS package.
986    
987     * code/purge.lisp: Put all symbols in new package.
988     * code/restore.lisp: Likewise.
989     * code/paths.lisp: Likewise.
990     * code/install.sh: Likewise.
991     * code/restart.lisp: Likewise.
992     * code/update.lisp: Likewise.
993     * code/move.lisp: Likewise.
994     * code/grab.lisp: Likewise.
995     * code/unix.lisp: Likewise.
996     * code/slot-refs.lisp: Likewise.
997     * code/prop.lisp: Likewise.
998     * code/multi-hash.lisp: Likewise.
999     * code/rcs-utils.lisp: Likewise.
1000     * code/branch.lisp: Likewise.
1001     * code/find-bind.lisp: Likewise.
1002     * code/execute.lisp: Likewise.
1003     * code/link.lisp: Likewise.
1004     * code/split.lisp: Likewise.
1005     * code/watch.lisp: Likewise.
1006     * code/clisp-unix.lisp: Likewise.
1007     * code/add.lisp: Likewise.
1008     * code/chatter.lisp: Likewise.
1009     * code/print.lisp: Likewise.
1010     * code/types.lisp: Likewise.
1011     * code/remove.lisp: Likewise.
1012     * code/convert.lisp: Likewise.
1013     * code/error.lisp: Likewise.
1014     * code/options.lisp: Likewise.
1015     * code/dirwalk.lisp: Likewise.
1016     * code/checkout.lisp: Likewise.
1017     * code/generic.lisp: Likewise.
1018     * code/sync.lisp: Likewise.
1019     * code/create.lisp: Likewise.
1020     * code/memoize.lisp: Likewise.
1021     * code/seqfuncs.lisp: Likewise.
1022     * code/cmucl-unix.lisp: Likewise.
1023     * code/remap.lisp: Likewise.
1024    
1025     * code/mapping.lisp: Put symbols in new package. Replace use
1026     of CLISP specific substring function with subseq.
1027     * code/filt.lisp: Likewise.
1028    
1029     * code/mcvs-main.lisp: Put symbols in new package. The mcvs
1030     function is renamed to main.
1031    
1032     * code/install.sh: Generate mcvs script that uses qualified name
1033     of new startup functiont to start the software.
1034    
1035     2002-10-30 Kaz Kylheku <kaz@ashi.footprints.net>
1036    
1037 kaz 1.222 * code/unix-bindings/unix.lisp: Rewrote defpackage to take only
1038     selected symbols from CLISP's FFI package rather using the whole
1039     thing. FFI, and the packages it uses, are moving targets.
1040     The symbol def-c-call-out is interned in unix-funcs.
1041     (unix-funcs:def-c-call-out): New internal macro. CLISP says that
1042     ffi:def-c-call-out is obsolescent.
1043    
1044     * code/unix-bindings/Makefile: The ``clean'' target removes
1045     unix.lib, not only unix.fas.
1046    
1047 kaz 1.221 2002-10-27 Kaz Kylheku <kaz@ashi.footprints.net>
1048    
1049     Bugfix to the directory restructuring code. A clobbering
1050     file add was not actually removing the clobbered file, but leaving
1051     it up to the synchronization algorithm, so the time-stamp would
1052     decide whether the local file gets clobbered by the repository one,
1053     or whether it wins.
1054    
1055     * code/mapping.lisp (mapping-update): Logic for handling added
1056     file ensures that a clobbered local file is removed first.
1057    
1058 kaz 1.218 2002-10-26 Kaz Kylheku <kaz@ashi.footprints.net>
1059    
1060 kaz 1.220 New link command for creating symlinks.
1061    
1062     * mcvs-main.lisp (*link-options*): New option constant.
1063     (*mcvs-command-table*): Entries for new command added.
1064     (*usage*): Help text added.
1065    
1066     * link.lisp: New file.
1067     (mcvs-link, mcvs-link-wrapper): New functions.
1068    
1069     2002-10-26 Kaz Kylheku <kaz@ashi.footprints.net>
1070    
1071 kaz 1.219 * code/grab.lisp (*grab-help*): Rewritten.
1072    
1073     * code/checkout.lisp (*export-help*): Formatted for 80 columns.
1074    
1075     2002-10-26 Kaz Kylheku <kaz@ashi.footprints.net>
1076    
1077 kaz 1.218 * code/mcvs-main.lisp (*usage*): Expand tabs to spaces.
1078    
1079     * code/add.lisp (*add-help*): Likewise.
1080    
1081     * code/remove.lisp (*remove-help*): Likewise.
1082    
1083     * code/create.lisp (*create-help*): Likewise.
1084    
1085     2002-10-26 Kaz Kylheku <kaz@ashi.footprints.net>
1086    
1087     * code/purge.lisp (mcvs-purge): Get rid the processing of the
1088     nonexistent -n option from purge code. The global option -n does an
1089     adequate job of implementing a dry run.
1090    
1091     2002-10-26 Kaz Kylheku <kaz@ashi.footprints.net>
1092    
1093     * code/mapping.lisp (mapping-removed-files): Skip over the MCVS/CVS
1094     directory, which can contain CVS-generated files with F- names and a ,t
1095     suffix. These trip up the algorithm.
1096    
1097 kaz 1.217 2002-10-21 Kaz Kylheku <kaz@ashi.footprints.net>
1098    
1099     Add help to move command.
1100    
1101     * code/mcvs-main.lisp (*mcvs-command-table*): Added *move-help*.
1102    
1103     * code/move.lisp (*mcvs-help*): New constant.
1104    
1105 kaz 1.216 2002-10-20 Kaz Kylheku <kaz@ashi.footprints.net>
1106    
1107     Fix broken ``filt -r''.
1108    
1109     * code/mapping.lisp (mapping-read-raw-map): New function; reads
1110     map from stream and does sanity check.
1111     (mapping-read): Argument can be a filename or stream. Call to
1112     mapping-read-raw-map to factor out common code for both cases.
1113    
1114     * code/filt.lisp (filt-select-map): This was still just
1115     reading the raw structure from the cvs coprocess, which worked under
1116     the old map format, when the internal and external representations
1117     were the same. Now it calls mapping-read on the stream.
1118    
1119     2002-10-19 Kaz Kylheku <kaz@ashi.footprints.net>
1120    
1121     * UPGRADE-EXISTING: New file.
1122    
1123     2002-10-19 Kaz Kylheku <kaz@ashi.footprints.net>
1124    
1125     * code/mcvs-main.lisp: Clear out *modules* list before requiring
1126     modules. This is needed so that mcvs-upgrade works, because there
1127     is already a populated list in the Lisp image.
1128    
1129 kaz 1.215 2002-10-17 Kaz Kylheku <kaz@ashi.footprints.net>
1130    
1131     Detect failure to start text editor.
1132    
1133     * code/unix.lisp (*editor*, invoke-editor-on): Change name of *editor*
1134     to *mcvs-editor*, due to name-clash with a CLISP extension!
1135    
1136     * code/mcvs-main.lisp (mcvs-execute): Likewise.
1137    
1138     * code/types.lisp (types-let-user-edit): Provide an individual
1139     restart-case block around the invocation of the text editor,
1140     which lets the user re-try the editor.
1141    
1142 kaz 1.210 2002-10-13 Kaz Kylheku <kaz@ashi.footprints.net>
1143    
1144 kaz 1.214 * code/install.sh: generate a script called mcvs-upgrade.
1145    
1146     2002-10-13 Kaz Kylheku <kaz@ashi.footprints.net>
1147    
1148 kaz 1.213 * code/prop.lisp (mcvs-prop): Read *mcvs-map*, not *mcvs-map-local*.
1149    
1150     2002-10-13 Kaz Kylheku <kaz@ashi.footprints.net>
1151    
1152 kaz 1.212 * code/mcvs-main.lisp (*watchers-options*): New constant.
1153     (*edit-options*): Likewise.
1154     (*unedit-options*): Likewise.
1155     (*editors-options*): Likewise.
1156     (*mcvs-command-table*): Added watchers, edit unedit, and editors
1157     commands.
1158     (*usage*): Updated.
1159    
1160     * code/generic.lisp (mcvs-watchers-wrapper, mcvs-edit-wrapper,
1161     mcvs-unedit-wrapper, mcvs-editors-wrapper): New functions.
1162    
1163     2002-10-13 Kaz Kylheku <kaz@ashi.footprints.net>
1164    
1165 kaz 1.211 * code/mcvs-main.lisp (*usage*): Describe export and watch commands.
1166    
1167     2002-10-13 Kaz Kylheku <kaz@ashi.footprints.net>
1168    
1169     * code/mcvs-main.lisp (*watch-options*): New constant.
1170     (*mcvs-command-table*): New entry for watch command.
1171    
1172     * code/watch.lisp: New file.
1173    
1174     2002-10-13 Kaz Kylheku <kaz@ashi.footprints.net>
1175    
1176 kaz 1.210 * code/mcvs-main.lisp (*export-options*): New constant.
1177     (*mcvs-command-table*): New entries for export command.
1178    
1179 kaz 1.211 * code/checkout.lisp (mcvs-checkout): New keyword to specify export
1180     behavior. This causes cvs export to be run instead of checkout,
1181     and the MCVS directory to be deleted after.
1182 kaz 1.210 (mcvs-checkout-wrapper): Common function factored out into a flet.
1183 kaz 1.211 (mcvs-export-wrapper): New function. Verifies that one of -D and -r
1184     options is present, then runs mcvs-checkout, specifying export
1185     behavior.
1186 kaz 1.210
1187 kaz 1.206 2002-10-12 Kaz Kylheku <kaz@ashi.footprints.net>
1188    
1189 kaz 1.209 * code/mcvs-main.lisp (*update-options*): Added -C option.
1190    
1191     * code/update.lisp (mcvs-update): Fall back on the mcvs-generic
1192     if --metaonly or --nometa is specified to run CVS on specific
1193     files.
1194    
1195     2002-10-12 Kaz Kylheku <kaz@ashi.footprints.net>
1196    
1197 kaz 1.208 * code/filt.lisp (mcvs-filt): Do not filter F- names if
1198     immediately preceded by MCVS/ prefix.
1199    
1200     2002-10-12 Kaz Kylheku <kaz@ashi.footprints.net>
1201    
1202     * code/clisp-unix.lisp (execute-program): Provide debug traces
1203     for command execution.
1204    
1205     2002-10-12 Kaz Kylheku <kaz@ashi.footprints.net>
1206    
1207 kaz 1.207 Rethink some decisions in the previous change. Reusing the
1208     name posix.lisp for a new file will cause problems for people
1209     using mcvs grab to keep up with Meta-CVS patches.
1210    
1211     * code/posix.lisp: Renamed to unix.lisp.
1212    
1213     * code/clisp-posix.lisp: Renamed back to clisp-unix.lisp, for
1214     the sake of consistency.
1215    
1216     * code/system.lisp: Updated.
1217    
1218     * code/cmucl.lisp: Likewise.
1219    
1220     Don't call a new file posix.lisp, because
1221     it can create confusion with the old file that used to be called
1222     posix.lisp,
1223    
1224     2002-10-12 Kaz Kylheku <kaz@ashi.footprints.net>
1225    
1226 kaz 1.206 Minor reorganization.
1227    
1228 kaz 1.207 * code/posix.lisp: File renamed to paths.lisp, module renamed
1229     to "paths".
1230 kaz 1.206 (*editor*): Variable removed.
1231     (arglist-to-command-string, execute-programs-xargs,
1232     invoke-editor-on): Functions removed.
1233    
1234 kaz 1.207 * code/posix.lisp: New file.
1235 kaz 1.206 (*editor*): Variable moved here from paths.lisp.
1236     (arglist-to-command-string, invoke-editor-on): Functions moved here
1237     from paths.lisp.
1238    
1239 kaz 1.207 * code/editor.lisp: New file.
1240 kaz 1.206 (*argument-limit*): Variable definition moved here.
1241     (execute-programs-xargs): Function moved here from paths.lisp.
1242    
1243 kaz 1.207 * code/clisp-unix.lisp: Renamed to clisp-posix.lisp.
1244 kaz 1.206 Requires "posix" module now.
1245     (*argument-limit*): Variable removed.
1246    
1247 kaz 1.207 * code/system.lisp: Remove references to old clisp-linux module.
1248 kaz 1.206 Added requires for new paths and execute modules.
1249    
1250 kaz 1.207 * code/cmucl-unix.lisp (*argument-limit*): Variable definition removed.
1251 kaz 1.206
1252 kaz 1.205 2002-10-09 Kaz Kylheku <kaz@ashi.footprints.net>
1253    
1254     * code/add.lisp (*add-help*): Remove spurious text cut and pasted from
1255     checkout help.
1256    
1257 kaz 1.196 2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1258    
1259 kaz 1.204 * code/prop.lisp (mcvs-prop): Result of real-to-abstract-path
1260     must be canonicalized.
1261    
1262     * code/remove.lisp (mcvs-remove): Likewise.
1263    
1264     * code/generic.lisp (mcvs-generic): Likewise.
1265    
1266     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1267    
1268 kaz 1.203 * code/move.lisp (move-guts, mcvs-move): Canonicalize the destination
1269     path in mcvs-move, rather than mcvs-guts.
1270    
1271     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1272    
1273 kaz 1.202 * code/create.lisp (mcvs-create): Add the DISPLACED filename
1274     to the .cvsignore file.
1275    
1276     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1277    
1278 kaz 1.201 * code/posix.lisp (path-prefix-equal): Handle empty strings.
1279    
1280     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1281    
1282 kaz 1.200 * code/move.lisp (move-guts): If an error occurs for each
1283     source in a multiple move, and the user skips each source,
1284     generate the error that all sources were skipped.
1285    
1286     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1287    
1288 kaz 1.199 * code/move.lisp (source-check): Generate error if a move
1289     of the sandbox root is attempted.
1290    
1291     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1292    
1293 kaz 1.198 * code/remap.lisp (mcvs-remap): Preserve property lists of
1294     mapping entries, and pick up changes in execute permission.
1295    
1296     * code/mapping.lisp (mapping-convert-out): If the mapping entry's
1297     executable flag is nil, then remove the :exec entry from the property
1298     list.
1299    
1300     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1301    
1302 kaz 1.197 * code/mapping.lisp (equal-filemaps): Repair completely broken
1303     function.
1304    
1305     * code/move.lisp (mcvs-move): Added little hack for turning
1306     no-op moves into errors. Without this the behavior is confusing,
1307     since the program appears to do nothing.
1308    
1309     2002-10-06 Kaz Kylheku <kaz@ashi.footprints.net>
1310    
1311 kaz 1.196 * code/add.lisp (mcvs-add): Provide a continue restart around
1312     the code that builds up the expanded-paths for each iteration of the
1313     loop. Without this, errors in that code cause the program to bail, even
1314     though errors in the rest of the loop body are continuable.
1315    
1316 kaz 1.189 2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1317    
1318 kaz 1.195 * code/dirwalk.lisp (dirwalk): If the argument is not a directory,
1319     the callback must still be invoked. This was done prior to
1320     a 2002-05-20 commit. I can't quite remember why it was changed;
1321     but I seem to recall thinking about the new dirwalk-skip catch,
1322     and how it must be always visible to the callback closure, so
1323     that the (skip) mechanism works.
1324    
1325     2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1326    
1327 kaz 1.194 * code/add.lisp (mcvs-add): Reshuffle restart to a higher nesting
1328     level, so that an error on one item won't abort the whole operation.
1329    
1330     2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1331    
1332 kaz 1.193 * code/convert.lisp (mcvs-convert): Maintenance so that this tool
1333     at least runs, even though it doesn't do anything resembling a
1334     reasonable conversion job.
1335    
1336     2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1337    
1338 kaz 1.192 * code/clisp-unix.lisp (guid-gen): Changes for Cygwin broke the
1339     case when /dev/urandom is available.
1340    
1341     2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1342    
1343 kaz 1.191 * code/find-bind.lisp (find-bind): Allow empty variable list, as
1344     described by the documented syntax.
1345    
1346     2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1347    
1348 kaz 1.190 * code/error.lisp (mcvs-error-handler): Simplify roundabout way
1349     of printing error message.
1350    
1351     * code/mapping.lisp (mapping-write): Incorporate the low level error
1352     message into the more informative error message.
1353    
1354     2002-10-05 Kaz Kylheku <kaz@ashi.footprints.net>
1355    
1356 kaz 1.189 Error messages no longer specify prefixes like "mcvs:" or
1357     "mcvs-remove:".
1358    
1359     When no restarts are available, the error handler now adds the "mcvs:"
1360     prefix when dumping the error text to the standard error stream,
1361     and also adds a terminating newline.
1362    
1363     The inability to write to the MAP file is converted to a more
1364     informative error message.
1365    
1366     New --debug option is supported to set the chatter level to 3.
1367    
1368     * code/chatter.lisp: Use the symbolic constant when defining the
1369     default chatter level value.
1370    
1371     * code/mcvs-main.lisp (*cvs-options*, mcvs-help, mcvs-execute): Added
1372     support for --debug option, and removed of prefixes from error
1373     messages.
1374    
1375     * code/options.lisp (filter-global-options): Support --debug.
1376     (parse-opt): Removed prefixes from error messages.
1377    
1378     * code/mapping.lisp (mapping-rename-files, mapping-dupe-check,
1379     mapping-convert-in, mapping-synchronize, mapping-update): Removed
1380     prefixes from error messages.
1381     (mapping-write): Trap write error and convert to more informative
1382     error message.
1383    
1384     * code/error.lisp (mcvs-error-handler): In the case when no restarts
1385     are available, format the error message by adding the mcvs: prefix
1386     and a terminating newline.
1387    
1388     * code/purge.lisp (mcvs-purge): Removed prefixes from error messages.
1389    
1390     * code/restore.lisp (mcvs-restore): Likewise.
1391    
1392     * code/move.lisp (move-guts, mcvs-move): Likewise.
1393    
1394     * code/grab.lisp (mcvs-grab): Likewise.
1395    
1396     * code/prop.lisp (mcvs-prop): Likewise.
1397    
1398     * code/filt.lisp (filt-select-map, mcvs-filt): Likewise.
1399    
1400     * code/branch.lisp (where-is-the-repository, mcvs-branch,
1401     cvs-make-or-advance-tag, mcvs-merge, mcvs-list-branches,
1402     mcvs-switch-wrapper): Likewise.
1403    
1404     * code/add.lisp (mcvs-add, mcvs-add): Likewise.
1405    
1406     * code/remove.lisp (mcvs-remove): Likewise.
1407    
1408     * code/convert.lisp (classify-tags, mcvs-convert): Likewise.
1409    
1410     * code/checkout.lisp (mcvs-checkout): Likewise.
1411    
1412     * code/generic.lisp (mcvs-generic, mcvs-diff-wrapper): Likewise.
1413    
1414     * code/create.lisp (mcvs-create, mcvs-create): Likewise.
1415    
1416     * code/remap.lisp (mcvs-remap, mcvs-remap): Likewise.
1417    
1418 kaz 1.188 2002-09-25 Kaz Kylheku <kaz@ashi.footprints.net>
1419    
1420     Minimal changes for building on Cygwin.
1421    
1422     * code/install.sh (space_check, dash_check): Function definitions
1423     modified to conform to bash2.
1424    
1425     * code/clisp-unix.lisp (*have-dev-random*, *mcvs-random-state*):
1426     New special variables.
1427     (guid-gen): Rewritten to fall back on the Common Lisp random
1428     function if /dev/urandom is not available.
1429    
1430 kaz 1.180 2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1431    
1432 kaz 1.187 * code/mcvs-main.lisp (*options*): New variable. Gives
1433     scripts access to to some global options. The *args* variable now
1434     holds only the remaining arguments after the options.
1435     (mcvs-execute): Sets up *args* and *options* accordingly.
1436     No longer parses out the --error-continue and --error-terminate
1437     options.
1438    
1439     * code/options.lisp (filter-global-options): The handling of
1440     --error-continue and --error-terminate is done here. This is
1441     the place to handle options that must be removed (not passed
1442     down to CVS) and which do not trigger immediate actions in
1443     mcvs-execute.
1444    
1445     2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1446    
1447 kaz 1.186 * code/mcvs-main.lisp (*args*): New global variable. Gives
1448 kaz 1.185 scripts access to command line.
1449    
1450     2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1451    
1452 kaz 1.184 * code/mcvs-main.lisp (*cvs-options*): Add -i parameter which
1453     takes the name of a script to invoke.
1454     (*usage*): Updated to describe new option.
1455     (mcvs-execute): Parse out -i option and load the specified file.
1456    
1457     2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1458    
1459 kaz 1.183 * code/install.sh: Don't specify -K full option when running
1460     specific, generated CLISP image already. When generating mcvs.mem,
1461     load the compiled version mcvs-main, rather than mcvs-main.lisp.
1462    
1463     2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1464    
1465 kaz 1.182 * code/install.sh: Check that the installation target path won't
1466     look like a command line option to shell commands.
1467    
1468     2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1469    
1470 kaz 1.181 * code/mcvs-main.lisp (*mcvs-command-table*): Added help for remove.
1471    
1472     * code/remove.lisp (*remove-help*): New string constant.
1473    
1474     2002-09-21 Kaz Kylheku <kaz@ashi.footprints.net>
1475    
1476 kaz 1.180 * code/grab.lisp (mcvs-grab): Inspect the execute permissions
1477     of stable and moved files, and update the :EXEC propery of
1478     their mapping entries accordingly. In other words, grab changes
1479     in execute permissions properly.
1480    
1481 kaz 1.179 2002-09-18 Kaz Kylheku <kaz@ashi.footprints.net>
1482    
1483     * code/restore.lisp (mcvs-restore): Was still generating old-style
1484     mapping entries.
1485    
1486     * code/clisp-unix.lisp (executable-p (string)): New method for
1487     executable-p generic function that takes a filename.
1488    
1489 kaz 1.177 2002-09-17 Kaz Kylheku <kaz@ashi.footprints.net>
1490    
1491 kaz 1.178 * code/install.sh: Check that the installation target path
1492     does not contain any spaces. It cannot, because it is used
1493     in the #! line of an interpreter script. As a consequence of
1494     this check, whitespace precautions in the expansion of $TARGET,
1495     $TARGET_LIB and $TARGET_BIN have been removed.
1496    
1497     2002-09-17 Kaz Kylheku <kaz@ashi.footprints.net>
1498    
1499 kaz 1.177 * code/checkout.lisp (mcvs-checkout): If a subdirectory path
1500     is specified, verify that it is relative, and that it points
1501     within the module.
1502    
1503 kaz 1.175 2002-09-16 Kaz Kylheku <kaz@ashi.footprints.net>
1504    
1505 kaz 1.176 * code/mcvs-main.lisp (*checkout-options*): Removed -A and -N
1506     options.
1507     (*mcvs-command-table*): Added help for checkout and add.
1508    
1509     * code/checkout.lisp (*checkout-help*): New string constant.
1510    
1511     * code/add.help (*add-help*): Likewise.
1512    
1513     * code/create.lisp (*create-help*): Mention interactive file
1514     type specification.
1515    
1516     2002-09-16 Kaz Kylheku <kaz@ashi.footprints.net>
1517    
1518 kaz 1.175 * code/mcvs-main.lisp (*mcvs-command-table*): Add *grab-help*.
1519    
1520     * code/grab.lisp (*grab-help*): New string constant.
1521    
1522 kaz 1.172 2002-09-11 Kaz Kylheku <kaz@ashi.footprints.net>
1523    
1524 kaz 1.174 * code/clisp-linux.lisp: File removed.
1525    
1526     2002-09-11 Kaz Kylheku <kaz@ashi.footprints.net>
1527    
1528 kaz 1.173 Implement help text for create command.
1529    
1530     * code/mcvs-main.lisp (mcvs-help): Fixes.
1531     (*mcvs-command-table*): Add *create-help*.
1532    
1533     * code/create.lisp (*create-help*): New string constant.
1534    
1535     2002-09-11 Kaz Kylheku <kaz@ashi.footprints.net>
1536    
1537 kaz 1.172 Revamping help system to support more detailed help
1538     for individual commands.
1539    
1540     * code/mcvs-main.lisp (mcvs-help): New function.
1541     (*help-options*): New constant.
1542     (*mcvs-command-table*): New entry in each sublist element;
1543     this is either nil, or a string containing help text.
1544     (mcvs-execute): Update to use new table structure.
1545    
1546 kaz 1.171 2002-09-10 Kaz Kylheku <kaz@ashi.footprints.net>
1547    
1548     * code/filt.lisp (mcvs-filt): Bugfix: was trying to
1549     use NIL as if it were a mapping-entry struct after an unsuccessful
1550     gethash.
1551    
1552     2002-09-10 Kaz Kylheku <kaz@ashi.footprints.net>
1553    
1554     Fix installation braindamage. The problem is that
1555     the linkkit material is architecture specific; it was
1556     wrong to copy that from CLISP.
1557    
1558     * code/install.sh (CLISP_PATH, CLISP_ROOT, CLISP_LIB): New
1559     variables, dynamically computed from clisp's location.
1560     The script now runs the clisp-link under $CLISP_LIB rather
1561     than using a replica, and uses $CLISP_LIB/linkkit rather
1562     than a replica linkkit.
1563     (CLISP): Variable renamed to LISPRUN.
1564    
1565     * code/clisp-link: File removed.
1566     * code/linkkit/modules.d: Likewise.
1567     * code/linkkit/modules.c: Likewise.
1568     * code/linkkit/clisp.h: Likewise.
1569    
1570 kaz 1.168 2002-09-08 Kaz Kylheku <kaz@ashi.footprints.net>
1571    
1572 kaz 1.170 Fix mistake dating back to April.
1573    
1574     * code/branch.lisp (mcvs-merge): Symbol T was being invoked
1575     as function in the case that merge is invoked on a sandbox
1576     that is sticky to a non-branch tag.
1577    
1578     2002-09-08 Kaz Kylheku <kaz@ashi.footprints.net>
1579    
1580 kaz 1.169 Another stupid error.
1581    
1582     * code/create.lisp (mcvs-create): Fix use to unbound
1583     variable file-info which should be fi.
1584    
1585     2002-09-08 Kaz Kylheku <kaz@ashi.footprints.net>
1586    
1587 kaz 1.168 Fix stupid error.
1588    
1589     * code/mcvs-main.lisp (*move-options*): New constant.
1590     (*mcvs-command-table*): Fix broken entry for "move" and "mv".
1591    
1592 kaz 1.167 2002-09-07 Kaz Kylheku <kaz@ashi.footprints.net>
1593    
1594     Eliminate inappropriate pluralization in messages.
1595    
1596     * code/grab.lisp (mcvs-grab): Use ~:p to substitute a 's'
1597     if the parameter is other than 1.
1598    
1599     * code/options.lisp (parse-opt): Likewise.
1600    
1601 kaz 1.165 2002-09-06 Kaz Kylheku <kaz@ashi.footprints.net>
1602    
1603 kaz 1.166 * code/prop.lisp (mcvs-prop): Support --value option to
1604     associate an arbitrary value with a property indicator.
1605    
1606     * code/mcvs-main.lisp (*usage*): Describe --value and
1607     clarify syntax.
1608    
1609     2002-09-06 Kaz Kylheku <kaz@ashi.footprints.net>
1610    
1611 kaz 1.165 Unify command option parsing, and enable it to handle options with
1612     any number of required parameters.
1613    
1614     * code/options.lisp (parse-opt): Function rewritten. Argument
1615     syntax and semantics have changed. Options are specified
1616     as an association list whose member are string-integer
1617     pairs. The string is the option name, the integer specifies
1618     the number of required parameters.
1619     (option-spec-expand): New function.
1620     (option-spec): New macro.
1621     (define-option-constant): New macro.
1622    
1623     * code/mcvs-main.lisp (*cvs-options-arg*): Constant removed.
1624     (*cvs-options*, *create-options*, *grab-options*, *checkout-options*,
1625     *add-options*, *remove-options*, *update-options*,
1626     *switch-options*, *commit-options*, *diff-options*, *tag-options*,
1627     *log-options*, *status-options*, *annotate-options, *filt-options*,
1628     *convert-options*, *branch-options*, *merge-options*,
1629     *remerge-options*, *list-branches-options*, *remap-options*,
1630     *purge-options*, *restore-options*, *prop-options*): Constant
1631     definitions refactored using define-option-constant macro.
1632     (*mcvs-command-table*): Use , rather than ,@ to insert
1633     option specs.
1634     (*usage*): Suggest cleaner syntax for prop options.
1635     (mcvs-execute): Switch to new parse-opt.
1636    
1637 kaz 1.162 2002-09-05 Kaz Kylheku <kaz@ashi.footprints.net>
1638    
1639 kaz 1.164 New prop command for manipulating property lists.
1640    
1641     * code/mcvs-main.lisp (*prop-options*): New constant.
1642     (*mcvs-command-table*): New entry.
1643     (*usage*): Update.
1644    
1645     * code/mapping.lisp (mapping-entry-parse-plist): Just unconditionally
1646     set execute slot based on :exec property.
1647    
1648     * code/prop.lisp: New file.
1649    
1650     2002-09-05 Kaz Kylheku <kaz@ashi.footprints.net>
1651    
1652 kaz 1.163 Be transparent with respect to mapping entry property lists:
1653     preserve unrecognized indicators and values.
1654    
1655     * code/mapping.lisp (mapping-entry): New slot, raw-plist,
1656     records raw property list from external mapping representation.
1657     (mapping-entry-parse-attributes): Renamed to mapping-entry-parse-plist.
1658     Argument dropped; parses raw-plist slot instead.
1659     (mapping-convert-in): Set raw-plist slot to value of fourth list
1660     element of :FILE entry, or fifth list element of :SYMLINK entry.
1661     (mapping-convert-out): Unify any slot values that are represented as
1662     properties into raw-plist, and insert any non-empty plists into
1663     external representation.
1664    
1665     2002-09-05 Kaz Kylheku <kaz@ashi.footprints.net>
1666    
1667 kaz 1.162 Low level support for versioning executable bit.
1668    
1669     * code/unix-bindings/unix.lisp (unix-funcs:chmod): New callout
1670     function.
1671    
1672     * code/clisp-unix.lisp (executable-p, make-executable,
1673     make-non-executable): New generic functions.
1674     (executable-p (file-info), make-executable (file-info),
1675     make-executable (string), make-non-executable (file-info),
1676     make-non-executable (string)): New methods.
1677    
1678     * code/add.lisp (mcvs-add): Record whether new file is
1679     executable or not, by setting executable slot in mapping-entry.
1680    
1681     * code/create.lisp (mcvs-create): Likewise.
1682    
1683     * code/sync.lisp (synchronize-files): New parameter,
1684     should-be-executable, tells function which way to set
1685     permissions after synchronizing files.
1686    
1687     * code/mapping.lisp (mapping-entry): New slot, executable.
1688     (mapping-entry-parse-attributes): New function, parses
1689     new optional property list from :FILE entries in a mapping.
1690     (mapping-convert-in): Parse property list that may be present in fourth
1691     list element of a :FILE entry.
1692     (mapping-convert-out): Write out executable flag as
1693     :EXEC property, if true.
1694     (mapping-synchronize): Pass executable flag down to synchronize-files.
1695    
1696 kaz 1.161 2002-09-02 Kaz Kylheku <kaz@ashi.footprints.net>
1697    
1698     * code/grab.lisp (determine-moved-files): Rename local
1699     variable for clarity.
1700     (determine-moved-symlinks): Actually compute what symlinks
1701     are moved. Takes one more argument, the stable-files list.
1702     (mcvs-grab): Fix small destructuring-bind bug in symlink
1703     moving code. Also, read the targets of moved symlinks into
1704     the map, like it is already done with stable symlinks.
1705    
1706 kaz 1.160 2002-09-01 Kaz Kylheku <kaz@ashi.footprints.net>
1707    
1708     * code/grab.lisp (mcvs-grab): Iterate over stable symlinks,
1709     and incorporate changed targets into the mapping. In other
1710     words, notice and incorporate retargetted symlinks.
1711    
1712 kaz 1.159 2002-08-31 Kaz Kylheku <kaz@ashi.footprints.net>
1713    
1714     Merging new symbolic link support from symlink-branch.
1715    
1716 kaz 1.160 * code/mapping.lisp (mapping-update): Resolve merge conflict.
1717 kaz 1.159 The branch fixed the 2002-08-24 bug also.
1718    
1719     2002-08-31 Kaz Kylheku <kaz@ashi.footprints.net>
1720    
1721     * code/grab.lisp (move-candidates): Function renamed to
1722     determine-moved-files.
1723     (determine-moved-symlinks): New function, doesn't do anything
1724     yet.
1725     (mcvs-grab): Updated to process symlinks and use new
1726     mapping-entry structure.
1727    
1728     2002-08-26 Kaz Kylheku <kaz@ashi.footprints.net>
1729    
1730     * code/remap.lisp (mcvs-remap): Use new mapping entry structure.
1731     For now, preserve symbolic link entries as they are, processing only
1732     files.
1733    
1734     * code/mapping.lisp (equal-mapping-entries, equal-mappings): New
1735     functions.
1736    
1737     2002-08-25 Kaz Kylheku <kaz@ashi.footprints.net>
1738    
1739     * code/clisp-unix.lisp (initialize-instance link-error): Make
1740     error message less confusing about which path refers to the
1741     object being created, and which path refers to what it links to.
1742    
1743     * code/mapping.lisp (mapping-rename-files): Bugfix: destructuring-bind
1744     appeared in place of with-slots.
1745     (mapping-synchronize): When creating symbolic link, ensure that
1746     its directory exists.
1747     (mapping-update): Likewise.
1748    
1749     2002-08-25 Kaz Kylheku <kaz@ashi.footprints.net>
1750    
1751     * code/add.lisp (mcvs-add): Change to new mapping-entry data structure
1752     and handle symbolic links.
1753    
1754     * code/create.lisp (mcvs-create): Likewise.
1755    
1756     * code/filt.lisp (make-filt-hash, mcvs-filt): Change to new
1757     mapping-entry data structure. Filt does not care about symlinks.
1758    
1759     * code/types.lisp (types-remove-ignores, types-make-cvs-adds):
1760     Change to new mapping-entry data structure.
1761    
1762     * code/mapping.lisp (mapping-generate-name): Renamed to
1763     mapping-generate-id. Interface changes slightly.
1764     (mapping-extract-kind): New function, factored out from mcvs-generic.
1765     (mapping-update): Unlink existing symbolic link before
1766     re-linking it.
1767    
1768     * code/convert.lisp (mcvs-convert): Use new name and interface
1769     of mapping-generate-name function.
1770    
1771     * code/create.lisp (mcvs-create): Likewise.
1772    
1773     * code/generic.lisp (mcvs-generic): Code to extract :file
1774     entries from map factored out to mapping-extract-kind.
1775    
1776    
1777     2002-08-25 Kaz Kylheku <kaz@ashi.footprints.net>
1778    
1779     * code/generic.lisp (mcvs-generic): Use new mapping-entry data structure.
1780     Filter out mapping entries which are other than of the :file type, so
1781     we don't pass to CVS things it doesn't know about, like symbolic
1782     links.
1783    
1784     2002-08-24 Kaz Kylheku <kaz@ashi.footprints.net>
1785    
1786     Support for symbolic links added to the mapping module. The format of
1787     the map file has changed to accomodate this. The new format of the
1788     list entries is (:keyword "id" "path" ...) where the keyword is either
1789     :file or :symlink (for now, extensible obviously), "id" is a unique
1790     identifier (for regular files, it is their MCVS/F-* name) and "path" is
1791     the sandbox path. Other things can follow; for symlinks, there is a
1792     string representing the symlink target. Internally, a new data type
1793     called mapping-entry is used; this is a struct. So the functions which
1794     read and write maps now convert between the struct format and the above
1795     format.
1796    
1797     * code/unix-bindings/unix.lisp (unix-funcs:readlink): New function.
1798    
1799     * code/unix-bindings/impl.c (impl_readlink): New function.
1800    
1801     * code/clisp-unix.lisp (readlink-error): New condition.
1802     (initialize-instance readlink-error): New method for
1803     initialize-instance generic function, specialized for readlink-error.
1804     (readlink): New function.
1805    
1806     * code/mapping.lisp (mapping-entry): New struct, with slots
1807     file, id, path and target.
1808     (mapping-same-object-p): Renamed to mapping-same-id-p.
1809     (mapping-object-lookup, mapping-moved-p): Unused functions removed.
1810     (mapping-extract-paths, mapping-lookup, mapping-prefix-lookup,
1811     mapping-prefix-matches, mapping-same-path-p, mapping-rename-files,
1812     mapping-removed-files): Functions updated to use the new data
1813     structure.
1814     (mapping-dupe-checks): Rewritten for new data structure, and to
1815     use hashes rather than silly sorting.
1816     (mapping-convert-old-style-in, mapping-convert-in,
1817     mapping-convert-out): New functions.
1818     (mapping-read): Handle new and old style representations,
1819     handle conversion to internal representation.
1820     (mapping-write): Convert to new-style external representation
1821     before writing out.
1822     (mapping-synchronize): Handle symbolic links. If a link is missing,
1823     create it. If it's present but different from what it should be,
1824     erase it and re-create it.
1825     (mapping-update): Use new data structure. Handle symbolic links.
1826    
1827     * code/remove.lisp (mcvs-remove): Refer to new function
1828     name, mapping-same-id-p.
1829    
1830 kaz 1.158 2002-08-24 Kaz Kylheku <kaz@ashi.footprints.net>
1831    
1832     * mapping.lisp (mapping-update): Bugfix
1833     in logic which prints clobbering moves. The functions
1834     abstract-to-real-path and second were applied in the wrong order.
1835    
1836 kaz 1.159 2002-08-23 Kaz Kylheku <kaz@ashi.footprints.net>
1837    
1838     * code/clisp-unix.lisp (link-error): New slot, kind. Holds
1839     the string "symbolic" or "hard".
1840     (initialize-instance link-error): Use new slot in constructing
1841     message.
1842     (link): Specify "hard" value for :kind slot of condition.
1843     (symlink): New function.
1844    
1845     * code/clisp-linux.lisp: Likewise.
1846    
1847 kaz 1.156 2002-08-17 Kaz Kylheku <kaz@ashi.footprints.net>
1848    
1849 kaz 1.159 * code/posix.lisp (execute-program): Function removed.
1850     * code/clisp-linux.lisp (execute-program): Function added. Works
1851 kaz 1.157 in terms of CLISP's run-program function rather than the shell
1852     function, thus eliminating the need to build a command string
1853     and escape shell characters.
1854     * clisp-unix.lisp (excecute-program): Likewise.
1855    
1856     2002-08-17 Kaz Kylheku <kaz@ashi.footprints.net>
1857    
1858 kaz 1.159 * code/posix.lisp (edit-file): Function renamed to invoke-file-on,
1859 kaz 1.156 because this name clashes with a standard Common Lisp symbol.
1860 kaz 1.159 * code/types.lisp (types-let-user-edit): Updated to use new name.
1861 kaz 1.156
1862 kaz 1.155 2002-08-05 Kaz Kylheku <kaz@ashi.footprints.net>
1863    
1864     Use getcwd to to implement mcvs-locate.
1865    
1866     * code/unix-bindings/unix.lisp (getcwd): New call out,
1867     invokes impl_getcwd.
1868    
1869     * code/unix-bindings/impl.c (impl_getcwd): New function,
1870     use getcwd() to obtain current working directory, resizing dynamic
1871     buffer if necessary to get the entire path.
1872    
1873     * code/clisp-unix.lisp (getcwd): New wrapper function.
1874    
1875     * code/dirwalk.lisp (go-up): Function removed.
1876    
1877     * code/mapping.lisp (mcvs-locate): Rewritten to obtain
1878     path using getcwd, then try looking for MCVS directory
1879     in successively shorter prefixes of that path.
1880    
1881 kaz 1.152 2002-08-04 Kaz Kylheku <kaz@ashi.footprints.net>
1882    
1883 kaz 1.154 Working back support for CLISP 2.27.
1884    
1885     * code/install.sh: Bogus *null-pointer* hack is no longer added
1886     to the generated mcvs script, since we have our own FFI functions for
1887     doing the test.
1888    
1889     * code/unix-bindings/unix.lisp (unix-funcs:null-pointer-p): New
1890     function, tests a C pointer for null, returns T or NIL.
1891     * code/unix-bindings/impl.c (impl_null_pointer_p): New function,
1892     C implementation of unix-funcs:null-pointer-p.
1893    
1894     * code/clisp-unix.lisp (pointer-null): New macro, uses
1895     ffi:foreign-address-null under CLISP 2.28 or greater, or
1896     unix-funcs:null-pointer-p, under an older CLISP.
1897    
1898     2002-08-04 Kaz Kylheku <kaz@ashi.footprints.net>
1899    
1900 kaz 1.153 Fixes to get clean build from fresh checkout.
1901    
1902     * code/unix-bindings/link.sh: Remove test for presence of unix.c;
1903     this was causing the failure to add the unix module to the module
1904     list, which caused it to generate an empty modules.h file under
1905     code/unix-bindings-linking-set, resulting in a bad build of lisp.run.
1906    
1907     * code/unix-bindings/Makefile: Add ``clean'' target, so we
1908     can do a make clean here.
1909    
1910     2002-08-04 Kaz Kylheku <kaz@ashi.footprints.net>
1911    
1912 kaz 1.152 Retargetting CVS with new system call bindings that are not GNU/Linux
1913     specific.
1914    
1915     * code/install.sh: The way Meta-CVS is installed changes now.
1916     The argument is now a prefix above a bin and lib directory.
1917     Invokes clisp-link to build a new CLISP linking set in the
1918     directory code/unix-bindings-linking-set. The lisp executable
1919     (lisp.run) is copied to $TARGET/lib/clisp/meta-cvs/ and the Meta-CVS
1920     memory image is also copied there under the name lispinit.mem.
1921     The mcvs script is then generated in $TARGET/bin, correctly referring
1922     to these images.
1923    
1924     * code/system.lisp: Choose the new clisp-unix module, if running
1925     under a CLISP image which has the new bindings loaded. Otherwise fall
1926     back on the old clisp-linux, which uses the linuxlibc6 module.
1927    
1928     * code/clisp-unix.lisp: New file, closely based on clisp-linux.lisp,
1929     but targetting new bindings in the unix-funcs package.
1930    
1931     * code/clisp-link: New file. Script borrowed from CLISP distribution,
1932     needed for building CLISP executables with custom modules added.
1933    
1934     * code/linkkit: New directory. This is needed by by clisp-link.
1935     * code/linkkit/modules.c: Borrowed file from CLISP, needed
1936     by clisp-link.
1937     * code/linkkit/clisp.h: Likewise.
1938     * code/linkkit/modules.d: Likewise.
1939    
1940     * code/unix-bindings: New directory. This is a module kit used
1941     by clisp-link to extend the Lisp executable and memory image
1942     with new C functions.
1943    
1944     * code/unix-bindings/link.sh: Definitions of variables needed
1945     by clisp-link.
1946    
1947     * code/unix-bindings/unix.lisp: The glue module which defines the Lisp
1948     interface to the external C functions. Most of the functions call
1949     directly into the system's C library, but a few call to wrapper
1950     functions. Compiling unix.lisp produces a unix.c file which is
1951     compiled and linked into the CLISP executable, and a unix.fas which
1952     contains the Lisp interface bits that are loaded as part of the Lisp
1953     image.
1954    
1955     * code/unix-bindings/Makefile: Rules for compiling the module, invoked by clisp-link.
1956    
1957     * code/unix-bindings/impl.c: Some special functions that help
1958     implement the binding.
1959    
1960 kaz 1.149 2002-07-31 Kaz Kylheku <kaz@ashi.footprints.net>
1961    
1962 kaz 1.150 More changes to syntax of grab command. Now -A must be
1963     specified to do a grab onto main trunk.
1964    
1965     * code/mcvs-main.lisp (*grab-options*): -A option added.
1966    
1967     * code/grab.lisp (mcvs-grab): Test for presence of -A
1968     option. Check that either -A or -r is present, but not both.
1969    
1970     2002-07-31 Kaz Kylheku <kaz@ashi.footprints.net>
1971    
1972 kaz 1.149 Syntax of grab command changed. The branch is no longer
1973     specified as an argument after the module name. Rather,
1974     it is specified using the -r option.
1975    
1976     * code/mcvs-main.lisp (*grab-options*): -r added to list.
1977    
1978     * code/grab.lisp (mcvs-grab, mcvs-grab-wrapper): Argument
1979     syntax change, support -r option.
1980 kaz 1.152
1981     * INSTALL: Instructions change, since building the GNU/Linux libc
1982     into CLISP is no longer required.
1983 kaz 1.149
1984 kaz 1.147 2002-07-27 Kaz Kylheku <kaz@ashi.footprints.net>
1985    
1986 kaz 1.148 * docs/meta-cvs.latex: Rewrote most of Introduction.
1987    
1988     2002-07-27 Kaz Kylheku <kaz@ashi.footprints.net>
1989    
1990 kaz 1.147 New scripts for building LaTeX document. These do the right thing
1991     to minimize the number of times latex is run. Make proved useless.
1992    
1993     * docs/generate.sh: New file.
1994     * docs/cleanup.sh: New file.
1995    
1996 kaz 1.146 2002-07-20 Kaz Kylheku <kaz@ashi.footprints.net>
1997    
1998     * INSTALL: Revising CLISP installation instructions to the
1999     easier method using --build.
2000    
2001 kaz 1.145 2002-07-18 Kaz Kylheku <kaz@ashi.footprints.net>
2002    
2003     * README: Renaming file to QUICK-GUIDE.
2004    
2005     2002-07-17 Kaz Kylheku <kaz@ashi.footprints.net>
2006 kaz 1.142
2007 kaz 1.144 * code/generic.lisp (mcvs-generic): Support new keyword,
2008     :no-fix-empty-file-list. Specifies that if no files are passed,
2009     and the --metaonly option is not present, the CVS command is to be
2010     executed without any file arguments.
2011     (mcvs-commit-wrapper): Specify :no-fix-empty-file-list t when
2012     calling mcvs-generic. Thus commit now has the behavior that
2013     when it is passed no file arguments, it does a true global commit.
2014    
2015     2002-07-16 Kaz Kylheku <kaz@ashi.footprints.net>
2016    
2017 kaz 1.143 * code/restore.lisp (mcvs-restore): Work properly with
2018     partial sandboxes; that is, move things to lost+found
2019     directory at the top of the partial sandbox, rather than
2020     the abstract root.
2021    
2022     2002-07-16 Kaz Kylheku <kaz@ashi.footprints.net>
2023    
2024 kaz 1.142 * code/mcvs-main.lisp (usage): Updated to describe restore
2025     command.
2026    
2027 kaz 1.139 2002-07-14 Kaz Kylheku <kaz@ashi.footprints.net>
2028    
2029 kaz 1.141 * code/grab.lisp (mcvs-grab): If there are only added files
2030     or only removed files, don't bother scanning any files,
2031     since there are no moves to compute.
2032    
2033     2002-07-14 Kaz Kylheku <kaz@ashi.footprints.net>
2034    
2035 kaz 1.140 * code/find-bind.lisp (vector-bind): New macro, binds symbols
2036 kaz 1.139 to elements of a vector.
2037     (find-bind-extract-vals): Rewrite using vectors. Fixes
2038     a bug: the old version was not handling duplicate keys
2039     properly.
2040     (find-bind): Integrate with new find-bind-extract-vals.
2041    
2042 kaz 1.138 2002-07-11 Kaz Kylheku <kaz@ashi.footprints.net>
2043    
2044     Directory structure rearrangement; source files are moved
2045     under code/ subdirectory. A documentation directory is added.
2046    
2047 kaz 1.133 2002-07-07 Kaz Kylheku <kaz@ashi.footprints.net>
2048    
2049 kaz 1.137 * move.lisp (move-guts): When moving multiple sources to
2050     a target directory, provide a restart to skip a bad source.
2051    
2052     2002-07-07 Kaz Kylheku <kaz@ashi.footprints.net>
2053    
2054 kaz 1.136 * seqfuncs.lisp (intersection-difference): Support a new
2055     keyword parameter :squash-nil.
2056    
2057     * mapping.lisp (mapping-difference): Filter non-moved pairs
2058     directly in intersection-difference call using :squash-nil,
2059     eliminating the need to do a second remove-if pass.
2060    
2061     2002-07-07 Kaz Kylheku <kaz@ashi.footprints.net>
2062    
2063 kaz 1.135 * mapping.lisp (mapping-difference): Rewrite using
2064     intersection-difference.
2065    
2066     2002-07-07 Kaz Kylheku <kaz@ashi.footprints.net>
2067    
2068 kaz 1.134 * grab.lisp (added-removed): Function removed.
2069     (mcvs-grab): Use new intersection-difference function
2070     instead of added-removed.
2071    
2072     2002-07-07 Kaz Kylheku <kaz@ashi.footprints.net>
2073    
2074 kaz 1.133 * seqfuncs.lisp (intersection-difference): New function.
2075    
2076 kaz 1.131 2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2077    
2078 kaz 1.132 * grab.lisp (mcvs-grab): Upgraded to work with partial sandbox.
2079     Extra parameter added to specify subdirectory. File analysis
2080     is only done on visible files.
2081     (mcvs-grab-wrapper): Take optional parameter to specify
2082     subdirectory.
2083    
2084     2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2085    
2086     * mapping.lisp (mapping-update): If no-delete-removed is
2087     true, nevertheless print the ``* removing...'' messages
2088     to show that removal from the mapping is going on.
2089    
2090     2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2091    
2092     * remap.lisp (mcvs-remap): Remap only the visible sandbox,
2093     and combine resulting map with the invisible portion.
2094    
2095     2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2096    
2097     * remove.lisp (mcvs-remove): Added path conversions to support
2098     partial sandboxes.
2099    
2100     2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2101    
2102     * generic.lisp (mcvs-generic): Added path conversions to support
2103     partial sandboxes.
2104    
2105     2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2106    
2107     * add.lisp (mcvs-add): Added path conversions to support
2108     partial sandboxes.
2109    
2110     2002-07-06 Kaz Kylheku <kaz@ashi.footprints.net>
2111    
2112 kaz 1.131 * grab.lisp (mcvs-grab): Bugfix: determination of common words
2113     was failing on small file sets because the min function was
2114     used instead of the max to compute the threshold.
2115 kaz 1.132
2116     2002-07-05 Kaz Kylheku <kaz@ashi.footprints.net>
2117    
2118     * move.lisp (source-check): Use real source path for checking
2119     against MCVS/ area.
2120     (mcvs-move): Ditto for destination path.
2121    
2122     2002-07-05 Kaz Kylheku <kaz@ashi.footprints.net>
2123    
2124     * mapping.lisp (mapping-update): Make sure only those files
2125     are processed which are visible in the sandbox. If a file
2126     is moved out of or into visibility, this is indicated in the
2127     diagnostic output.
2128    
2129     2002-07-05 Kaz Kylheku <kaz@ashi.footprints.net>
2130    
2131     * mapping.lisp (real-path-exists): Use path-prefix-equal, because
2132     that handles all the tricky cases.
2133     (abstract-to-real-path): Handle the case when abstract path
2134     is the same as the path prefix, with or without the trailing
2135     slash.
2136    
2137     2002-07-05 Kaz Kylheku <kaz@ashi.footprints.net>
2138    
2139     Start of experimental ``partial sandbox'' work.
2140    
2141     * mapping.lisp (*mcvs-displaced-name*, *mcvs-displaced*): New
2142     constants, hold name of administrative file MCVS/DISPLACED which stores
2143     the displaced path prefix.
2144     (*displaced-path-prefix*): New special variable, holds displaced
2145     path prefix read from MCVS/DISPLACED.
2146     (*displaced-path-length*): New special variable, holds length
2147     of string stored in *displaced-path-prefix*.
2148     (real-path-exists, abstract-to-real-path, real-to-abstract-path):
2149     New functions for mapping between actual sandbox path, and
2150     the abstract sandbox path stored in the mapping.
2151     (in-sandbox-root-dir): Macro modified to read *mcvs-displaced*
2152     administrative file, and set up the new special variables.
2153     (mapping-synchronize): Only operate on files that are present
2154     in the sandbox; i.e. that have real paths corresponding to their
2155     abstract paths. Convert to the real path when calling lower
2156     level file manipulation functions.
2157     (mapping-update): Likewise, but this conversion is not complete.
2158     (displaced-path-read, displaced-path-write): New functions for
2159     reading and writing MCVS/DISPLACED.
2160    
2161     * checkout.lisp (mcvs-checkout): One extra optional parameter.
2162     Specifies the subdirectory for executing a partial checkout.
2163     (mcvs-checkout-wrapper): Parse out optional parameter.
2164    
2165     * grab.lisp (mcvs-grab): For now, when calling mcvs-checkout,
2166     specify the new parameter as nil. Eventually, grab will work
2167     over partial checkouts.
2168    
2169     * move.lisp: Upgraded to work with partial sandboxes.
2170     (source-check): Convert source parameter to real path for
2171     existence check.
2172     (move-guts): Convert destination parameter to real path before
2173     invoking (stat ...) on it.
2174     (mcvs-move): Map all path arguments to abstract paths.
2175 kaz 1.131
2176 kaz 1.130 2002-07-04 Kaz Kylheku <kaz@ashi.footprints.net>
2177    
2178     * find-bind.lisp (find-bind-extract-vals): Rewrite for
2179     efficiency. No impact on Meta-CVS, just done for the sake of improving
2180     the quality of this highly reusable code. There is specialized
2181     code now depending on whether the input sequence is a list or
2182     a vector. A single pass is made over the sequence, with multiple
2183     passes over the search values. The sequence could be large,
2184     whereas the list of search values is typically going to be small.
2185     (find-bind): Modified to reflect slight interface change
2186     in find-bind-extract-vals.
2187    
2188 kaz 1.129 2002-07-03 Kaz Kylheku <kaz@ashi.footprints.net>
2189    
2190     * mcvs-main.lisp (*usage*): Describe --meta and --metaonly options.
2191    
2192 kaz 1.127 2002-07-02 Kaz Kylheku <kaz@ashi.footprints.net>
2193    
2194 kaz 1.128 * purge.lisp (mcvs-purge): Factor out code for computing
2195     deleted files.
2196    
2197     * mapping.lisp (mapping-removed-files): New function, contains
2198     code factored from mcvs-purge.
2199    
2200     * restore.lisp: New file.
2201     (mcvs-restore, mcvs-restore-wrapper): New functions.
2202    
2203     2002-07-02 Kaz Kylheku <kaz@ashi.footprints.net>
2204    
2205 kaz 1.127 * checkout.lisp (mcvs-checkout): Don't delete the MCVS directory
2206     of an existing checkout.
2207    
2208 kaz 1.125 2002-07-01 Kaz Kylheku <kaz@ashi.footprints.net>
2209    
2210 kaz 1.126 Adding purge command.
2211    
2212     * mcvs-main.lisp (*purge-options*): New constant.
2213     (*mcvs-command-table*): New entry.
2214     (*usage*): Update.
2215    
2216     * purge.lisp: New file.
2217     (mcvs-purge, mcvs-purge-wrapper): New functions.
2218    
2219     2002-07-01 Kaz Kylheku <kaz@ashi.footprints.net>
2220    
2221 kaz 1.125 Grab no longer synchronizes to recreate deleted files immediately
2222     before blowing them away.
2223    
2224     * grab.lisp (mcvs-grab): Specify :no-sync t when calling mcvs-remove.
2225    
2226     * remove.lisp (mcvs-remove): Support new no-sync keyword. This tells
2227     mcvs-remove that the files being removed from the mapping,
2228     don't exist in the sandbox. So it's not necessary to call
2229     mapping-synchronize, and mapping-update can be told via
2230     :no-delete-removed t not to try to remove deleted files.
2231    
2232     * mapping.lisp (mapping-update): New no-delete-removed keyword
2233     parameter.
2234    
2235 kaz 1.121 2002-06-29 Kaz Kylheku <kaz@ashi.footprints.net>
2236 kaz 1.120
2237 kaz 1.123 * create.lisp (mcvs-create): Take out vendor branch parameter,
2238     use "Created-by-Meta-CVS" as the vendor tag.
2239     (mcvs-create-wrapper): Take out vendor branch parameter.
2240    
2241     2002-06-29 Kaz Kylheku <kaz@ashi.footprints.net>
2242    
2243 kaz 1.122 * generic.lisp (mcvs-tag-wrapper): This one needs to include
2244     meta files by default.
2245    
2246     2002-06-29 Kaz Kylheku <kaz@ashi.footprints.net>
2247    
2248 kaz 1.120 Moving toward sane, user-friendly handling of meta-files.
2249     Two new options are added --meta and --metaonly.
2250     All reporting commands---diff, log, annotate---default to
2251     not including the meta files. The update command remains special.
2252     It does not include meta files if given filename arguments.
2253     If invoked with no arguments, it does a global CVS up.
2254     The commit command defaults to including the meta files.
2255     The three options simply override default behavior.
2256    
2257 kaz 1.124 * options.lisp (*nometa-option*): Eliminated useless docstring.
2258 kaz 1.120 (*meta-option*): New variable.
2259     (*nometa-option*): New variable.
2260     (filter-global-options): Clean rewrite using find-bind.
2261    
2262     * generic.lisp (mcvs-generic): New keyword parameters
2263     default-include-meta-files, need-update-after. Implements new logic
2264     related to the new options. Performs (mapping-update) if
2265     need-update-after is true and metafiles were subject to cvs update.
2266     (mcvs-commit-wrapper): Calls mcvs-generic with
2267     :default-include-meta-files t.
2268    
2269     * update.lisp (mcvs-update): No longer overrides the *nometa-option*
2270     special variable. Passes :need-update-after t to mcvs-generic.
2271    
2272     * mcvs-main.lisp (*cvs-options*): New options entered into list.
2273    
2274 kaz 1.121 2002-06-28 Kaz Kylheku <kaz@ashi.footprints.net>
2275 kaz 1.114
2276 kaz 1.119 * memoize.lisp (memoize-expander): Use ordinary hash for memoizing
2277     monadic functions.
2278    
2279 kaz 1.121 2002-06-28 Kaz Kylheku <kaz@ashi.footprints.net>
2280 kaz 1.119
2281 kaz 1.117 Word comparisons are case-insensitive in mcvs grab now.
2282     Also, common words are determined and eliminated from the correlation.
2283     Common words are those that appear in at least 5 of the
2284     added or removed files, or 20% of them, whichever is greater.
2285    
2286     Noticed some unnecessary use of string-lessp on F-file names in
2287     mapping.lisp.
2288    
2289     * grab.lisp (read-word-hash): Use #'equalp test for case-insensitive
2290     string comparisons.
2291     (added-removed): Use string< instead of string-lessp for comparing
2292     paths.
2293     (determine-common-words, eliminate-common-words): New functions.
2294 kaz 1.118 (move-candidates): Acceptance threshold reduced to 30%, since
2295 kaz 1.117 elimination of common words reduces the similarity correlation.
2296     (mcvs-grab): Use string< instead of string-lessp when sorting paths.
2297     Do the common words computation.
2298    
2299     * mapping.lisp (mapping-dupe-check, mapping-write,
2300     mapping-difference): Use string< instead of string-lessp.
2301    
2302 kaz 1.121 2002-06-28 Kaz Kylheku <kaz@ashi.footprints.net>
2303 kaz 1.117
2304 kaz 1.116 * memoize.lisp (factor-memo-labels): New function, rips apart
2305     functions generated by memoize-expander, in order to factor
2306     out the multi-hash defining let blocks.
2307     (memoized-labels): Interface corrected. Also, use new function to
2308     generate a labels block that allows for mutually recursive memoized
2309     functions which preserve hash contents across arbitrarily mutually
2310     recursive calls. This is done by enclosing the functions in one big
2311     let block which binds all the hashes.
2312    
2313 kaz 1.121 2002-06-28 Kaz Kylheku <kaz@ashi.footprints.net>
2314 kaz 1.116
2315 kaz 1.115 * seqfuncs.lisp (lcs-list): Specify #'eq test for memoization
2316     parameters.
2317    
2318 kaz 1.121 2002-06-28 Kaz Kylheku <kaz@ashi.footprints.net>
2319 kaz 1.115
2320 kaz 1.114 Adding some cool code: a multi-hash datatype which implements
2321     multi-dimensional sparse arrays using a tree of hash tables,
2322     and a function memoizer which uses multi hash to index on
2323     function arguments.
2324    
2325     * multi-hash.lisp (multi-hash): New class.
2326     (initialize-instance): New method on multi-hash.
2327     (multi-hash-common-code): New macro.
2328     (get-multi-hash, set-multi-hash): New functions.
2329    
2330     * memoize.lisp (define-memoized-function,
2331     memoized-labels): New macros.
2332     (remove-key-aux-rest strip-lambda-list, extract-tests,
2333     remove-tests, memoize-expander): New functions.
2334    
2335     * seqfuncs.lisp (lcs-list): Function is now correctly
2336     memoized using define-memoized-function.
2337    
2338 kaz 1.113 2002-06-26 Kaz Kylheku <kaz@ashi.footprints.net>
2339    
2340     * grab.lisp (read-word-hash): Memory use optimizations: use smaller
2341     initial size for tokens; re-use the same token object when the
2342     hash already contains a duplicate.
2343     (correlate): Renamed to correlate-word-hashes.
2344     (correlate-paths): New function; computes a confidence-reducing
2345     factor based on the differences between two paths.
2346     (move-candidates): Use correlate-paths to lower the confidence
2347     for distant moves. This could help sort out ambiguities when
2348     projects contain very similar or duplicate files which are subject
2349     to parallel moves.
2350    
2351     * seqfuncs.lisp (lcs-list, lcs-vector,
2352     longest-common-subsequence): New functions.
2353    
2354 kaz 1.112 2002-06-25 Kaz Kylheku <kaz@ashi.footprints.net>
2355    
2356     New feature: grab command. Takes snapshot of code and imports
2357     it to a branch, trying to determine which of the added and
2358     removed files are actually moves.
2359    
2360     * grab.lisp: New file.
2361     (read-word-hash, word-hash-file, correlate, added-removed,
2362     move-candidates, mcvs-grab, mcvs-grab-wrapper): New functions.
2363    
2364     * mcvs-main.lisp (*grab-options*): New constant.
2365     (*mcvs-command-table*): New entry.
2366     (*usage*): New text.
2367    
2368     * checkout.lisp (mcvs-checkout): Write out MAP-LOCAL even
2369     if :no-generate t is specified.
2370    
2371 kaz 1.110 2002-06-24 Kaz Kylheku <kaz@ashi.footprints.net>
2372    
2373 kaz 1.111 * checkout.lisp (mcvs-checkout): New key parameter, no-generate.
2374     Tells the checkout function not to unpack the MCVS directory.
2375     This will be useful when mcvs-checkout is used as a subfunction
2376     of the new grab command. Failed CVS call is now turned into
2377     an error. The MCVS subdirectory is *always* deleted, even if the
2378     checkout did not create the checkout directory.
2379    
2380     2002-06-24 Kaz Kylheku <kaz@ashi.footprints.net>
2381    
2382 kaz 1.110 * dirwalk.lisp (dirwalk-fi): Bugfix: top call was not
2383     passing down keyword parameters to recursive call.
2384    
2385 kaz 1.107 2002-06-23 Kaz Kylheku <kaz@ashi.footprints.net>
2386    
2387 kaz 1.109 * posix.lisp (canonicalize-path): Use concatenate-string
2388     instead of format.
2389    
2390     2002-06-23 Kaz Kylheku <kaz@ashi.footprints.net>
2391    
2392 kaz 1.108 * posix.lisp (parse-posix-namestring): Clean rewrite.
2393    
2394     2002-06-23 Kaz Kylheku <kaz@ashi.footprints.net>
2395    
2396 kaz 1.107 The ``import'' command is renamed to ``create''.
2397    
2398 kaz 1.262 * mcvs-main.lisp (*create-options*): Renamed to *import-options*.
2399 kaz 1.107 (*mcvs-command-table*): Updated.
2400     (*usage*): Updated.
2401    
2402     * import.lisp: File renamed to create.lisp.
2403     (mcvs-import): Renamed to mcvs-create; some arguments renamed.
2404     (mcvs-import-wrapper): Renamed to mcvs-create-wrapper.
2405    
2406     * README: Updated.
2407    
2408 kaz 1.104 2002-06-22 Kaz Kylheku <kaz@ashi.footprints.net>
2409    
2410 kaz 1.106 * split.lisp (split-fields): Optimized to extract tokens directly
2411     from the input string using subseq rather than construct them
2412     character by character.
2413 kaz 1.105
2414     2002-06-22 Kaz Kylheku <kaz@ashi.footprints.net>
2415    
2416 kaz 1.104 * find-bind.lisp (find-bind): Use #'values instead of #'(lambda (x) x).
2417    
2418 kaz 1.102 2002-06-21 Kaz Kylheku <kaz@ashi.footprints.net>
2419    
2420 kaz 1.103 * clisp-linux.sh (:clisp-old): Added to *features*
2421     for CLISP 2.28 or higher.
2422     (*null-pointer*): Only defined when :clisp-old is present.
2423     (pointer-null): Use new ffi:foreign-pointer-null if :clisp-old
2424     feature is not present.
2425    
2426     * install.sh: Don't do *null-pointer* workaround hack
2427     unless :clisp-old feature is present in the memory image.
2428    
2429     2002-06-21 Kaz Kylheku <kaz@ashi.footprints.net>
2430    
2431 kaz 1.102 * types.lisp (types-make-cvs-adds): Serious bugfix. Forgot
2432     to strip MCVS/ prefix from those F- files which don't match
2433     any type entries. This caused cvs add to fail for unsuffixed
2434     files.
2435    
2436 kaz 1.101 2002-06-08 Kaz Kylheku <kaz@ashi.footprints.net>
2437    
2438     * types.lisp (types-to-import-wrapper-args): Don't use backquote
2439     template to generate a list that will be destructively catenated
2440     by mapcan.
2441    
2442 kaz 1.100 2002-05-22 Kaz Kylheku <kaz@ashi.footprints.net>
2443    
2444     * checkout.lisp (mcvs-checkout): If a checkout directory is
2445     created and then the CVS checkout fails, the directory is
2446     then removed.
2447    
2448 kaz 1.97 2002-05-20 Kaz Kylheku <kaz@ashi.footprints.net>
2449    
2450 kaz 1.100 * find-bind.lisp (find-bind-extract-vals, find-bind): Process default
2451 kaz 1.99 values in find-bind-extract-vals, instead of in the expansion of
2452     find-bind, thereby reducing some macro bloat.
2453    
2454     2002-05-20 Kaz Kylheku <kaz@ashi.footprints.net>
2455    
2456 kaz 1.98 * remap.lisp (mcvs-remap): Loads MAP as well as MAP-LOCAL.
2457     If it the mappings differ, an error is signaled. The user can choose
2458     to ignore the error, in which case MAP is clobbered.
2459    
2460     2002-05-20 Kaz Kylheku <kaz@ashi.footprints.net>
2461    
2462 kaz 1.97 Adding mcvs remap command.
2463    
2464     * dirwalk.lisp (dirwalk-fi, dirwalk, for-each-file-info): Default
2465     behavior is now preorder (visit directory before its entries).
2466     A keyword is provided to select the old postorder behavior.
2467     A catch is provided in dirwalk-fi that allows the caller to
2468     skip processing the currently traversed directory. The for-each-*
2469     macros provide a local function called (skip) to do this.
2470     (delete-recursive): This function depends on postorder behavior
2471     in for-each-file-info, so it explicitly selects it now.
2472    
2473     * mcvs.lisp (*remap-options*): New constant.
2474     (*mcvs-command-table*): Add entry for new function.
2475     (*usage*): Describes new function.
2476    
2477     * remap.lisp: New file.
2478     (mcvs-remap, mcvs-remap-wrapper): New functions.
2479    
2480 kaz 1.96 2002-05-15 Kaz Kylheku <kaz@ashi.footprints.net>
2481    
2482     * sync.lisp (synchronize-files): Signal an error when the two files
2483     to be synchronized have the same time stamp. Provide two restarts
2484     for doing the synchronization either way.
2485    
2486 kaz 1.95 2002-05-06 Kaz Kylheku <kaz@ashi.footprints.net>
2487    
2488     * mapping.lisp (in-sandbox-root-dir): Fix symbol macro
2489     sandbox-down-path; it was referring to the (quote #:DOWNPATH-NNN)
2490     rather than #:DOWNPATH-NNN.
2491    
2492 kaz 1.93 2002-05-04 Kaz Kylheku <kaz@ashi.footprints.net>
2493    
2494 kaz 1.94 * import.lisp (mcvs-import): Specify -I ! argument to cvs import
2495     so that it does not ignore any F- files.
2496    
2497     2002-05-04 Kaz Kylheku <kaz@ashi.footprints.net>
2498    
2499 kaz 1.93 * mapping.lisp (mapping-update): Provide restart that allows
2500     user to ignore file removal error.
2501    
2502 kaz 1.92 2002-04-19 Kaz Kylheku <kaz@ashi.footprints.net>
2503    
2504     Porting to CMUCL.
2505    
2506     * system.lisp: Conditionally load new module cmucl-unix.
2507    
2508     * mapping.lisp (mapping-dupe-check, mapping-write,
2509     mapping-difference): Fixes related to sort function; we were
2510     relying on CLISP's preservation of the cons cell order.
2511    
2512     * cmucl-unix.lisp: New file.
2513    
2514 kaz 1.89 2002-04-17 Kaz Kylheku <kaz@ashi.footprints.net>
2515    
2516 kaz 1.90 * checkout.lisp (mcvs-checkout): Allow -d to specify current
2517     directory as the checkout directory. Do not complain if the
2518 kaz 1.91 target directory exists, just try to use it anyway,
2519     unless it is the root of an existing Meta-CVS sandbox. Use
2520 kaz 1.90 the mapping-update function to update the sandbox.
2521     These changes allow a Meta-CVS sandbox to blend with an existing
2522     directory structure, a useful feature.
2523    
2524     2002-04-17 Kaz Kylheku <kaz@ashi.footprints.net>
2525    
2526 kaz 1.89 * generic.lisp (mcvs-generic): Change how empty file argument list
2527     is handled. Rather than rewriting it to '(".") we do a proper
2528     map-prefix-lookup. Synchronizing and invoking CVS is elided
2529     if the resulting list of files to process is empty and the --nometa
2530     option is specified.
2531    
2532 kaz 1.87 2002-04-16 Kaz Kylheku <kaz@ashi.footprints.net>
2533    
2534 kaz 1.88 * branch.lisp (parse-sticky): New function.
2535     (read-cvs-entries): New function.
2536     (same-tag-check): New function.
2537     (what-tag-are-we-on): Renamed to what-are-we-sticky-to. Calls
2538     parse-sticky to return structured tag.
2539     (mcvs-merge): Make use of structured tags.
2540     (mcvs-list-branches): Make use of structured tags. Indicate
2541     when sandbox is inconsistently sticky.
2542    
2543     2002-04-16 Kaz Kylheku <kaz@ashi.footprints.net>
2544    
2545 kaz 1.87 * remove.lisp (mcvs-remove): Corrected careless bracketing
2546     introduced on 2002-03-15 that rendered this function ineffective.
2547    
2548 kaz 1.85 2002-04-04 Kaz Kylheku <kaz@ashi.footprints.net>
2549 kaz 1.82
2550 kaz 1.86 Absolute paths resolved against sandbox root.
2551    
2552     * posix.lisp (path-absolute-p): New function. Predicate to
2553     test whether a path is absolute.
2554    
2555     * mapping.lisp (in-sandbox-root-dir): sandbox-translate-paths
2556     function detects absolute path, and treats it as relative to
2557     sandbox root.
2558    
2559     2002-04-04 Kaz Kylheku <kaz@ashi.footprints.net>
2560    
2561 kaz 1.84 New switch command added, plus sticky tag related
2562     bugfixes and enhancement of mcvs list-branches.
2563    
2564     mcvs-main.lisp (*switch-options*): New constant.
2565     (*mcvs-command-table*): New entries.
2566     (*usage*): New help text.
2567    
2568     branch.lisp (what-branch-are-we-on): Function renamed to
2569     what-tag-are-we-on. Tests the first letter which is T or N; if
2570     it is not T, then it's not a branch tag. If there is a tag,
2571     it returns two values; the second value is NIL if it is not
2572     a branch tag, T otherwise.
2573     (mcvs-merge): Modified to use what-tag-are-we-on.
2574     (mcvs-list-branches): Show additional information about the
2575     current sticky tag.
2576     (mcvs-merge-wrapper): Fix wrong parenthesization introduced
2577     earlier today.
2578     (mcvs-switch-wrapper): New function.
2579    
2580 kaz 1.85 2002-04-04 Kaz Kylheku <kaz@ashi.footprints.net>
2581 kaz 1.84
2582 kaz 1.83 * branch.lisp (branch-tag-check): Check reserved symbol HEAD.
2583    
2584 kaz 1.85 2002-04-04 Kaz Kylheku <kaz@ashi.footprints.net>
2585 kaz 1.83
2586 kaz 1.82 New command to list branches.
2587    
2588     * mcvs-main.lisp (*list-branches-options*): New constant.
2589     (*mcvs-command-table*): Entries for new command added.
2590     (*usage*): Help text added.
2591    
2592     * branch.lisp (mcvs-list-branches,
2593     mcvs-list-branches-wrapper): New functions.
2594    
2595 kaz 1.80 2002-04-03 Kaz Kylheku <kaz@ashi.footprints.net>
2596    
2597 kaz 1.81 * branch.lisp (where-is-the-repository): New function.
2598     (cvs-make-or-advance-tag): Pass down CVSROOT to cvs rtag using
2599     the -d global option.
2600    
2601     2002-04-03 Kaz Kylheku <kaz@ashi.footprints.net>
2602    
2603 kaz 1.80 * branch.lisp (what-module-is-this): New function.
2604     (cvs-make-or-advance-tag): Use rtag rather than tag for tagging
2605     the branch being merged. This fixes the failure to merge added files.
2606     (mcvs-merge): Use mcvs-update rather than directly using cvs.
2607    
2608 kaz 1.78 2002-04-02 Kaz Kylheku <kaz@ashi.footprints.net>
2609    
2610 kaz 1.79 Implemented remerge command; redo a merge without moving
2611     around any tags.
2612    
2613     * branch.lisp (mcvs-merge): New keyword parameter remerge-p
2614     to indicate that a re-merge should be done, plus logic for
2615     doing so.
2616     (mcvs-remerge-wrapper): New function.
2617    
2618     * mcvs-main.lisp (*remerge-options*): New constant.
2619     (*mcvs-command-table*): New entry for remerge command.
2620    
2621     2002-04-02 Kaz Kylheku <kaz@ashi.footprints.net>
2622    
2623 kaz 1.78 First cut at implementing more automated branching and merging.
2624    
2625     * mcvs-main.lisp (*branch-options*, *merge-options*): New constants.
2626     (*mcvs-command-table*): New entries for branch and merge commands.
2627     (*usage*): New help text.
2628    
2629     * branch.lisp: New file.
2630     (*branch-char*): New constant.
2631     (tags-from-cvs-log, what-branch-are-we-on, branch-tag-check,
2632     mcvs-branch, mcvs-branch-wrapper, cvs-make-or-advance-tag, mcvs-merge,
2633     mcvs-merge-wrapper): New functions.
2634    
2635 kaz 1.87 2002-04-01 Kaz Kylheku <kaz@ashi.footprints.net>
2636 kaz 1.77
2637     checkout.lisp (mcvs-checkout): Emit informational message
2638     when checkout completes, because it's not obvious what directory
2639     was just created.
2640    
2641 kaz 1.76 2002-02-38 Kaz Kylheku <kaz@ashi.footprints.net>
2642    
2643     Error checking added to mcvs move: verifies that all
2644     sources exist and are known to Meta-CVS.
2645    
2646     * move.lisp (source-check): New function.
2647     (simple-rename, simple-move-to-dir): Use new function.
2648    
2649 kaz 1.74 2002-03-20 Kaz Kylheku <kaz@ashi.footprints.net>
2650    
2651 kaz 1.75 * rcsparse.lisp: File renamed to rcs-utils.lisp.
2652     (rcs-delta): New slot, delta-hash.
2653     (rcs-make-delta-hash): New function.
2654     (rcs-parse): Calls rcs-make-delta-hash to set up new slot.
2655    
2656     * convert.lisp: require changed to match file rename.
2657    
2658     2002-03-20 Kaz Kylheku <kaz@ashi.footprints.net>
2659    
2660 kaz 1.74 Some new macros for slot access.
2661    
2662     * slot-refs.lisp: New file.
2663     (with-slot-refs): New macro.
2664     (with-multi-slot-refs): New macro.
2665    
2666     * rcsparse.lisp (rcs-parse-newphrases, rcs-parse-admin,
2667     rcs-parse-delta): Replace uses
2668     of symbol-macrolet by with-slot-refs and with-multi-slot-refs.
2669    
2670 kaz 1.73 2002-03-19 Kaz Kylheku <kaz@ashi.footprints.net>
2671    
2672     Adding delta parsing to RCS parser.
2673    
2674     * rcsparse.lisp (rcs-delta): New struct.
2675     (rcs-file): New slot, deltas.
2676     (rcs-parse-newphrases): New function, factors out parsing of
2677     ``newphrases'' syntactic element out of rcs-parse-admin.
2678     (rcs-parse-admin): Use rcs-parse-newphrases.
2679     (rcs-parse-delta, rcs-parse-deltas): New functions.
2680     (rcs-parse): Parse both admin and deltas; store deltas in new
2681     rcs-file slot.
2682    
2683 kaz 1.72 2002-03-18 Kaz Kylheku <kaz@ashi.footprints.net>
2684    
2685     * posix.lisp (parse-posix-namestring): New function. Converts POSIX
2686     path to CL Path object.
2687 kaz 1.73
2688     * rcsparse.lisp: New file, implements RCS version file parser.
2689 kaz 1.72 (rcs-admin, rcs-file, rcs-token, rcs-token-stream): New structs.
2690     (rcs-peek-token, rcs-read-token): New generic functions.
2691     (rcs-extract-id-sym-or-num, rcs-extract-string,
2692     rcs-match-optional, rcs-match-token, rcs-parse, rcs-parse-admin,
2693     rcs-special-p): New functions.
2694    
2695     * convert.lisp (classify-tags): Work with association list rather
2696     than raw strings.
2697     (mcvs-convert): Use rcs-parse to extract tags. Fix call to
2698     mapping-generate name. Use parse-posix-namestring when opening
2699     version file. Generate informative chatter.
2700    
2701 kaz 1.69 2002-03-15 Kaz Kylheku <kaz@ashi.footprints.net>
2702    
2703 kaz 1.71 * remove.lisp (mcvs-remove): More detailed error checking.
2704     Checks for remove attempts against MCVS/ area, removes of local
2705     files not versioned under Meta-CVS, and nonexistent files.
2706    
2707     2002-03-15 Kaz Kylheku <kaz@ashi.footprints.net>
2708    
2709 kaz 1.70 * add.lisp (mcvs-add): Error message changed to tell user to use
2710     -R to add directory.
2711    
2712     * remove.lisp (mcvs-remove): New generalized boolean parameter
2713     indicates to do a recursive remove. This is controlled by the
2714     -R option which already exists. Behavior changed to not act
2715     on directories unless recursion is explicitly requested.
2716     (mcvs-remove-wrapper): Extract "R" option, pass down new boolean
2717     to mcvs-remove.
2718    
2719     2002-03-15 Kaz Kylheku <kaz@ashi.footprints.net>
2720    
2721 kaz 1.69 * remove.lisp (mcvs-remove-wrapper): Remove bogus error check.
2722    
2723 kaz 1.66 2002-03-14 Kaz Kylheku <kaz@ashi.footprints.net>
2724    
2725 kaz 1.68 * checkout.lisp (mcvs-checkout): Bugfix: must use checkout-dir, not
2726     module, when testing whether directory exists or was created properly.
2727    
2728     2002-03-14 Kaz Kylheku <kaz@ashi.footprints.net>
2729    
2730 kaz 1.67 Update takes file arguments now.
2731    
2732     * update.lisp (mcvs-update): If filename arguments are given, then
2733     just call mcvs-generic to do the work, but suppress the operation on
2734     meta files. If no filename arguments are given, then update everything.
2735     If the -p option is present, no synchronization is needed, before or
2736     after.
2737     (mcvs-update-wrapper): Pass command arguments down to mcvs-update.
2738    
2739     * mcvs-main.lisp (*update-options*): Add "p" option.
2740    
2741     * generic.lisp (mcvs-generic): New keyword parameter need-sync-after,
2742     a generalized boolean which can tell the function to do a
2743     mapping-synchronize after executing the CVS command.
2744    
2745     2002-03-14 Kaz Kylheku <kaz@ashi.footprints.net>
2746    
2747 kaz 1.66 * filt.lisp (filt-select-map): Do allow a date and revision to be
2748     specified; the revision could be a branch tag.
2749    
2750 kaz 1.62 2002-03-13 Kaz Kylheku <kaz@ashi.footprints.net>
2751    
2752 kaz 1.65 * mapping.lisp (malformed-map): New function.
2753     (mapping-dupe-check): Perform extra error checks when reading
2754     mapping, and turn them into a condition with a ``nice'' error message.
2755    
2756     2002-03-13 Kaz Kylheku <kaz@ashi.footprints.net>
2757    
2758 kaz 1.64 * mcvs-filt.lisp (filt-select-map): Handle error gracefully
2759     when reading map. It's easy to give CVS is a nonexistent tag.
2760    
2761     2002-03-13 Kaz Kylheku <kaz@ashi.footprints.net>
2762    
2763 kaz 1.63 The filt command takes arguments to select alternate revision
2764     of map.
2765    
2766     * mcvs-main.lisp (*filt-options*): New constant.
2767     (*mcvs-command-table*): Updated with new options.
2768     (mcvs-debug-shell): Restart name changed during debugging of filt
2769     changes.
2770    
2771     * filt.lisp (filt-select-map): New function. Loads either the
2772     local mapping, or retrieves an alternate mapping from CVS based
2773     on command line options.
2774     (mcvs-filt): Use filt-select-map rather than mapping-read.
2775    
2776     2002-03-13 Kaz Kylheku <kaz@ashi.footprints.net>
2777    
2778 kaz 1.62 * generic.lisp (mcvs-generic): Add .cvsignore to the list of
2779     metafiles.
2780    
2781 kaz 1.53 2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2782    
2783 kaz 1.61 * import.lisp (mcvs-import): Create a .cvsignore file for ignoring
2784     MAP-LOCAL.
2785    
2786     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2787    
2788 kaz 1.60 Fix trailing slash bug in mcvs mv.
2789    
2790     * move.lisp (simple-move-to-dir): Canonicalize path after catenating
2791     destination and file base name. This nukes a double slash if
2792     we move to a name with a trailing slash.
2793     (move-guts): Treat a destination name that has a trailing slash
2794     as a directory, unless it exists already as a non-directory.
2795    
2796     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2797    
2798 kaz 1.59 * mcvs-main.lisp (*cvs-options*): Added "error-terminate" and
2799     "error-continue".
2800     (*usage*): Update and reformat help text.
2801     (mcvs-execute): Process "error-terminate" and "error-continue"
2802     options.
2803    
2804     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2805    
2806 kaz 1.58 * mapping.lisp (mapping-update): Messages related to moving,
2807     adding or removing files promoted to terse level, so only -Q
2808     can suppress them.
2809    
2810     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2811    
2812 kaz 1.57 * update.lisp (mcvs-update): Changing level of chatter messages.
2813     * move.lisp (mcvs-move): Likewise.
2814     * add.lisp (mcvs-add): Likewise.
2815     * remove.lisp (mcvs-remove): Likewise.
2816     * checkout.lisp (mcvs-checkout): Likewise.
2817     * generic.lisp (mcvs-generic): Likewise.
2818     * import.lisp (mcvs-import): Likewise.
2819     * mapping.lisp (mapping-dupe-check): Likewise.
2820     (mapping-update): Likewise.
2821    
2822     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2823    
2824 kaz 1.56 Support for -q, -Q and -e global options.
2825    
2826     * posix.lisp (*editor*): New special variable.
2827     (edit-file): Check *editor* variable; if not nil, use it.
2828    
2829     * mcvs-main.lisp (*usage*): Update help text.
2830     (mcvs-execute): Set *mcvs-chatter-level* according to -q or -Q.
2831     Set *editor* if -e is specified.
2832    
2833     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2834    
2835 kaz 1.55 * mcvs-main.lisp (*cvs-options*): Remove obsolete "a".
2836     (*cvs-options-arg*): Add missing "r".
2837     (*usage*): New constant, help text.
2838     (mcvs-execute): Process help and version command line options.
2839    
2840     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2841    
2842 kaz 1.54 * options.lisp (parse-opt): Make error messages more consistent.
2843    
2844     2002-03-12 Kaz Kylheku <kaz@ashi.footprints.net>
2845    
2846 kaz 1.53 * find-bind.lisp (find-bind): Make rem-var optional; sometimes
2847     the user might not care about the remaining unmatched list.
2848    
2849 kaz 1.49 2002-03-11 Kaz Kylheku <kaz@ashi.footprints.net>
2850    
2851 kaz 1.52 * find-bind.lisp (find-bind): Documentation string change. Clarify
2852     that default values are substituted whenever a variable would
2853     otherwise be bound to the value NIL, even through an explicit
2854     match.
2855    
2856     2002-03-11 Kaz Kylheku <kaz@ashi.footprints.net>
2857    
2858 kaz 1.51 Sane filtering of -d option in checkout.
2859    
2860     * find-bind.lisp (find-bind): Variable bindings can specify
2861     a third element, which provides a default value for any variables
2862     that turn out NIL.
2863    
2864     * checkout.lisp (mcvs-checkout): Filter out the -d dir option,
2865     and use it to override the name of the checkout directory,
2866     the way CVS checkout does it.
2867    
2868     2002-03-11 Kaz Kylheku <kaz@ashi.footprints.net>
2869    
2870 kaz 1.50 Bugfix: mcvs add was not processing existing :ignore's in MCVS/TYPES.
2871    
2872     * add.lisp (mcvs-add): Use old types as well as new types
2873     to filter for ignores.
2874    
2875     2002-03-11 Kaz Kylheku <kaz@ashi.footprints.net>
2876    
2877 kaz 1.49 * find-bind.lisp: New file.
2878     (find-bind-extract-vals): New function.
2879     (find-bind): New macro.
2880    
2881     * error.lisp (restart-destructure): Macro removed.
2882     (mcvs-error-handler): Uses generic find-bind instead of
2883     restart-destructure.
2884    
2885 kaz 1.43 2002-03-09 Kaz Kylheku <kaz@ashi.footprints.net>
2886    
2887 kaz 1.48 * filt.lisp (mcvs-filt): Bugfix: do not stop processing line
2888     if F- file name is not found in hash table.
2889    
2890     2002-03-09 Kaz Kylheku <kaz@ashi.footprints.net>
2891    
2892 kaz 1.47 Commit is handled through mcvs-generic, so it can take
2893     filename arguments, and honor --nometa.
2894    
2895     * commit.lisp: File removed.
2896     (mcvs-commit): Function removed.
2897     (mcvs-commit-wrapper): Moved to generic.lisp.
2898    
2899     * generic.lisp (mcvs-commit-wrapper): Moved from commit.lisp,
2900     changed to invoke mcvs-generic.
2901     (mcvs-generic): Only add TYPES file to list if it actually
2902     exists.
2903    
2904     2002-03-09 Kaz Kylheku <kaz@ashi.footprints.net>
2905    
2906 kaz 1.46 New --nometa command line option.
2907    
2908     * mcvs-main.lisp (*cvs-options*): Add "nometa" to list.
2909     (mcvs-execute): Filter global options to recognize
2910     Meta-CVS-specific ones.
2911    
2912     * options.lisp (*nometa-option*): New special variable.
2913     (filter-global-options): New function.
2914    
2915     * generic.lisp (mcvs-generic): Honor *nometa-option* special
2916     variable.
2917    
2918     2002-03-09 Kaz Kylheku <kaz@ashi.footprints.net>
2919    
2920 kaz 1.45 * generic.lisp (mcvs-generic): Make sure TYPES file is
2921     included in list of files.
2922    
2923     2002-03-09 Kaz Kylheku <kaz@ashi.footprints.net>
2924    
2925 kaz 1.44 * mcvs-main.lisp (*add-options*): Support -R option for add.
2926     Thus, recursive add works now.
2927    
2928     2002-03-09 Kaz Kylheku <kaz@ashi.footprints.net>
2929    
2930 kaz 1.43 Fix mcvs filt so it handles suffixed F- files properly.
2931    
2932     * filt.lisp (make-filt-hash): New function.
2933     (mcvs-filt): After matching hex digits, also check for
2934     a suffix match.
2935    
2936 kaz 1.40 2002-02-17 Kaz Kylheku <kaz@ashi.footprints.net>
2937    
2938 kaz 1.42 Support for file type keyword treatment under mcvs add.
2939    
2940     * add.lisp (mcvs-add): Restructured to build up list of new file
2941     suffixes, allow the user to edit the file which determines how
2942     they are treated, filter out ignored files and pass -k options
2943     to multiple cvs adds.
2944    
2945     * types.lisp (*mcvs-new-types*): New constant.
2946     (*types-comments*): Constant moved here from import.lisp.
2947     (types-remove-ignores): New function. Code factored out from
2948     mcvs-import.
2949     (types-let-user-edit): Likewise.
2950     (types-make-cvs-adds): New function.
2951    
2952     * import.lisp (*types-comments*): Constant removed. Moved to
2953     types.lisp
2954     (mcvs-import): Code factored out to new functions in types.lisp, which
2955     are also used by add.lisp.
2956    
2957     2002-02-17 Kaz Kylheku <kaz@ashi.footprints.net>
2958    
2959 kaz 1.41 * print.lisp: New file.
2960     (print-assoc-list): New function.
2961     * types.lisp: Use print-assoc-list to nicely print the types.
2962     * import.lisp (mcvs-import): Don't bother getting user to
2963     edit the types if the type list is empty. In fact, don't
2964     even create the file.
2965    
2966     2002-02-17 Kaz Kylheku <kaz@ashi.footprints.net>
2967    
2968     * add.lisp (mcvs-add): Use new form of mapping-generate-name.
2969    
2970     2002-02-17 Kaz Kylheku <kaz@ashi.footprints.net>
2971    
2972 kaz 1.40 * import.lisp (mcvs-import): Fix broken restart for re-editing
2973     the types file.
2974     (*types-comments*): Drastically shorten the help text.
2975    
2976 kaz 1.38 2002-02-16 Kaz Kylheku <kaz@ashi.footprints.net>
2977    
2978 kaz 1.39 Support for filetypes in import.
2979    
2980     * posix.lisp (suffix): Separator character parameter is optional;
2981     multiple occurences of character lead to one big suffix like
2982     ".tar.gz" instead of ".gz". A leading dot means it's not a suffix but
2983     a hidden file like ".exrc".
2984     (edit-file): New function, brings up text editor for specified file.
2985    
2986     * clisp-linux.lisp (env-lookup): New function for environment
2987     variable lookup.
2988    
2989     * types.lisp: New source file.
2990     (*mcvs-types-name*, *mcvs-types*): New constants for TYPES filename.
2991     (types-read, types-write, types-sanity-check,
2992     types-to-import-wrapper-args): New functions.
2993    
2994     * import.lisp (*types-comments*): New constant.
2995     (mcvs-import): Restructured to build up list of file suffixes,
2996     allow the user to edit the file which determines how they
2997     are treated, filter out ignored files and pass -W options to cvs import
2998     to handle the rest. Failed cvs import is turned into restartable
2999     condition.
3000    
3001     * mapping.lisp (mapping-generate-name): Takes a suffix parameter.
3002     The F-files now carry a suffix obtained from the original file,
3003     because I have concluded that this was the only reasonable way
3004     to integrate with CVS.
3005    
3006     2002-02-16 Kaz Kylheku <kaz@ashi.footprints.net>
3007    
3008 kaz 1.38 * add.lisp (mcvs-add): Last change completely broke add due
3009     to not breaking out of the retry loop.
3010    
3011 kaz 1.36 2002-02-13 Kaz Kylheku <kaz@ashi.footprints.net>
3012    
3013 kaz 1.37 * move.lisp (mcvs-move): If the mapping-update operation returns
3014     nil, or terminates by a non-local jump, restore the filemap.
3015     * mapping.lisp (mapping-update): When returning normally,
3016     return t. When returning after doing a rollback, return nil.
3017    
3018     2002-02-13 Kaz Kylheku <kaz@ashi.footprints.net>
3019    
3020 kaz 1.36 * error.lisp (mcvs-error-handler): Bugfix. We were closing over
3021     a binding of the iteration variable of a dolist, which has only
3022     one binding over the entire loop.
3023    
3024     * mapping.lisp (mapping-update): Gathers up info all local
3025     clobbered files, and then throw the error. Provides restart
3026     which allows user to print the list of clobbered files, and
3027     a restart which allows the user to have those files clobbered.
3028    
3029     2002-02-13 Kaz Kylheku <kaz@ashi.footprints.net>
3030    
3031     * checkout.lisp (mcvs-checkout-wrapper): Bugfix for last bugfix.
3032    
3033 kaz 1.35 2002-02-11 Kaz Kylheku <kaz@ashi.footprints.net>
3034    
3035     * checkout.lisp (mcvs-checkout-wrapper): Bugfix for bad
3036     destructuring-bind if there are no arguments.
3037    
3038 kaz 1.30 2002-02-10 Kaz Kylheku <kaz@ashi.footprints.net>
3039    
3040 kaz 1.34 * mapping.lisp (mapping-difference): Reformatted documentation string.
3041     (mapping-update): Implemented a continue restart which rolls back
3042     the changes done to the local filesystem.
3043    
3044     2002-02-10 Kaz Kylheku <kaz@ashi.footprints.net>
3045    
3046 kaz 1.31 * error.lisp (mcvs-error-handler): Rearranging the menu,
3047     so "T" is clumped with the main options, and any special restarts
3048 kaz 1.32 are clearly separated. Changed wording.
3049 kaz 1.31
3050     2002-02-10 Kaz Kylheku <kaz@ashi.footprints.net>
3051    
3052 kaz 1.30 * update.lisp (mcvs-update): Re-print the "Invoking CVS" chatter
3053     if the user re-tries the error.
3054    
3055     * add.lisp (mcvs-add): CVS failure is now a restartable error;
3056 kaz 1.33 user can decide whether to roll back the effects or retry the
3057     CVS add, or terminate to keep the effects anyway despite
3058     the failed add.
3059 kaz 1.30
3060     2002-02-10 Kaz Kylheku <kaz@ashi.footprints.net>
3061    
3062     * install.sh: Stop the script if there are compilation errors.
3063    
3064 kaz 1.24 2002-02-09 Kaz Kylheku <kaz@ashi.footprints.net>
3065    
3066 kaz 1.29 * error.lisp (*mcvs-errors-occured-p*): New special variable.
3067     (mcvs-error-handler): Set *mcvs-errors-occured-p* to T.
3068     * mcvs-main.lisp (mcvs): Take *mcvs-errors-occured-p* into
3069     account in computing termination status.
3070    
3071     2002-02-09 Kaz Kylheku <kaz@ashi.footprints.net>
3072    
3073 kaz 1.28 * update.lisp: Remove spurious newlines from error messages.
3074     * add.lisp: Likewise.
3075     * options.lisp: Likewise.
3076     * mapping.lisp: Likewise.
3077    
3078     2002-02-09 Kaz Kylheku <kaz@ashi.footprints.net>
3079    
3080 kaz 1.27 Adding some restarts around cvs update.
3081    
3082     * posix.lisp (execute-command-xargs): Bail with nil return
3083     value if any command line fails.
3084    
3085     * update.lisp (mcvs-update): Tests return value of execute-program
3086     and signal condition if it's nil. Provides a continue restart
3087     as well as a retry restart to try the command again.
3088    
3089     * error.lisp (mcvs-error-handler): Show retry restarts as
3090     a special menu item "R".
3091    
3092     2002-02-09 Kaz Kylheku <kaz@ashi.footprints.net>
3093    
3094 kaz 1.26 Added a much improved error handling routine in anticipation
3095     of better use of restarts.
3096    
3097     * error.lisp: New file
3098     (restart-destructure): New macro.
3099     (*mcvs-error-treatment*): Special variable, moved here from
3100     mcvs-main.
3101     (mcvs-error-handler): New function.
3102    
3103     * mcvs-main.lisp (mcvs-top-error-handler): Function removed.
3104     (mcvs-execute): Bind error to new mcvs-error-handler instad
3105     of mcvs-top-error-handler.
3106    
3107     2002-02-09 Kaz Kylheku <kaz@ashi.footprints.net>
3108    
3109 kaz 1.25 * mcvs-main.lisp (*mcvs-command-table*): The "stat" abbreviation
3110     for status command added.
3111    
3112     2002-02-09 Kaz Kylheku <kaz@ashi.footprints.net>
3113    
3114 kaz 1.24 Hooking conversion tool into command structure.
3115    
3116     * mcvs-main.lisp (*convert-options*): New constant.
3117     (*mcvs-command-table*): New entry for mcvs-convert-wrapper.
3118     * convert.lisp (mcvs-convert): Fix reference to nonexistent variable.
3119     (mcvs-convert-wrapper): New function.
3120    
3121 kaz 1.22 2002-02-08 Kaz Kylheku <kaz@ashi.footprints.net>
3122    
3123 kaz 1.23 Beginning work on repository conversion utility.
3124    
3125     * convert.lisp: New file. Contains conversion utility
3126     to make an Meta-CVS repository from an ordinary CVS repository,
3127     while preserving all history, tags and branches.
3128     (remove-attic-component, classify-tags, read-tags,
3129     mcvs-convert): New functions.
3130    
3131     * posix.lisp (suffix): New function. Computes suffix of file.
3132     (execute-program-xargs): New optional parameter, for specifying
3133     fixed part added at the end of each generated command line.
3134    
3135     * mapping.lisp (*mcvs-map-name*, *mcvs-local-map-name*): New constants.
3136     (*mcvs-map*, *mcvs-map-local*): Redefined in terms of new constants.
3137     (mapping-generate-name): New key parameter no-dir for not adding
3138     the directory prefix.
3139    
3140     2002-02-08 Kaz Kylheku <kaz@ashi.footprints.net>
3141    
3142 kaz 1.22 * checkout.lisp (mcvs-checkout): Ensure local mapping is
3143     sorted when written out, for easier comparisons.
3144    
3145 kaz 1.21 2002-02-07 Kaz Kylheku <kaz@ashi.footprints.net>
3146    
3147     * sync.lisp (synchronize-files): Return :dir symbol when either
3148     argument is a directory.
3149     * mapping.lisp (mapping-synchronize): Chatter output messages
3150     are shorter. Handles :dir return value from synchronize-files.
3151     (mapping-update): New sanity checks for moved and added
3152     files, to avoid clobbering local files. Removed redundant
3153     call to ensure-directories-exit in move logic, because
3154     synchronize-files will do it anyway. Chatter messages reordered
3155     to occur before their corresponding action is done.
3156    
3157     2002-02-07 Kaz Kylheku <kaz@ashi.footprints.net>
3158    
3159     Improve error handling, and builtin ``debug shell''.
3160    
3161     * mcvs-main.lisp (*mcvs-error-treatment*): Special variable
3162     can have new domain value, namely :decline.
3163     (mcvs-top-error-handler): Print error message when terminating
3164     non-restartable error. Handle new :decline treatment by
3165     simply returning.
3166     (mcvs-debug-shell): Set *mcvs-error-treatment* to :decline
3167     so that errors are caught by debugger.
3168    
3169 kaz 1.20 2002-02-04 Kaz Kylheku <kaz@ashi.footprints.net>
3170    
3171     * mapping.lisp (mapping-sort): Removed function.
3172     (mapping-write): Sort written map by F- file names,
3173     not by path names. This is far better for merging, because
3174     files stay in the same place when they are renamed.
3175    
3176 kaz 1.17 2002-02-03 Kaz Kylheku <kaz@ashi.footprints.net>
3177    
3178 kaz 1.19 Added status, log and annotate.
3179    
3180     * mcvs-main.lisp: (*log-options*, *status-options*,
3181     *annotate-options*): New constants.
3182     (*mcvs-command-table*): Add new entries.
3183    
3184     * generic-lisp (mcvs-log-wrapper, mcvs-status-wrapper,
3185     mcvs-annotate-wrapper): New functions.
3186    
3187     2002-02-03 Kaz Kylheku <kaz@ashi.footprints.net>
3188    
3189 kaz 1.18 Added tag command.
3190    
3191     * diff.lisp: File renamed to generic.lisp.
3192     (mcvs-diff): Function renamed to mcvs-generic.
3193    
3194     * generic.lisp (mcvs-generic): Function no longer dedicated to
3195     diffing only; takes CVS command to execute as an argument,
3196     also takes arguments and files as separate lists.
3197     (mcvs-diff-wrapper): Modified to invoke mcvs-generic properly.
3198     (mcvs-tag-wrapper): New function, uses mcvs-generic to implement
3199     tag command.
3200    
3201     * mcvs-main.lisp (*tag-options*): New constant.
3202     (*mcvs-command-table*): New entry for tag command.
3203    
3204     2002-02-03 Kaz Kylheku <kaz@ashi.footprints.net>
3205    
3206 kaz 1.17 Added workaround for operating system argument passing limitations,
3207     resembling the Unix xargs utility. Also, trimmed some fat
3208     from the basename function.
3209    
3210     * clisp-linux.lisp: (*argument-limit*): New constant added.
3211     (arglist-to-command-string): Function removed.
3212     (execute-program): Function removed.
3213     (shell-interpreter): New function, wrapper for CLISP's shell
3214     function, turns exit status into T (success) or NIL (failure).
3215    
3216     * diff.lisp (mcvs-diff): Uses execute-program-xargs instead
3217     of execute-program.
3218    
3219     * posix.lisp (basename): Does not canonicalize path name. This
3220     turns out to be an unnecessary performance hit in some cases.
3221     (arglist-to-command-string): New function. Similar to what was
3222     removed from clisp-linux, but this one properly escapes all
3223     shell metacharacters.
3224     (execute-program): New function, calls shell-interpreter.
3225     (execute-program-xargs): New function. Takes two argument lists.
3226     Forms one or more command lines by combining the first argument list
3227     with one or more pieces of the second argument list, and
3228     executes each command. The length of the pieces is determined
3229     by the argument passing limit.
3230    
3231     * dirwalk.lisp (ensure-directories-gone): Add use of
3232     canonicalize-path because basename doesn't do it.
3233    
3234 kaz 1.12 2002-02-02 Kaz Kylheku <kaz@ashi.footprints.net>
3235    
3236 kaz 1.16 Algorithmic efficiency improvements. No longer using
3237     abstract set operations to update file structure or find
3238     duplicates in the maps. Could still streamline the sorting.
3239    
3240     * mapping.lisp (mapping-sort): Express more succinctly using key.
3241     (mapping-dupe-check): Rewrite using loop over sorted lists.
3242     (mapping-difference): New function for computing mapping change.
3243     (mapping-update): Modify to use mapping-difference.
3244    
3245     2002-02-02 Kaz Kylheku <kaz@ashi.footprints.net>
3246    
3247 kaz 1.15 * mapping.lisp (mapping-update): When moving files, ensure
3248     that the target is unlinked if it exists.
3249    
3250     * move.lisp (simple-rename): No longer do target unlinking
3251     here. Also bugfix: it wasn't handling renames of directories
3252     containing just one file.
3253    
3254     2002-02-02 Kaz Kylheku <kaz@ashi.footprints.net>
3255    
3256 kaz 1.13 * mapping.lisp (mapping-dupe-check): New function for
3257     detecting duplicate objects or paths in a mapping.
3258     (mapping-sane-p): Function removed.
3259     (mapping-read): Use mapping-dupe-check to verify a map
3260     when asked by the sanity-check keyword.
3261     (mapping-update): Specify sanity check when reading MCVS/MAP.
3262    
3263 kaz 1.14 * checkout.lisp (mcvs-checkout): Checkout also performs
3264     sanity check.
3265    
3266 kaz 1.13 2002-02-02 Kaz Kylheku <kaz@ashi.footprints.net>
3267    
3268 kaz 1.12 * mcvs-main.lisp (mcvs): Use CLISP's exit function correctly
3269     to establish proper termination status.
3270    
3271 kaz 1.8 2002-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
3272    
3273 kaz 1.10 * mcvs-main.lisp (mcvs-execute): Parse command-specific options
3274     properly based on knowledge of each command's set of options.
3275     (parse-args): Function removed.
3276    
3277 kaz 1.11 * options.lisp (parse-opt): Correctly process long options with
3278     arguments. Argument is part of the string, separated by = symbol.
3279    
3280 kaz 1.10 2002-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
3281    
3282 kaz 1.9 * options.lisp (parse-opt): When multiple options characters are
3283     bunched up into one argument, and one of them other than the
3284     last one takes an argument, then the remaining ones are
3285     considered to constitute a string which is an argument to that
3286     option. For instance -y32 means -y 32, not -y -3 -2, assuming
3287     that y is an option that requires an argument.
3288    
3289     2002-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
3290    
3291     Top level handler terminates by non-local exit back to
3292     mcvs function, rather than by calling (exit).
3293    
3294     * mcvs-main.lisp (mcvs-top-error-handler): Restructured
3295     to call (throw 'mcvs-exit t).
3296     (mcvs-execute): Ensure that NIL is returned by normal exit.
3297     (mcvs): Catches 'mcvs-exit throw, and calls (exit 0) or (exit 1)
3298     accordingly.
3299    
3300    
3301     2002-01-31 Kaz Kylheku <kaz@ashi.footprints.net>
3302    
3303 kaz 1.8 Renamed all ``filemap-'' functions to ``mapping-'' prefix.
3304    
3305     * mapping.lisp (filemap-generate-name, filemap-sort,
3306     filemap-extract-paths, filemap-lookup, filemap-prefix-lookup,
3307     filemap-prefix-matches, filemap-object-lookup,
3308     filemap-same-object-p, filemap-same-path-p, filemap-moved-p,
3309     filemap-rename-files, filemap-sane-p): Old names removed.
3310     (mapping-generate-name, mapping-sort,
3311     mapping-extract-paths, mapping-lookup, mapping-prefix-lookup,
3312     mapping-prefix-matches, mapping-object-lookup,
3313     mapping-same-object-p, mapping-same-path-p, mapping-moved-p,
3314     mapping-rename-files, mapping-sane-p): New names created.
3315     (mapping-read, mapping-write, mapping-synchronize,
3316     mapping-update): Edit calls to renamed functions.
3317     * add.lisp (mcvs-add): Likewise.
3318     * diff.lisp (mcvs-diff): Likewise.
3319     * filt.lisp (mcvs-filt): Likewise.
3320     * import.lisp (mcvs-import): Likewise.
3321     * move.lisp (simple-rename, simple-move-to-dir, move-guts): Likewise.
3322     * remove.lisp (mcvs-remove): Likewise.
3323    
3324 kaz 1.6 2002-01-30 Kaz Kylheku <kaz@ashi.footprints.net>
3325    
3326 kaz 1.7 Factored out repeated code for reading and writing of the MAP and
3327     MAP-LOCAL files.
3328    
3329     * mapping.lisp (mapping-read, mapping-write): New functions.
3330     (mapping-synchronize, mapping-update): Use new functions.
3331     * move.lisp (mcvs-move): Likewise.
3332     * filt.lisp (mcvs-filt): Likewise.
3333     * add.lisp (mcvs-add): Likewise.
3334     * remove.lisp (mcvs-remove): Likewise.
3335     * checkout.lisp (mcvs-checkout): Likewise.
3336     * diff.lisp (mcvs-diff): Likewise.
3337     * import.lisp (mcvs-import): Likewise.
3338    
3339     2002-01-30 Kaz Kylheku <kaz@ashi.footprints.net>
3340    
3341 kaz 1.6 * filt.lisp (mcvs-filt): use *mcvs-dir* variable instead of
3342     hard coding "MCVS" string.
3343    
3344     2002-01-30 Kaz Kylheku <kaz@ashi.footprints.net>
3345    
3346     * MCVS-PAPER: Renamed to Meta-CVS-PAPER
3347    
3348     * README: Change all references to MCVS to Meta-CVS, the
3349     new official name of the program.
3350     * add.lisp: Likewise
3351     * chatter.lisp: Likewise
3352     * checkout.lisp: Likewise
3353     * clisp-linux.lisp: Likewise
3354     * commit.lisp: Likewise
3355     * diff.lisp: Likewise
3356     * dirwalk.lisp: Likewise
3357     * filt.lisp: Likewise
3358     * import.lisp: Likewise
3359     * INSTALL: Likewise
3360     * mapping.lisp: Likewise
3361     * mcvs-main.lisp: Likewise
3362     * Meta-CVS-PAPER: Likewise
3363     * move.lisp: Likewise
3364     * options.lisp: Likewise
3365     * posix.lisp: Likewise
3366     * RELEASE-NOTES: Likewise
3367     * remove.lisp: Likewise
3368     * restart.lisp: Likewise
3369     * seqfuncs.lisp: Likewise
3370     * split.lisp: Likewise
3371     * sync.lisp: Likewise
3372     * system.lisp: Likewise
3373     * update.lisp: Likewise
3374    
3375 kaz 1.4 2002-01-28 Kaz Kylheku <kaz@ashi.footprints.net>
3376    
3377 kaz 1.5 * move.lisp (move-guts): test the actual filesystem as well
3378     as the map for existence of a directory or file. This makes
3379     the move operation behave better. Files can be moved to an
3380     existing directory that is not known to MCVS, and a file
3381     can properly clobber a target file that is not known to MCVS.
3382    
3383     * clisp-linux.lisp (directory-p, regular-p, symlink-p): define
3384     methods for these generic functions for a NIL argument, such
3385     that they return NIL.
3386    
3387     2002-01-28 Kaz Kylheku <kaz@ashi.footprints.net>
3388    
3389 kaz 1.4 * move.lisp (simple-move-to-dir): eliminated a bunch of code
3390     with the result that mcvs mv now works more like the Unix mv
3391     when moving a directory to another directory.
3392    
3393     * mcvs-main.lisp (mcvs-execute): fix bogus error message
3394     when options are given but no command.
3395    
3396     * README: don't use -z3 in example because this style of
3397     specifying an argument to an option doesn't work.
3398    
3399 kaz 1.1 2002-01-27 Kaz Kylheku <kaz@ashi.footprints.net>
3400    
3401     * add.lisp (mcvs-add): Remove bogus test for NIL or T; allow
3402     recursivep to be a generalized boolean variable. This allows
3403     mcvs add -R to work properly.
3404 kaz 1.2
3405     * mcvs-main.lisp (*cvs-command-options-arg*): add support
3406     for -u parameter, useful in cvs diff.
3407 kaz 1.3 (*mcvs-command-table*): Add "fi" shorthand for "filt".

  ViewVC Help
Powered by ViewVC 1.1.5