source: tailor/README @ 196

Revision 196, 5.7 KB checked in by Mark Stosberg <mark@…>, 8 years ago (diff)

mention how conflict resolution works

I hope this documentation is right based on my reading of the code. :) I only
found mentions of conflict handling in source.py and svn.py. If there are
specific other systems that do or do not handling conflict resolution, that
would be great to document as well.

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 tailored 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
71Resolving Conflicts
72===================
73
74If any conflicts are found, tailor.py will flag them and prompt the user to
75correct them.
76
77
78Tailor's metadata
79=================
80
81To do its work, tailor needs some information about your source tree,
82such as the upstream repository URL and the current revision of the
83sources on your harddisk.
84
85In the simpler case, tailor keeps this information in a file called
86`tailor.info`, one for each tailored project, that is a very simple
87text document, with the following information, one per line:
88
891. Upstream repository kind (either "cvs", "darcs" or "svn)
902. Target repository kind (the same as above)
913. The name of the "module" that's been tailored
924. The URL of the upstream repository (that may not be an URL, for cvs...)
935. The current revision, from the upstream point of view, of the sources
946. The subdirectory that contains the checked out upstream tree,
95   either that given with with the `--subdir` option or computed
96   taking the last part of the module name.
97
98This is everything tailor needs, to be able to keep going from where it
99left last time.
100
101
102Config file format
103------------------
104
105When your project is composed by multiple upstream modules, it is
106easier to collect such information in a single file. This is done by
107specifying the `--configfile` option with a file name as argument. In
108this case, tailor will read/write the above information from a
109standard Python dictionary stored in the given file.
110
111The dictionary is keyed on the relative position of each project, and
112each entry carries the same information described above.
113
114Here's an example config file entry::
115
116 {'plone/atcontenttypes': {'module': 'ATContentTypes',
117                           'source_kind': 'cvs',
118                           'subdir': 'ATContentTypes',
119                           'target_kind': 'darcs',
120                           'upstream_repos': ':ext:cvs.sourceforge.net:/cvsroot/collective',
121                           'upstream_revision': '2004-11-24 19:42:06 by ctheune'}}
122
123By convention, config files are named with the extension ".tailor",
124but this is not enforced.
125
126In the example above, 'plone/atcontenttypes' is a directory where the
127target source will be stored. The keys such 'module', 'source_kind',
128etc correspond to options of the same name.
129
130When using a config file, tailor will perform its job on each project
131contained in the dictionary.
132
133
134Further help
135============
136
137See the output of tailor.py -h for some further tips.  There's also a
138`wiki page`_ that may give you some other hints.
139
140.. _wiki page:
141   http://www.scannedinavian.org/DarcsWiki/ConvertingFromSubversion
142
143I will be more than happy to answer any doubt, question or suggestion
144you may have on it. I'm usually hanging as "lelit" on the IRC channel
145devoted to darcs on the `freenode.net` network. Do not hesitate to
146contact me either by email or chatting there.
147
148
149Author
150======
151
152Lele Gaifax <lele@nautilus.homeip.net>
153
154
155About this document
156===================
157
158This document and most of the internal documention use the
159reStructuredText format so that it can be easily converted into other
160formats, such as HTML.  For more information about this, please see:
161
162  http://docutils.sourceforge.net/rst.html
163
164
165.. vim:ft=rest
166.. Local Variables:
167.. mode: rst
168.. End:
Note: See TracBrowser for help on using the repository browser.