Tailor/VersionOne
- Tailor 1.0
- What happened since...
- ... version 0.8
- ... version 0.9.1
- ... version 0.9.2
- ... version 0.9.3
- ... version 0.9.4
- ... version 0.9.5
- ... version 0.9.6
- ... version 0.9.7
- ... version 0.9.8
- ... version 0.9.9
- ... version 0.9.10
- ... version 0.9.11
- ... version 0.9.12
- ... version 0.9.13
- ... version 0.9.14
- ... version 0.9.15
- ... version 0.9.16
- ... version 0.9.17
- ... version 0.9.18
- Recent news
- What else?
- New configuration proposals
- ConfigParser based configuration
- What happened since...
Tailor 1.0
What will be tagged as Tailor version 1.0 is shaping up at http://darcs.arstecnica.it/tailor. There is also a Trac instance dedicated to tailor issues.
{i} Please see http://progetti.arstecnica.it/tailor/wiki/VersionOne for current NEWS, latest version is 0.9.35.
{i} Please, use darcs get --partial to fetch the sources :-)
(!) Or fetch the tarball of version 0.9.35
What happened since...
... version 0.8
Version 0.9.1, under development, witnessed the following changes:
(./) The frontend program name lost the .py extension, so it's simply tailor now.
(./) The execution of external programs now uses Python 2.4 subprocess module (or an equivalent on older snakes), instead of the homegrown hack around popen, system and the like.
(./) Tailor is able to store original author and timestamp even committing to Subversion, given a properly configured target repository.
(./) All source backends know about a particular revision other than HEAD, INITIAL, that makes easier to migrate a whole repository.
(./) Made simpler bootstrapping toward some VC kinds[[FootNote(Only for SVN, Monotone deserves the same treatment...)]] with new --target-repository and --target-module options.
... version 0.9.1
Version 0.9.2, tagged on Aug 5, early in the morning, was tormented with the following changes:
(./) ArX support (target only) thanx to Walter Landry
(./) New configuration system in place, even if still mostly untested
... version 0.9.2
Version 0.9.3, tagged on Aug 9, early in the morning, was tattooed with the following changes:
(./) Big internals redesign, needs more testing
(./) New operational tests: darcs2svn and darcs2hg
(./) Darcs backend is more precise in the patch selection
... version 0.9.3
Version 0.9.4, tagged on Aug 13, was heaved by the following changes:
(./) Tla support (source only) thanx to Robin Farine
(./) The operation tests now cover darcs2bzr, darcs2cdv and a reverse one, svn2darcs
... version 0.9.4
Version 0.9.5, tagged on Aug 16, was cured by the following changes:
(./) Lot of little fixes here and there
(./) Optimized the state persistence
(./) Rectified the README
(./) --bootstrap and --update are gone: now tailor detects what's needed checking the state file existence
... version 0.9.5
Version 0.9.6, tagged on Aug 17, learned these new concepts and gained a promotion to beta:
(./) Tiny streams vs giant blobs: now the pending changesets are iterated over loading one by one from the state file. With this change, minus bugs of course, I consider the state file format freezed, that means I'll start using this version in production.
(./) If something cannot be shared, there must be two something: the dual working directory sometime isn't good enough, so now the source and the target repositories may use different directories, and tailor will rsync them as needed. As a bonus, this will happily suck some more megabytes out of your HD :)
(./) It's easier if you call things with their name: some more internal cleanup, I'm almost satisfied now.
(./) Errors may happen, and better know about them: with --verbose you get the "shell" commands, with --debug also their stdout and stderr.
... version 0.9.6
Version 0.9.7, tagged on Aug 19, gained some other knowledge:
(./) Darcs is beautifully strange: deal with possible conflicts replaying an history patch by patch
(./) Two is better than one: a new native backend for Bazaar-NG, thanx to Johan Rydberg.
(./) Flexibility is a virtue: implemented the long awaited changeset transform hooks
... version 0.9.7
Version 0.9.8, tagged on Aug 20, discovered new things:
(./) How to make an use of the predist feature of Darcs: now the tarball contains an HTMLized README.
(./) How simple it is to break working code: fixed brown bag bug in the CVS source backend.
(./) Interactivity bores users: good bye interactive session!
... version 0.9.8
Version 0.9.9, tagged on Aug 25, explored new countries:
(./) Intricated paths may resolve to something linear: monotone source backend, thanks to Riccardo!
(./) There are still bugs out there: keep squashing 'em!
(./) There are persons who actually use software, don't read it: be kind with them, and write some notes.
... version 0.9.9
Version 0.9.10, tagged on Aug 29, acquired new capabilities:
(./) Cogito ergo sum: target backend for Git, thanks to Todd Mokros
(./) Difference matters: bazaar source backend
(./) Enhanced Monotone support
... version 0.9.10
Version 0.9.11, tagged on Aug 31, expanded its knowledge:
(./) The other's tool is faster: new svndump source backend
(./) Without tests, everything sucks: fixes to annoying conditions
... version 0.9.11
Version 0.9.12, tagged on Sep 2, learnt from his own errors:
(./) Rudimentary doesn't mean useless: svndump seems working now
(./) After encodings, time formats are the flakiest idea ever: Mercurial should show better timestamps now
... version 0.9.12
Version 0.9.13, tagged on Sep 5, went backward to improve:
(./) Something shared may have an offset: reintroduced the ability of adding a prefix to the imported tree
(./) Better avoid excessive boring: targets have now a chance of ignore unwanted entries, Darcs backend applies rules in 'boring' file.
(./) Filtering is a risky business: svndump now honours both module and revision
... version 0.9.13
Version 0.9.14, tagged on Sep 12, exposed some new features:
(./) New git backend, thanks to Todd Mokros
(./) New hglib native backend
(./) Various little fixes here and there, in particular to the darcs and CVS backends
(./) Current svndump backend is deprecated, it will be superceded by a version using a better underlying framework
... version 0.9.14
Version 0.9.15, tagged on Sep 13, fixed some serious bugs:
(./) Always use the patch hash to pull the changeset under darcs, otherwise multiple changesets may be slurped at the same time
(./) Automatically setup the local svn repository to accept propset
(./) Operate on the effectively committed revision to set author and timestamp, instead of targetting HEAD
... version 0.9.15
Version 0.9.16, tagged on Sep 21, fixed some minor bugs:
(./) Workaround for a darcs problem dealing with renamed+replaced items on the command line
(./) Support for Mercurial 0.7 renames
(./) Execute pre and post hooks also at bootstrap time
... version 0.9.16
Version 0.9.17, tagged on Oct 3 by a sad lelit:
(./) New source support for Bazaar-NG, thanks to Jelmer Vernooij.
(./) Several bug fixes, in almost all backends
(./) New home for tailor's trac: http://progetti.arstecnica.it/tailor
... version 0.9.17
Version 0.9.18, tagged on Oct 17 by a lone lelit:
(./) The command line based Bazaar-NG is gone, replaced by the bzrlib based one.
(./) Reorganized test suite
(./) Preliminary support for tags under CVS and Darcs, thanks to Aaron Kaplan.
(./) Fixed handling of "rename+replace".
(./) More streamy in particular at bootstrap time.
(./) Bazaar-NG specific optimization and fixes: source backend passes the tests.
... version 0.9.18
Version 0.9.19, tagged on Nov 10 by a crashed lelit:
(./) Incremental xml parsers for svn and darcs
(./) Revamped logging subsystem
(./) Several fixes to various backends
(./) Generalized handling of replaced entries
Recent news
Latest news are available on the trac site.
What else?
Tailor may be a nice tool, but it's user interface is somewhat cryptic. Version 0.8 has three different ways of storing the state information, and tried to be flexible introducing several command line options as well as an interactive session. This is crazy.
So, I'll spend some time to get rid of two or three of them, introducing yet another scheme, probably using a common .ini file mixed with plain Python code.
This is what I wanna achieve:
(./) {1} Make it possible to attach arbitrary transforms to the changesets once they are applied and before committing them to the target VC; refilling of the log message, remapping author's names, and in general apply any needed fixup.
(./) {2} Make it easier to set up a double way bridge
(./) {3} Remove interactive session machinery: it was funny, but definitively out of scope.
New configuration proposals
Please, do not hesitate to comment and extend this section!
ConfigParser based configuration
The idea is to use a standard Python script, writing the configuration in its documentation string, eventually followed by functions used to massage in some way the changesets.
#!python
#!/usr/bin/env tailor
"""
[DEFAULT]
verbose = Yes
[project1]
source = svn:projec1repo
target = darcs:project1repo
refill-changelogs = Yes
state-file = project1.state
before-commit = (maybe_skip, refill, p1_remap_authors)
after-commit = checkpoint
[svn:project1repo]
repository = svn://some.server/svn
module = project1
use-propset = Yes
[darcs:project1repo]
repository = ~/darcs/project1
"""
def maybe_skip(context, changeset):
for e in changeset.entries:
if not context.darcs.isBoringFile(e):
return True
# What a bunch of boring entries! Skip the patch
return False
def refill(context, changeset):
changeset.refillChangelog()
return True
p1_authors_map = {
'lele': 'Lele Gaifax <lele@example.com>',
'x123': 'A man ... with a name to come',
}
def p1_remap_authors(context, changeset):
if p1_authors_map.has_key(changeset.author):
changeset.author = p1_authors_map[changeset.author]
return True
def checkpoint(context, changeset):
if changeset.log.startswith('Release '):
context.target.tagWithCheckpoint(changeset.log)
return True
