| 11 | | Version 0.9.1, under development, witnessed the following changes: |
| 12 | | |
| 13 | | (./) The frontend program name lost the `.py` extension, so it's simply `tailor` now. |
| 14 | | |
| 15 | | (./) 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. |
| 16 | | |
| 17 | | (./) Tailor is able to store original author and timestamp even committing to Subversion, given a properly configured target repository. |
| 18 | | |
| 19 | | (./) All source backends know about a particular revision other than `HEAD`, `INITIAL`, that makes easier to migrate a whole repository. |
| 20 | | |
| 21 | | (./) Made simpler bootstrapping toward some VC kinds with new --target-repository and --target-module options. |
| 22 | | |
| 23 | | == What happened since 0.9.1 == |
| 24 | | |
| 25 | | Version 0.9.2, tagged on Aug 5, early in the morning, was tormented with the following changes: |
| 26 | | |
| 27 | | (./) ArX support (target only) thanx to Walter Landry |
| 28 | | |
| 29 | | (./) New configuration system in place, even if still mostly untested |
| 30 | | |
| 31 | | == What happened since 0.9.2 == |
| 32 | | |
| 33 | | Version 0.9.3, tagged on Aug 9, early in the morning, was tattooed with the following changes: |
| 34 | | |
| 35 | | (./) Big internals redesign, needs more testing |
| 36 | | |
| 37 | | (./) New operational tests: darcs2svn and darcs2hg |
| 38 | | |
| 39 | | (./) Darcs backend is more precise in the patch selection |
| 40 | | |
| 41 | | == What happened since 0.9.3 == |
| 42 | | |
| 43 | | Version 0.9.4, tagged on Aug 13, was heaved by the following changes: |
| 44 | | |
| 45 | | (./) Tla support (source only) thanx to Robin Farine |
| 46 | | |
| 47 | | (./) The operation tests now cover darcs2bzr, darcs2cdv and a reverse one, svn2darcs |
| 48 | | |
| 49 | | == What happened since 0.9.4 == |
| 50 | | |
| 51 | | Version 0.9.5, tagged on Aug 16, was cured by the following changes: |
| 52 | | |
| 53 | | (./) Lot of little fixes here and there |
| 54 | | |
| 55 | | (./) Optimized the state persistence |
| 56 | | |
| 57 | | (./) Rectified the README |
| 58 | | |
| 59 | | (./) `--bootstrap` and `--update` are gone: now tailor detects what's needed checking the state file existence |
| 60 | | |
| 61 | | == What happened since 0.9.5 == |
| 62 | | |
| 63 | | Version 0.9.6, tagged on Aug 17, learned these new concepts and gained a promotion to '''beta''': |
| 64 | | |
| 65 | | (./) 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. |
| 66 | | |
| 67 | | (./) 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 :) |
| 68 | | |
| 69 | | (./) It's easier if you call things with their name: some more internal cleanup, I'm almost satisfied now. |
| 70 | | |
| 71 | | (./) Errors may happen, and better know about them: with `--verbose` you get the "shell" commands, with `--debug` also their stdout and stderr. |
| 72 | | |
| 73 | | == What happened since 0.9.6 == |
| 74 | | |
| 75 | | Version 0.9.7, tagged on Aug 19, gained some other knowledge: |
| 76 | | |
| 77 | | (./) Darcs is beautifully strange: deal with possible conflicts replaying an history patch by patch |
| 78 | | |
| 79 | | (./) Two is better than one: a new ''native'' backend for Bazaar-NG, thanx to Johan Rydberg. |
| 80 | | |
| 81 | | (./) Flexibility is a virtue: implemented the long awaited changeset transform hooks |
| 82 | | |
| 83 | | == What happened since 0.9.7 == |
| 84 | | |
| 85 | | [http://nautilus.homeip.net/~lele/projects/tailor-0.9.8.tar.gz Version 0.9.8], tagged on Aug 20, discovered new things: |
| 86 | | |
| 87 | | (./) How to make an use of the ``predist`` feature of Darcs: now the tarball contains an HTMLized [http://nautilus.homeip.net/~lele/projects/tailor/README.html README]. |
| 88 | | |
| 89 | | (./) How simple it is to break working code: fixed ''brown bag bug'' in the CVS source backend. |
| 90 | | |
| 91 | | (./) Interactivity bores users: good bye interactive session! |
| 92 | | |
| 93 | | == What happened since 0.9.8 == |
| 94 | | |
| 95 | | [http://nautilus.homeip.net/~lele/projects/tailor-0.9.9.tar.gz Version 0.9.9], tagged on Aug 25, explored new countries: |
| 96 | | |
| 97 | | (./) Intricated paths may resolve to something linear: monotone source backend, thanks to Riccardo! |
| 98 | | |
| 99 | | (./) There are still bugs out there: keep squashing 'em! |
| 100 | | |
| 101 | | (./) There are persons who actually use software, don't read it: be kind with them, and write some notes. |
| 102 | | |
| 103 | | == What else? == |
| 104 | | |
| 105 | | 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. |
| 106 | | |
| 107 | | 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. |
| 108 | | |
| 109 | | This is what I wanna achieve: |
| 110 | | |
| 111 | | 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. |
| 112 | | |
| 113 | | 2. (./) Make it easier to set up a double way bridge |
| 114 | | |
| 115 | | 3. (./) Remove interactive session machinery: it was funny, but definitively out of scope. |
| 116 | | |
| 117 | | == New configuration proposals == |
| 118 | | |
| 119 | | Please, do not hesitate to comment and extend this section! |
| 120 | | |
| 121 | | === ConfigParser based configuration === |
| 122 | | |
| 123 | | 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. |
| | 11 | You can fetch current sources with |
| 129 | | """ |
| 130 | | [DEFAULT] |
| 131 | | verbose = Yes |
| 132 | | |
| 133 | | [project1] |
| 134 | | source = svn:projec1repo |
| 135 | | target = darcs:project1repo |
| 136 | | refill-changelogs = Yes |
| 137 | | state-file = project1.state |
| 138 | | before-commit = (maybe_skip, refill, p1_remap_authors) |
| 139 | | after-commit = checkpoint |
| 140 | | |
| 141 | | [svn:project1repo] |
| 142 | | repository = svn://some.server/svn |
| 143 | | module = project1 |
| 144 | | use-propset = Yes |
| 145 | | |
| 146 | | [darcs:project1repo] |
| 147 | | repository = ~/darcs/project1 |
| 148 | | """ |
| 149 | | |
| 150 | | def maybe_skip(context, changeset): |
| 151 | | for e in changeset.entries: |
| 152 | | if not context.darcs.isBoringFile(e): |
| 153 | | return True |
| 154 | | # What a bunch of boring entries! Skip the patch |
| 155 | | return False |
| 156 | | |
| 157 | | def refill(context, changeset): |
| 158 | | changeset.refillChangelog() |
| 159 | | return True |
| 160 | | |
| 161 | | p1_authors_map = { |
| 162 | | 'lele': 'Lele Gaifax <lele@example.com>', |
| 163 | | 'x123': 'A man ... with a name to come', |
| 164 | | } |
| 165 | | |
| 166 | | def p1_remap_authors(context, changeset): |
| 167 | | global p1_authors_map |
| 168 | | if p1_authors_map.has_key(changeset.author): |
| 169 | | changeset.author = p1_authors_map[changeset.author] |
| 170 | | return True |
| 171 | | |
| 172 | | def checkpoint(context, changeset): |
| 173 | | if changeset.log.startswith('Release '): |
| 174 | | context.target.tagWithCheckpoint(changeset.log) |
| 175 | | return True |
| 176 | | }}} |