source: tailor/README @ 180

Revision 180, 5.4 KB checked in by lele@…, 8 years ago (diff)

Added Stephane Bortzmeyer's ascii-art

Line 
1About
2=====
3
4tailor.py is a tool to migrate changesets between CVS, Subversion, and
5darcs repositories.
6
7This script makes it easier to keep the upstream changes merged in
8a branch of a product, storing needed information such as the upstream
9URI and revision in special properties on the branched directory.
10
11The following ascii-art illustrates the usual scenario::
12
13                           +------------+            +------------+
14  +--------------+         | Immutable  |            | Working    |
15  | Upstream CVS |-------->| darcs      |----------->| darcs      |
16  | repository   | tailor  | repository | darcs pull | repository |
17  +--------------+         +------------+            +------------+
18                                                           |^         
19                                                           ||
20                                                           ||
21                                                           v|
22                                                          User
23
24Ideally you should be able to swap and replace "CVS server" and "darcs
25repository" with any combination of `CVS`, `Subversion` and `darcs`.
26
27
28Installation
29============
30
31tailor.py is written in Python, and thus Python must be installed on
32your system to use it. Since it relays on external tools to do the
33real work such as `cvs`, `darcs` and `svn`, they need to be installed
34as well.
35
36Make tailor.py executable::
37
38 $ chmod +x tailor.py
39
40You can either run tailor.py where it is currently located, or move it
41along with the vcpx directory to a location in your PATH.
42
43
44Examples
45========
46
471. Bootstrap a new taylored project, starting at upstream revision 10::
48
49  $ tailor.py -b -s svn -R http://svn.server/Product -r 10 ~/darcs/MyProduct
50
512. Bootstrap a new product, fetching from CVS and storing under SVN:
52   this will create the directory "~/svnwc/cmfcore"; "~/svnwc" must be
53   already under SVN::
54
55  $ tailor.py --source-kind cvs --target-kind svn --bootstrap \
56              --repository :pserver:cvs.zope.org:/cvs-repository \
57              --module CMF/CMFCore ~/svnwc/cmfcore
58 
593. Showing each command bootstrap a new DARCS repos in
60   "~/darcs/cmftopic" under which the upstream module will be
61   extracted as "CMFTopic" (ie, the last component of the module
62   name)::
63
64  $ tailor.py -D -b -R :pserver:anonymous@cvs.zope.org:/cvs-repository/ \
65              -m CMF/CMFTopic ~/darcs/cmftopic
66             
674. Merge upstream changes since last update/bootstrap::
68
69  $ tailor.py ~/svnwc/MyProduct
70
71
72Tailor's metadata
73=================
74
75To do its work, tailor needs some information about your source tree,
76such as the upstream repository URL and the current revision of the
77sources on your harddisk.
78
79In the simpler case, tailor keeps this information in a file called
80`tailor.info`, one for each tailored project, that is a very simple
81text document, with the following information, one per line:
82
831. Upstream repository kind (either "cvs", "darcs" or "svn)
842. Target repository kind (the same as above)
853. The name of the "module" that's been tailored
864. The URL of the upstream repository (that may not be an URL, for cvs...)
875. The current revision, from the upstream point of view, of the sources
88
89This is everything tailor needs, to be able to keep going from where it
90left last time.
91
92
93Config file format
94------------------
95
96When your project is composed by multiple upstream modules, it is
97easier to collect such information in a single file. This is done by
98specifying the `--configfile` option with a file name as argument. In
99this case, tailor will read/write the above information from a
100standard Python dictionary stored in the given file.
101
102The dictionary is keyed on the relative position of each project, and
103each entry carries the same information described above.
104
105Here's an example config file entry::
106
107 {'plone/atcontenttypes': {'module': 'ATContentTypes',
108                           'source_kind': 'cvs',
109                           'subdir': 'ATContentTypes',
110                           'target_kind': 'darcs',
111                           'upstream_repos': ':ext:cvs.sourceforge.net:/cvsroot/collective',
112                           'upstream_revision': '2004-11-24 19:42:06 by ctheune'}}
113
114By convention, config files are named with the extension ".tailor",
115but this is not enforced.
116
117In the example above, 'plone/atcontenttypes' is a directory where the
118target source will be stored. The keys such 'module', 'source_kind',
119etc correspond to options of the same name.
120
121When using a config file, tailor will perform its job on each project
122contained in the dictionary.
123
124
125Further help
126============
127
128See the output of tailor.py -h for some further tips.  There's also a
129`wiki page`_ that may give you some other hints.
130
131.. _wiki page:
132   http://www.scannedinavian.org/DarcsWiki/ConvertingFromSubversion
133
134I will be more than happy to answer any doubt, question or suggestion
135you may have on it. I'm usually hanging as "lelit" on the IRC channel
136devoted to darcs on the `freenode.net` network. Do not hesitate to
137contact me either by email or chatting there.
138
139
140Author
141======
142
143Lele Gaifax <lele@nautilus.homeip.net>
144
145
146About this document
147===================
148
149This document and most of the internal documention use the
150reStructuredText format so that it can be easily converted into other
151formats, such as HTML.  For more information about this, please see:
152
153  http://docutils.sourceforge.net/rst.html
154
155
156.. vim:ft=rest
157.. Local Variables:
158.. mode: rst
159.. End:
Note: See TracBrowser for help on using the repository browser.