2003-04-02 Federico Di Gregorio * scripts/env.sh: added script to setup environment for debug. * Transition to python 2.3 complete. * eva/commands/*: ported all commands to optparse. * eva/commands/emp/*: moved metadiff and metapatch to emp. 2003-03-30 Federico Di Gregorio * eva/commands/emp/prep.py: ported from metaprep command. * scripts/eva: modified command parsing to add "meta" prefix when invoked as "emp". 2003-03-29 Federico Di Gregorio * eva/patch/patch/abstract.py (Patch.get_sequence): fixed conversion from name to integer. 2003-03-28 Federico Di Gregorio * Added support for zip patch sets (see eva/patch/writers/zip.py, eva/patch/readers/zip.py, metadiff and metapatch.) * eva/patch/writers/*: generic clanup of all writers. * eva/patch/writers/abstract.py: Writer -> AbstractWriter. * eva/commands/: added emp/ directory in preparartion of emp commands. * eva/inventory/inventory.py (Entry._make_kind): updated to search self.canonical before self.name (regexps can now refer to full canonical paths, usefull to make "{eva}/manifest" a control file. 2003-03-26 Federico Di Gregorio * eva/patch/readers/tar.py: updated TarReader to work with tarfile module (does not untar whole archive to a temporary directory anymore): * scripts/metaprep: removed cpfr in favor of copytree (that need to be done in the whole tree.) * scripts/metadiff: added ability to diff tarfiles. * eva/patch/writers/mime.py (MIMEWriter.flush): fixed problem with report still getting Output object as first parameter to write(). 2003-03-25 Federico Di Gregorio * eva/project/notes.py: removed ability to save notes to arbitrary directories; Note object now takes Entry objects, as all other Inventory-enabled classes. * eva/format/report.py: Report now inherits from Formatter and write out the report only if a file-like object is passed to write(). * eva/common/config.py: removed import of join from os.path, apparently it was polluting the namespace. 2003-03-21 Federico Di Gregorio * eva/inventory/inventory.py (Inventory.make_entry): added method to produce stand-alone entries (usefull in notes and when a full inventory is not required.) * Fixed make-tree command. * eva/inventory/inventory.py (Inventory.makeeva): added "prefix" parameter, added just before file name in returned path. * eva/inventory/utils.py (_KIND_EVA_RE): added "EVA" as control in default regexps. 2003-03-20 Federico Di Gregorio * eva/inventory/inventory.py (Inventory.kinds_file): started using "@" for cache files; {eva}->EVA in subdirs. * added my-default-archive and register-archive commands. * eva/user.py (User.set_default_archive): added error checks and right exceptions. * fixed id and gui commands. * eva/common/config.py (ConfigManager.config_writeline): make directories if necessary. 2003-03-18 Federico Di Gregorio * eva/patch/readers/tar.py: added TarReader as a proof-of-concept of howto implement new readers; it even works, but note that it directly calls GNU tar so it won't work on a plain windows install (cygwin should work.) 2003-03-17 Federico Di Gregorio * eva/user.py: now uses ConfigManager. 2003-03-13 Federico Di Gregorio * eva/inventory/manifest.py (Manifest.write): entries are sorted before writing manifest to make sure two runs always generate exactly the same manifest. * eva/user.py: big cleanup; moved LocalCache functionality (temporary directories) directly into User. also added temporary hack to return a default SimpleCache for any archive. * scripts/metadiff: patch-generation-report correctly written to patch set directory, if available. * eva/inventory/manifest.py: docstrings cleanup. * eva/inventory/utils.py: removed TagsManager._write_tags (it was never really used) and other little cleanups. * eva/inventory/inventory.py (InventoryIterator.next): little cleanup of docstrings. also reworked kinds_file a little bit to look for {eva}/kinds in current directory before using default one. changed {eva}/+tree to {eva}/+cache (we are using it as a notes spool and tags cache, but {eva}/+spool is worse. 2003-03-12 Federico Di Gregorio * eva/inventory/inventory.py (Inventory.update_tags): fixed exception with entry names (makeabs takes *entry* not path.) * eva/inventory/inventory.py (Inventory.makeabs): fixed bad bug with makeabs behaviour when passing owned entries. new behaviour is: - use entry.name in join() if the entry is owned (this is the typical case when recursing an Inventory hierarchy; - use entry.canonical in join() in the entry is not owned (works when a top-level inventory is used to makeabs() all the entries by iterating over tags or names. * streamlined package tree by removing aeps, gtk, eeps, etc. (documentation will be added again after heavy rewrite.) * eva/patch/appliers/basic.py: the new BasicApplier uses a flat limbo: code reduced by 20% and much less patch sorting problems. * eva/patch/patch/abstract.py (Patch.get_tag): Added method and also get_to and get_from; very usefull as shortcuts (and abstractions) to dictionary contents. Now needs only to changes about 20 files using old syntax. 2003-03-04 Federico Di Gregorio * eva/patch/makers/abstract.py (AbstractMaker.finish_patch): added method to finish a patch, now patches are really file system-independent. 2003-02-28 Federico Di Gregorio * eva/patch/patch/abstract.py: completely removed necessity to save file system paths into patches; i.e., now patches are completely file system-independent. 2003-01-17 Federico Di Gregorio * eva/inventory/inventory.py: users can now place per-directory configuration into EVA/xxx files. {eva} is for global options and eva-managed files, per-directory EVA directories are for configuration files *edited* by the users (not automatically generated ones.) 2003-01-14 Federico Di Gregorio * eva/patch/patchset.py (PatchSet.prepare_set): updated to work with new inventory code and patch-makers. * eva/patch/makers/basic.py: added BasicMaker class: it simply generates patches using the default patch classes. * eva/patch/makers/__init__.py (__all__): added Maker class, used to "make" (i.e., generate) patches. * eva/patch/patch/*: splitted patch kinds into their own subclasses, generic code in Patch (see __init__.py) and specific code in TextPatch, LinkPatch, BinaryPatch, DirectoryPatch, ControlPatch. 2003-01-02 Federico Di Gregorio * eva/patchset/readers/: splitted readers.py in its own submodule. * eva/patchset/writers/: splitted writers.py in its own submodule. 2002-12-18 Federico Di Gregorio * eva/output/logging.py: some changes to logging and User: - now loglevels can be ind/decremented in a single pass - reimplemented default log in User (we use 1 less log object and about 10 lines of code for every command) * eva/commands/inventory/manifest.py: added manifest commands. * eva/inventory/manifest.py: ported Manifest to the new Inventory/Entry format. * eva/commands/inventory/*: added add, move, delete commands. 2002-12-17 Federico Di Gregorio * eva/common/options.py (add_common_options): added --dont-recurse default option. * eva/user.py (User.__init__): replaced back default log. * eva/common/options.py (getopt_merge): removed. * eva/output/logging.py (LogManager.make_log): added log_factory argument, to build different types of logs. * ARGH! rm -fr ../eva-new left me in an empty, non-existent directory. About to redo all the work. 2002-12-09 Federico Di Gregorio * doc/style.txt: added little explanations about my python style. * eva/inventory/inventory.py: added Enrty class, renamed some attributes _xxx to xxx, to make them directly accessible. 2002-11-29 Federico Di Gregorio * scripts/metapatch: optik-ized metapatch. * eva/output/logging.py (Log.__init__): added PROGRESS parameter. (LogManager.make_progress): added make_progress method. * scripts/metadiff: ported metadiff to new option parsing stuff. 2002-11-26 Jack Moffitt * eva/command.py: Rewrote command implementation. Commands now live in eva/commands, and are divided into groups. * eva/user.py: Changed my_id() and my_ui() to get/set_id() and get/set_gui(). UI changed to GUI throughout the code. * eva/commands/user/id.py: added id command * eva/commands/user/gui.py: added gui command * eva/commands/test/test.py: added test command as a demonstration on how to write other commands * eva/commands/wx/testgui.py: added testgui command to demonstrate gui commands. * eva/common/options.py: Rewrote common option parsing. 2002-11-21 Federico Di Gregorio * scripts/metanote: metanote almost working. added --list command. * eva/format/changelog.py: added changelog formatter. 2002-11-19 Federico Di Gregorio * eva/patch/patch.py (Patch._make_note): only attach note if present (patches now have a dynamic structure, and so? we used MIME exactly for that reason..) * scripts/metanote: added command (still need some work.) * eva/patch/patch.py (Patch._make_delta): fixed problem with patch attachement name being /nowhere/ on additions. Also leaving nested paths as paths, user that wants to extract patches by itself should know what is he doing. * eva/patch/writers.py: moved patch set writers into their own submodule. * eva/common/options.py: moved here all the generic option parsing code. 2002-11-18 Federico Di Gregorio * eva/log/logging.py (LogManager): added .make_log() method, LogManager now is a Log factory. * scripts/metadiff: implemented almost all wanted features (patch set-by-email included.) * eva/patch/utils.py (_diff): added -b option to ignore changes in whitespace only. * eva/patch/patchset.py: added patch Writer(s) to abstract patch generation from real output: to be moved to their own module (eva.patch.writers) shortly. * eva/patch/patch.py: patches now have subtype meta-patch and payload is stored into a separate mime chunk. annotation are directly available as text/plain chunks. * eva/utils.py: removed CwdStack and Indenter classes. * eva/log/output.py: fixed little bug in .wrap(), added .par() and buffering. * eva/patch/patchset.py (PatchSet): ported to new logging code; changed "arch-path" identifier to "matapatch"; now patches are required to start with "\d\d\d\d\.". 2002-11-16 Federico Di Gregorio * eva/patch/patchset.py: removed mkpatch method, renamed dopatch method to apply_set. * eva/patch/utils.py (_diff): we now generate context diffs (preferred by patch and other utilities over unified diffs.) * eva/log/*: some big modifications to the log system: - added support for indented logs - added support for unbuffered io - moved everything in eva.log - waiting for jack approval :=) * eva/log.py (Log.__init__): added ability to inherit stream and other stuff from a parent log. * eva/user.py (User.read_xxx): added ome defaults to be able to work even if eva is still not configured (no ~/.eva directory.) 2002-11-15 Federico Di Gregorio * eva/patch/utils.py (_diff): added modification time to custom labels in diff call, to avoid "missing header.." messages on patch. 2002-11-14 Federico Di Gregorio * eva/patch/patchset.py (PatchSet.dopatch): updated patch application code to work with new inventory code (trivial changes.) * scripts/metapatch: added *very experimental* metapatch command. * eva/patch/{patchset.py,patch.py}: substituted X-Metapatch for X-Eva everyhwere and went back to old system of having X-Metapatch-Format only when really necessary (externally generated payload.) 2002-11-13 Federico Di Gregorio * eva/patch/patchreport.py: Added PatchReport class to manage.. reports. This will be the base for the ArchiveReport class, needing only to add the transaction-specific fields. (WARNING: PatchReport still work in progress!) * eva/log.py (Formatter.pop_indent): separated formatting functions in a separate Formatter object. * eva/tree/projecttree.py (ProjectTree.init_tree): replaced "{arch}" by "{eva}" everywhere. * eva/patch/patch.py (Patch._make_dir): added "eva/mkdir" and "eva/rmdir" operations. Also changed "X-Eva-Format" to "X-Eva-Operation" everywhere. * eva/inventory/inventory.py (Inventory._merge): fixed bug that generated merged entries without the path component in name; i.e., "test/jack" was merged as "jack" alone. This also fixes bugs in patch generation. * eva/patch/patchset.py (PatchSet.prepare_set): fixed bug, the "new" tag passed to .check_kind() was full tuple and not real tag only. * moved all scripts to scripts/ directory. * eva/patch/patchset.py: patches generation is working after some tweaks to adapt to the new Inventory and Manifest objects (mainly Inventory iterators.) 2002-11-07 Federico Di Gregorio * The big name change? * yarch/inventory/tags.py (make_tag): fixed bug with existing tags not changing method if request (exposed by "eva add" after an "eva make-tags".) 2002-11-06 Federico Di Gregorio * yarch/inventory/inventory.py (Inventory.update_manifest): added some progress messages (enable them with --verbose.) * yarch/inventory/inventory.py (Inventory.inventory): now files in directories of non-archived kind (backup, generated, etc.) are forced to same kind. This solve the problem with set-manifest putting the files but _not_ the directories in the manifest file. * yarch/inventory/tags.py (make_tag): all non-control files become source files if explicitly tagged. 2002-11-05 Federico Di Gregorio * yarch/cmdline/tree.py: removed manifest stuff. * yarch/cmdline/inventory.py: set-manifest, check-manifest and make-tags all interoperating fine. manifest command works as expected. * yarch/inventory/tags.py (make_tag): if the tag exists in =tags, the old ctime and mtime are propagated, to discover changes. ctime and mtime are forced when tags are updated from manifest or regenerated anew. * yarch/inventory/inventory.py (Inventory.update_tags): changed name from write_tags: now it gets tags from a manifest if possible. 2002-11-04 Federico Di Gregorio * yarch/gtk/user.py: added first try at a user interface: try launching yarch interface as "yarchgtk prefs" or "yarchui prefs -G gtk". * Restarted detailed ChangeLog (too many changes from last entry to write them all, sorry.) 2002-10-15 Federico Di Gregorio * yarch/patch/patchset.py: modified report sections to go with arch patch log format. * yarch/archive/version.py: added version object. added categories and versions commands. 2002-10-14 Federico Di Gregorio * yarch/log.py (Log.prt): added word-wrapped printing functions (for reports mainly.) 2002-10-12 Federico Di Gregorio * yarch/tree/tags.py (read_tags): spaces in file names are not a problem anymore. * yarch/tree/inventory.py: removed the annoying 'kind' element from inventories (reduced inventory size from 4 to 3.) * yarch/tree/*: big cleanup of all the project tree code. 2002-10-11 Federico Di Gregorio * yarch/patch/patchset.py: splitted PatchSet into its own module, general cleanup. (PatchSet.prepare_set): enhanced progress symbols, _ means that the file was ignored (tagging method or explicit file list) while . means the file does not require a patch. * yarch/cmdline/patch.py: changed default tagging method of commands to explicit. * yarch/patch/patch.py: separated into its own file, general cleanup, added PatchLoader class. * yarch/patch/patchutils.py (_diff): general cleanup, added canonical file names as --label options to diff. 2002-10-09 Federico Di Gregorio * yarch/tree.py: reworked completely the mkpatch implementation, now it works cleanily. * yarch/tree.py (Inventory._merge_tags): fixed bug, we were not merging directory names. 2002-10-08 Federico Di Gregorio * yarch/tree.py: added manifest functions. 2002-10-03 Federico Di Gregorio * yarch/tree.py: added missing commands (add, delete, move, tree-lint). Added filters to merge and filter both file names and tags. 2002-10-02 Federico Di Gregorio * setup.py: Added setup.py file. 2002-10-01 Federico Di Gregorio * yarch/tree.py: added ProjectTree and Inventory objects. * yarch/log.py (trace): Added trace function to print backtraces on --debug (see also yarchui.) 2002-09-28 Federico Di Gregorio * yarch/archive.py (Archive.make_version): making new versions work, with locking. 2002-09-26 Federico Di Gregorio * yarch/archive.py (Archive.make_archive): now the version string is written to ROOT/.archive-version. (removed references to =meta-info/version). 2002-09-25 Alexander Deruwe * yarch/user.py: Corrected RE_UID to allow '-' and '_' in email addresses, modified my_id() to raise an error if an invalid id is found or passed. 2002-09-24 Federico Di Gregorio * yarch/tree.py: Added support for project trees. * yarch/cmdline/tree.py (tree_version): Added tree commands: tree-init, tree-version (including set-tree-version), tree-root. 2002-09-19 Federico Di Gregorio * Working on it. What's in it's in.