			reposurgeon project news

3.2: 2014-02-03 
     New path rename command.
     List and inspect now take either a leading or following selection.
     Text search selections can now have a B suffix to search blobs.
     Now possible to transplant fileops between commits using remove .. to.
     A date of the form <YYYY-mm-dd> selects all commits and tags that day.
     Macros can now be multiline.

3.1: 2014-01-27
     The filter command now has a --replace modifier to avoid regex overhead.
     Associated branches are renamed when a reset or tag is moved or deleted.
     Bug fix for off-by-one error in tags reporting.

3.0: 2014-01-05
     Many syntactic features of the language have changed incompatibly.
     Backward-incompatible language changes are documented on the manual page.
     'expunge' and 'unite' commands have been incompatibly improved.
     New 'strip' command for generating test cases with blobs stripped out
     New 'reduce' command for topological reduction of test cases.
     The 'lint' command gets a test for the existence of multiple roots.
     Selecting a date or action stamp matching multiple commits now matches all.
     The surgical language now has a macro facility.

2.43: 2013-12-01
     "set canonicalize" is now effective during import stream reads.
     Introduced =O, =M, =F selectors for parentless, merge, and fork commits.
     The "multiline" modifier on edit is replaced by the =L selector.
     Selection-set evaluation now short-circuits predicates and is faster.
     Fixed a buggy test that caused the reader to choke on submodule links.

2.42: 2013-11-21
     Prevented crash when tagifying a mixed-branch commit.
     svn_no_autoignores -> svn_noautoignores
     Ignore single-rev mergeinfos in Subversion, they're cherry-picks.

2.41: 2013-11-07
     Fixed a fatal bug when reading any symlink from a live Subversion repo.
     Added svn_no_autoignores option.

2.40: 2013-08-04
     Improvements in .gitignore processing.

2.39: 2013-05-23
     New 'tagify' command for tagifying empty commits.
     Correctness fixes for deletion edge cases.

2.38: 2013-05-10
     Significant improvements to Subversion branch link detection.
     New 'reparent' command for modifying the DAG.
     Fixes for two minor crash bugs in handling of malformed commands.

2.37: 2013-04-25
     No more tree pollution on branches deduced from file copies.

2.36: 2013-04-22
     Optimizations, and fixes for some subtle bugs in the deletion logic.

2.35: 2013-04-20
     New "manifest" command.
     Path-matching now has @ to require all paths in a commit to match.

2.34: 2013-04-15
     More performance improvements. Large deletions are much faster now.
     Path matches with [] now have a regexp variant

2.33: 2013-04-14
     "from COMMIT remove OP" for removing botched renames etc.
     Event-Mark can be be used as a commit identifier in mailbox format.
     Line continuation with \ works in scripts.
     There is now a regular expression matching syntax for paths.

2.32: 2013-04-03
     Fix bug introduced in expunges when blobfile path generation changed.

2.31: 2013-04-03
     New 'filter' command supports content filtering with a batch command.
     Yet more speed tuning - now 17K commits/min under cpython, 22K under pypy.

2.30: 2013-03-28
     Fossil map dumps are pruned appropriately after an expunge.
     More speed tuning.
     An AUTHORS file now credits some significant collaborators

2.29: 2013-03-24 
     Extreme speed tuning in SVN analysis - measured at over 11K commits/sec. 
     canonicalize option changes CR-LF to LF in commit comments.

2.28: 2013-03-22
     There is now a 'reset' command like the tag command.
     Fix for buggy debranch command.
     More speed tuning.

2.27: 2013-03-18
     More speed tuning.
     Simplify the baton display in SVN processing, its overhead was high.

2.26: 2013-03-13
     Enable Subversion dump reader to handle yet another pathological case.
     Code has been tested and verified with PyPy.
     Prefer author date for action stamps when it is available.
     More speed tuning.

2.25: 2013-03-07
     More speed tuning in repository analysis.
     O(n**2) cost for renumbering has been eliminated, svn_no_renumber is gone.
     New 'timings' command displays phase timings for repo analysis.
     Improved packaging for distributions (thanks, Mike Swanson).

2.24: 2013-03-03
     Fix a crash bug in the new blob handling, and more performance tweaks.

2.23: 2013-03-01
     Drastically cut the amount of disk storage and I/O required for surgery.
     Add svn_ignore_properties option.
     The .svn extension is now stripped from repo names on load.

2.22: 2013-02-26
     New debranch feature for merging branches that should be subdirectories.
     Minor speed tuning via memoization.

2.21: 2013-02-21
     Added "compressblobs" and "svn_no_renumber" option for very large repos. 
     Added the "sizes" and "lint" commands.
     Interpretation of timezone field in author maps was buggy, is now fixed.
     Experimental Emacs Lisp mode for editing comment mailboxes.

2.20: 2013-02-08
     Teach repodiffer how not to choke on revisions with empty manifests.
     Make repodiffer more explicit when a revision's parent set changes.
     Improvements to the graph command's output of branches.

2.19: 2013-02-06
     Serious tuning of internals for reduced memory usage.

2.18: 2013-02-02
     Translation of symlinks in Subversion repos was buggy, is now fixed.
     repodiffer now has a useful and documented return value.
     New --tree-diff option of repodiffer shows context diffs of mismatches.

2.17: 2013-01-26
     repodiffer can now take a map file and show fossil IDs with diff reports.
     The '?' selection-set modifier can be repeated for effect.

2.16: 2013-01-25
     Fix a memoization bug that resulted in misbehavior after branch cuts.

2.15: 2013-01-22
     Switch to cvs-fast-export for reading RCS and CVS collections.
     Efficiency and code-cleanup improvements by Julien Rivaud.

2.14: 2013-01-19
     Dramatic decrease in memory footprint on large repositories.
     Improvements in DAG visualization via 'graph'.

2.13: 2013-01-08
     The new 'graph' command supports making commit graphs in the DOT language.
     On read of an import stream, interpret a "cvs-revisions" property.

2.12: 2012-12-30
     Support for reading RCS repositories.
     Now handling three-field authormap files with timezone offsets.
     Dump fileops in the stype of the output VCS, not the input.
     Synchronized with cvsps 3.3 release.

2.11: 2012-12-20
     CVS repositories can now be read using cvsps --fast-export as a front end.
     Ignore pathnames are mapped properly when writing to non-git VCSes.
     cvs/svn/git ignore patterns are properly translated on output to hg.
     repodiffer now has a twirly-baton progress meter.

2.10: 2012-12-16
     svnpull renamed to repopuller in anticipation of pulling CVS repositories.
     Introducing repodiffer, a tool to report diffs between histories.
     Fossil-IDs are now dumped in pre-commit comments.
     The 'changed' modifier to mailbox_in dumps a minimal set of updates used.
     When reading svn repositories, .cvsignore files are lifted to .gitignores.
     svn's default ignore-pattern behavior is emulated in translations.

2.9: 2012-12-06
     Syntax of "authors", "fossils", "list", and "mailbox_{in|out}" has changed.
     Many commands can now redirect output to a named file prefixed with '>'.
     The list command now displays fossil IDs if the repo has them.
     A subtle bug affecting generated directory copies has been fixed.

2.8: 2012-12-04
     Fix for a nasty optimizer bug that could cause file loss.
     split now uses a different preposition when matching against pathnames.

2.7: 2012-12-01
     Full (read-write) support for darcs.
     The expunge command now treats deletes correctly.
     New 'tip' command deduces if a commit is associated with a unique branch.
     Support for writing Subversion repositories, but they don't round-trip.

2.6: 2012-11-22
     divide now cuts unconditionally, renaming branches or repos as required.
     The split command can take a path to be matched instead of an index.

2.5: 2012-11-19
     git sometimes doesn't quote filenames with embedded spaces properly; cope.
     Correctly handle combination of SVN directory copy with a file change.
     More careful sanity checking in the workflow makefile.
     Prevent erroneous shlex interpretation of single quotes in R/C/N fileops.
     Fix and regression test for expunge when it implies removal of a commit.

2.4: 2012-11-18
     In SVN conversion, user is warned about mid-branch deletealls.
     'version' command allows a script to be pinned to a major version.
     There is now a branch {rename,delete} command.
     More speedups and test loads.

2.3: 2012-11-13
     SVN dump analysis now completes much faster on large examples.
     The format of action stamps has changed to fully support split commits.

2.2: 2012-11-06
     Unit testing for the date parsing/formatting code
     'branchify' declares a non-default set of svn paths to be branchified.
     Interpretation of svn:mergeinfo properties.
     Fix for yet another corner case in ignore-property translation from SVN.
     The "authors write: command is now a proper inverse of "authors read".
     The 'merge' command now unconditionally creates a merge link.
     Reference syntax now allows references to be fossil-IDs.

2.1: 2012-11-04
     Ignores are moved among git/hg/bzr ignore files (but not yet translated).
     Added conversion.mk to the distribution, describing a typical workflow.
     Fixed a bug that could result in incorrect timezone handling in git dates.

2.0: 2011-11-02
     reposurgeon can now read Subversion dump files and repositories directly.
     New major commands 'tag' and 'merge' (old 'merge is now 'unite'). 
     The 'sort', 'cvspurge' and 'gitsvnparse' commands have been removed.
     Added new auxiliary script, svnpull, for mirroring Subversion repos.
     Repo 'cut' changed to 'divide' to avoid confusion with link cuts.
     Scripts can now be passed arguments substituted for $1..$n, as in shell.
     Scripts can now consume multiline here-documents, as in shell.
     Reference-name syntax is documented, and can select commits by date.

1.9: 2011-11-14
     'prefer' command now sets the type for the selected repo.
     Added 'paths' command to list/modify pathnames touched by a selection set.
     In selection-set syntax, what was @foo for tag reference is now <foo>.
     In selection-set syntax, what was *foo for a branch set is now (foo).
     Under git and bzr, automatic file preservation of anything untracked.
     My belief that git handled properties was due to a test error...

1.8: 2011-11-10
     Added "sort" command.
     Added "multiline" modifier to edit command.
     gitsvnparse now creates R ops from properly matched D/M pairs.
     gitsvnparse now lifts tip tags to actual tag objects.
     gitsvnparse strip is no more, since git handles properties now.
     Added =H visibility set - childless commits.

1.7: 2011-11-07
     authormap -> authors; the command syntax has changed, read the man page.
     authors handles git-cvsimport/cvs2git style: "localname <localname>"
     authors with no arguments prints a list of committer/author/taggers
     Automatic use of .git/cvs-authors for ID mapping.
     gitsvnparse modifiers are gone; instead there's a new 'fossils' command.

1.6: 2011-11-03
     Fix Python 3.2 compatibility problem pointed out by Mike Swanson.
     gitsvnparse moves remote branches/tags to local ones (like svn2git).

1.5: 2011-11-02
     Suppress writing out properties if the importer won't handle them.
     'references' lists events with possible SVN or CVS rev IDs in comments.
     'references lift' turns CVS & SVN reference cookies into action stamps.
     cvslift -> cvspurge (it no longer does ID lifting)
     gitsvnlift -> gitsvnparse (it no longer does ID lifting)
     'checkout' command allows filling a specified directory with a revision. 
     'diff' command allows examining diffs between commits.
     New [ ] syntax for selecting commits containing a specified path.

1.4: 2011-10-28
     Code is pylint clean.
     Fixed a bug in the cut coloring algorithm.
     Added 'graft', 'authormap', and 'gitsvnlift' commands.
     Merge operation is no longer confused by out-of-timestamp-order commits.
     Restore capability to coalesce empty log messages

1.3: 2011-10-25
     Code moved to Python 3 compatibility with 2to3.
     cvspreen -> cvslift
     cvslift generates tag objects corresponding to cvs2svn-generated tags.
     Don't coalesce comments that read '*** empty log message ***'
     Various bug fixes, including for a crash bug in rebuild after expunge.
     Default preserve set is repository-type-dependent.

1.2: 2011-10-19
     Cope better with "(no author)" attribution generated by cvs2svn.
     Preserve .git/config and .git/hooks by default.
     Slightly more relaxed parsing of Committer/Author/Tagger headers.
     More useful error messages on edit failure.
     Fix typo bug that prevented editing of Author headers from working.
     Make text search match on branch attribute and headers as well as text.
     Add obliterate, pushback, tagforward, and tagback modifiers on deletes.
     Add 'tags' command.
     Add '?' syntax for looking at neighbors and referents.
     New 'cvslift' operation for nuking junk commits from cvs2svn conversions.
     Make the branch attribute of commits editable.

1.1: 2011-08-24
     Fix a mis-coded notification message that would have crashed the 
     program if it were ever issued, from Edward Z. Yang. Some typo
     fixes and documentation improvements. 

1.0: 2011-02-11
     Pylint cleanup and release for production.

0.9: 2010-11-30
     Can now handle 'N' file operations; they're passed through.
     The 'stats' command can now take a list of repo names as arguments.
     The file extension ".fi" is now removed from the in-core names of
     repositories read from plain files
     Fixed an embarrassing bug in the rebuild code

0.8: 2010-11-19
     This is a beta. It is likely the next release will be 1.0.
     Expunge now saves deleted material into a new repository, so it can
     be used to carve up repositories by file path match.
     New 'renumber' command, in case importers ever care about marks 
     being consecutive.
     Allow Passthrough events to be merged.
     After a cut operation, option and feature events in the original
     repo will be duplicated onto the late fragment as well as remaing
     on the early one.

0.7: 2010-11-15
     Added 'merge' command that merges repositories.

0.6: 2010-11-10
     Tweaked to pass through git submodules without failing.
     Also contains a fix for a subtle bug in error handling.

0.5: 2010-11-09
     We can round-trip bzr dumps with commit properties.
     New 'split' operation, opposite of coalesce/delete.
     Multiple author headers per commit are handled (helps with bzr).

0.4: 2010-11-08
     Handling of inline data, previously extremely buggy, has been fixed.
     Can now handle streams produced by bzr-fast-export, which uses inline.
     Unfortunately, bzr-fast-import is buggy enough to make rebuilds fail.
     First cut at hg support, by Phil Roberts.

0.3: 2010-11-07
     'split' operation renamed to 'cut'.
     New 'inspect' command for looking at commits in raw form.
     'list' command adapts to current width of terminal window.
     Issue a baton prompt during repo cleanup, which can be a long process.
     Multiple instances can now run in the same directory.
     Some speedup on import and export.

0.2: 2010-11-04
     Filenames with embedded whitespace are handled. 
     The 'expunge' operation to remove files from the history is working.
     The 'split' operation (topological cut) is now working.
     There is a new 'drop' command to drop repositories from the load list.
     There is a new 'history' command to display your session history.
     The 'view' command was a bad idea and has been removed.
     & followed by branch name resolves to everything on the branch.
     A bug that caused spurious date modifications when editing events
     with a non-local timezone has been fixed.

0.1: 2010-11-01
     First public release. Working with git, untested with hg and bzr

0.0: 2010-10-22
     Project launched
