Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to symlink-branch:||(view) (annotate)|
* code/remap.lisp (mcvs-remap): Use new mapping entry structure. For now, preserve symbolic link entries as they are, processing only files. * code/mapping.lisp (equal-mapping-entries, equal-mappings): New functions.
* code/clisp-unix.lisp (initialize-instance link-error): Make error message less confusing about which path refers to the object being created, and which path refers to what it links to. * code/mapping.lisp (mapping-rename-files): Bugfix: destructuring-bind appeared in place of with-slots. (mapping-synchronize): When creating symbolic link, ensure that its directory exists. (mapping-update): Likewise.
* code/add.lisp (mcvs-add): Change to new mapping-entry data structure and handle symbolic links. * code/types.lisp (types-remove-ignores, types-make-cvs-adds): Change to new mapping-entry data structure. * code/mapping.lisp (mapping-generate-name): Renamed to mapping-generate-id. Interface changes slightly. (mapping-extract-kind): New function, factored out from mcvs-generic. (mapping-update): Unlink existing symbolic link before re-linking it. * code/convert.lisp (mcvs-convert): Use new name and interface of mapping-generate-name function. * code/create.lisp (mcvs-create): Likewise. * code/generic.lisp (mcvs-generic): Code to extract :file entries from map factored out to mapping-extract-kind.
Support for symbolic links added to the mapping module. The format of the map file has changed to accomodate this. The new format of the list entries is (:keyword "id" "path" ...) where the keyword is either :file or :symlink (for now, extensible obviously), "id" is a unique identifier (for regular files, it is their MCVS/F-* name) and "path" is the sandbox path. Other things can follow; for symlinks, there is a string representing the symlink target. Internally, a new data type called mapping-entry is used; this is a struct. So the functions which read and write maps now convert between the struct format and the above format. * code/unix-bindings/unix.lisp (unix-funcs:readlink): New function. * code/unix-bindings/impl.c (impl_readlink): New function. * code/clisp-unix.lisp (readlink-error): New condition. (initialize-instance readlink-error): New method for initialize-instance generic function, specialized for readlink-error. (readlink): New function. * code/mapping.lisp (mapping-entry): New struct, with slots file, id, path and target. (mapping-same-object-p): Renamed to mapping-same-id-p. (mapping-object-lookup, mapping-moved-p): Unused functions removed. (mapping-extract-paths, mapping-lookup, mapping-prefix-lookup, mapping-prefix-matches, mapping-same-path-p, mapping-rename-files, mapping-removed-files): Functions updated to use the new data structure. (mapping-dupe-checks): Rewritten for new data structure, and to use hashes rather than silly sorting. (mapping-convert-old-style-in, mapping-convert-in, mapping-convert-out): New functions. (mapping-read): Handle new and old style representations, handle conversion to internal representation. (mapping-write): Convert to new-style external representation before writing out. (mapping-synchronize): Handle symbolic links. If a link is missing, create it. If it's present but different from what it should be, erase it and re-create it. (mapping-update): Use new data structure. Handle symbolic links. * code/remove.lisp (mcvs-remove): Refer to new function name, mapping-same-id-p.
Use getcwd to to implement mcvs-locate. * code/unix-bindings/unix.lisp (getcwd): New call out, invokes impl_getcwd. * code/unix-bindings/impl.c (impl_getcwd): New function, use getcwd() to obtain current working directory, resizing dynamic buffer if necessary to get the entire path. * code/clisp-unix.lisp (getcwd): New wrapper function. * code/dirwalk.lisp (go-up): Function removed. * code/mapping.lisp (mcvs-locate): Rewritten to obtain path using getcwd, then try looking for MCVS directory in successively shorter prefixes of that path.
* seqfuncs.lisp (intersection-difference): Support a new keyword parameter :squash-nil. * mapping.lisp (mapping-difference): Filter non-moved pairs directly in intersection-difference call using :squash-nil, eliminating the need to do a second remove-if pass.
* mapping.lisp (mapping-difference): Rewrite using intersection-difference.
Merging from partial-sandbox-branch.
* purge.lisp (mcvs-purge): Factor out code for computing deleted files. * mapping.lisp (mapping-removed-files): New function, contains code factored from mcvs-purge. * restore.lisp: New file. (mcvs-restore, mcvs-restore-wrapper): New functions.
Grab no longer synchronizes to recreate deleted files immediately before blowing them away. * grab.lisp (mcvs-grab): Specify :no-sync t when calling mcvs-remove. * remove.lisp (mcvs-remove): Support new no-sync keyword. This tells mcvs-remove that the files being removed from the mapping, don't exist in the sandbox. So it's not necessary to call mapping-synchronize, and mapping-update can be told via :no-delete-removed t not to try to remove deleted files. * mapping.lisp (mapping-update): New no-delete-removed keyword parameter.
* grab.lisp (read-word-hash): Use #'equalp test for case-insensitive string comparisons. (added-removed): Use string< instead of string-lessp for comparing paths. (determine-common-words, eliminate-common-words): New functions. (move-candidates): Acceptance threshold reduced to 50%, since elimination of common words reduces the similarity correlation. (mcvs-grab): Use string< instead of string-lessp when sorting paths. Do the common words computation. * mapping.lisp (mapping-dupe-check, mapping-write, mapping-difference): Use string< instead of string-lessp.
* mapping.lisp (in-sandbox-root-dir): Fix symbol macro sandbox-down-path; it was referring to the (quote #:DOWNPATH-NNN) rather than #:DOWNPATH-NNN.
* mapping.lisp (mapping-update): Provide restart that allows user to ignore file removal error.
Porting to CMUCL. * system.lisp: Conditionally load new module cmucl-unix. * mapping.lisp (mapping-dupe-check, mapping-write, mapping-difference): Fixes related to sort function; we were relying on CLISP's preservation of the cons cell order. * cmucl-unix.lisp: New file.
Absolute paths resolved against sandbox root. * posix.lisp (path-absolute-p): New function. Predicate to test whether a path is absolute. * mapping.lisp (in-sandbox-root-dir): sandbox-translate-paths function detects absolute path, and treats it as relative to sandbox root.
* mapping.lisp (malformed-map): New function. (mapping-dupe-check): Perform extra error checks when reading mapping, and turn them into a condition with a ``nice'' error message.
Minor adjustment to chatter level.
* mapping.lisp (mapping-update): Messages related to moving, adding or removing files promoted to terse level, so only -Q can suppress them.
* update.lisp (mcvs-update): Changing level of chatter messages. * move.lisp (mcvs-move): Likewise. * add.lisp (mcvs-add): Likewise. * remove.lisp (mcvs-remove): Likewise. * checkout.lisp (mcvs-checkout): Likewise. * generic.lisp (mcvs-generic): Likewise. * import.lisp (mcvs-import): Likewise. * mapping.lisp (mapping-dupe-check): Likewise. (mapping-update): Likewise.
Support for filetypes in import. * posix.lisp (suffix): Separator character parameter is optional; multiple occurences of character lead to one big suffix like ".tar.gz" instead of ".gz". A leading dot means it's not a suffix but a hidden file like ".exrc". (edit-file): New function, brings up text editor for specified file. * clisp-linux.lisp (env-lookup): New function for environment variable lookup. * types.lisp: New source file. (*mcvs-types-name*, *mcvs-types*): New constants for TYPES filename. (types-read, types-write, types-sanity-check, types-to-import-wrapper-args): New functions. * import.lisp (*types-comments*): New constant. (mcvs-import): Restructured to build up list of file suffixes, allow the user to edit the file which determines how they are treated, filter out ignored files and pass -W options to cvs import to handle the rest. Failed cvs import is turned into restartable condition. * mapping.lisp (mapping-generate-name): Takes a suffix parameter. The F-files now carry a suffix obtained from the original file, because I have concluded that this was the only reasonable way to integrate with CVS.
* move.lisp (mcvs-move): If the mapping-update operation returns nil, or terminates by a non-local jump, restore the filemap. * mapping.lisp (mapping-update): When returning normally, return t. When returning after doing a rollback, return nil.
* error.lisp (mcvs-error-handler): Bugfix. We were closing over a binding of the iteration variable of a dolist, which has only one binding over the entire loop. * mapping.lisp (mapping-update): Gathers up info all local clobbered files, and then throw the error. Provides restart which allows user to print the list of clobbered files, and a restart which allows the user to have those files clobbered. * checkout.lisp (mcvs-checkout-wrapper): Bugfix for last bugfix.
* mapping.lisp (mapping-difference): Reformatted documentation string. (mapping-update): Implemented a continue restart which rolls back the changes done to the local filesystem.
Remove spurious newlines from error messages.
* convert.lisp: New file. Contains conversion utility to make an Meta-CVS repository from an ordinary CVS repository, while preserving all history, tags and branches. (remove-attic-component, classify-tags, read-tags, mcvs-convert): New functions. * posix.lisp (suffix): New function. Computes suffix of file. (execute-program-xargs): New optional parameter, for specifying fixed part added at the end of each generated command line. * mapping.lisp (*mcvs-map-name*, *mcvs-local-map-name*): New constants. (*mcvs-map*, *mcvs-map-local*): Redefined in terms of new constants. (mapping-generate-name): New key parameter no-dir for not adding the directory prefix.
* sync.lisp (synchronize-files): Return :dir symbol when either argument is a directory. * mapping.lisp (mapping-synchronize): Chatter output messages are shorter. Handles :dir return value from synchronize-files. (mapping-update): New sanity checks for moved and added files, to avoid clobbering local files. Removed redundant call to ensure-directories-exit in move logic, because synchronize-files will do it anyway. Chatter messages reordered to occur before their corresponding action is done. * mcvs-main.lisp (*mcvs-error-treatment*): Special variable can have new domain value, namely :decline. (mcvs-top-error-handler): Print error message when terminating non-restartable error. Handle new :decline treatment by simply returning. (mcvs-debug-shell): Set *mcvs-error-treatment* to :decline so that errors are caught by debugger.
* mapping.lisp (mapping-sort): Removed function. (mapping-write): Sort written map by F- file names, not by path names. This is far better for merging, because files stay in the same place when they are renamed.
Algorithmic efficiency improvements. No longer using abstract set operations to update file structure or find duplicates in the maps. Could still streamline the sorting. * mapping.lisp (mapping-sort): Express more succinctly using key. (mapping-dupe-check): Rewrite using loop over sorted lists. (mapping-difference): New function for computing mapping change. (mapping-update): Modify to use mapping-difference.
* mapping.lisp (mapping-update): When moving files, ensure that the target is unlinked if it exists. * move.lisp (simple-rename): No longer do target unlinking here. Also bugfix: it wasn't handling renames of directories containing just one file.
Error message change.
Oops, correcting little function name mismatch.
* mapping.lisp (mapping-dupe-check): New function for detecting duplicate objects or paths in a mapping. (mapping-sane-p): Function removed. (mapping-read): Use mapping-dupe-check to verify a map when asked by the sanity-check keyword. (mapping-update): Specify sanity check when reading MCVS/MAP.
Renamed all ``filemap-'' functions to ``mapping-'' prefix. * mapping.lisp (filemap-generate-name, filemap-sort, filemap-extract-paths, filemap-lookup, filemap-prefix-lookup, filemap-prefix-matches, filemap-object-lookup, filemap-same-object-p, filemap-same-path-p, filemap-moved-p, filemap-rename-files, filemap-sane-p): Old names removed. (mapping-generate-name, mapping-sort, mapping-extract-paths, mapping-lookup, mapping-prefix-lookup, mapping-prefix-matches, mapping-object-lookup, mapping-same-object-p, mapping-same-path-p, mapping-moved-p, mapping-rename-files, mapping-sane-p): New names created. (mapping-read, mapping-write, mapping-synchronize, mapping-update): Edit calls to renamed functions. * add.lisp (mcvs-add): Likewise. * diff.lisp (mcvs-diff): Likewise. * filt.lisp (mcvs-filt): Likewise. * import.lisp (mcvs-import): Likewise. * move.lisp (simple-rename, simple-move-to-dir, move-guts): Likewise. * remove.lisp (mcvs-remove): Likewise.
Factored out repeated code for reading and writing of the MAP and MAP-LOCAL files. * mapping.lisp (mapping-read, mapping-write): New functions. (mapping-synchronize, mapping-update): Use new functions. * move.lisp (mcvs-move): Likewise. * filt.lisp (mcvs-filt): Likewise. * add.lisp (mcvs-add): Likewise. * remove.lisp (mcvs-remove): Likewise. * checkout.lisp (mcvs-checkout): Likewise. * diff.lisp (mcvs-diff): Likewise. * import.lisp (mcvs-import): Likewise.
MCVS is being renamed to Meta-CVS.
Fixing compiler errors.
Oops, removed forgotten (break).
Moving closer toward delivery.
Removing debugging diagnostic.
A bit of refactoring. Added mcvs-move.
Sort map in mcvs-remove before writing it out. New routines in mapping, in preparation for file deletion.
Adding all existing source files.
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|