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.
Please see http://progetti.arstecnica.it/tailor/wiki/VersionOne for current NEWS, latest version is 0.9.35.
Please, use darcs get --partial to fetch the sources
Or fetch the tarball of version 0.9.35
Contents
- 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
- What happened since...
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 kinds1 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:
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.
Make it easier to set up a double way bridge
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.
1 #!/usr/bin/env tailor
2
3 """
4 [DEFAULT]
5 verbose = Yes
6
7 [project1]
8 source = svn:projec1repo
9 target = darcs:project1repo
10 refill-changelogs = Yes
11 state-file = project1.state
12 before-commit = (maybe_skip, refill, p1_remap_authors)
13 after-commit = checkpoint
14
15 [svn:project1repo]
16 repository = svn://some.server/svn
17 module = project1
18 use-propset = Yes
19
20 [darcs:project1repo]
21 repository = ~/darcs/project1
22 """
23
24 def maybe_skip(context, changeset):
25 for e in changeset.entries:
26 if not context.darcs.isBoringFile(e):
27 return True
28 # What a bunch of boring entries! Skip the patch
29 return False
30
31 def refill(context, changeset):
32 changeset.refillChangelog()
33 return True
34
35 p1_authors_map = {
36 'lele': 'Lele Gaifax <lele@example.com>',
37 'x123': 'A man ... with a name to come',
38 }
39
40 def p1_remap_authors(context, changeset):
41 if p1_authors_map.has_key(changeset.author):
42 changeset.author = p1_authors_map[changeset.author]
43 return True
44
45 def checkpoint(context, changeset):
46 if changeset.log.startswith('Release '):
47 context.target.tagWithCheckpoint(changeset.log)
48 return True
1 Only for SVN, Monotone deserves the same treatment...
