| [172] | 1 | ABOUT |
|---|
| 2 | ---------------------------------------------------------------------- |
|---|
| 3 | tailor.py is tool to synchronize CVS, Subversion, and darcs repositories. |
|---|
| 4 | |
|---|
| 5 | This script makes it easier to keep the upstream changes merged in |
|---|
| 6 | a branch of a product, storing needed information such as the upstream |
|---|
| 7 | URI and revision in special properties on the branched directory. |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | INSTALLATION |
|---|
| 11 | ---------------------------------------------------------------------- |
|---|
| 12 | tailor.py is written in python, and thus python must be installed on your |
|---|
| 13 | system to use it. |
|---|
| 14 | |
|---|
| 15 | Make tailor.py executable: |
|---|
| 16 | |
|---|
| 17 | $ chmod +x tailor.py |
|---|
| 18 | |
|---|
| 19 | You can either run tailor.py where it is currently located, or move it |
|---|
| 20 | along with the vcpx directory to a location in your PATH. |
|---|
| 21 | |
|---|
| 22 | |
|---|
| 23 | EXAMPLES |
|---|
| 24 | ---------------------------------------------------------------------- |
|---|
| 25 | |
|---|
| 26 | # Bootstrap a new taylored project, starting at upstream revision 10 |
|---|
| 27 | $ tailor.py -b -s svn -R http://svn.server/Product -r 10 ~/darcs/MyProduct |
|---|
| 28 | |
|---|
| 29 | # Bootstrap a new product, fetching from CVS and storing under SVN: this |
|---|
| 30 | # will create the directory "~/svnwc/cmfcore"; "~/svnwc" must be already |
|---|
| 31 | # under SVN. |
|---|
| 32 | $ tailor.py --source-kind cvs --target-kind svn --bootstrap \ |
|---|
| 33 | --repository :pserver:cvs.zope.org:/cvs-repository \ |
|---|
| 34 | --module CMF/CMFCore ~/svnwc/cmfcore |
|---|
| 35 | |
|---|
| 36 | # Showing each command bootstrap a new DARCS repos in "~/darcs/cmftopic" |
|---|
| 37 | # under which the upstream module will be extracted as "CMFTopic" (ie, the |
|---|
| 38 | # last component of the module name). |
|---|
| 39 | $ tailor.py -D -b -R :pserver:anonymous@cvs.zope.org:/cvs-repository/ \ |
|---|
| 40 | -m CMF/CMFTopic ~/darcs/cmftopic |
|---|
| 41 | |
|---|
| 42 | # Merge upstream changes since last update/bootstrap |
|---|
| 43 | $ tailor.py ~/svnwc/MyProduct |
|---|
| 44 | |
|---|
| 45 | |
|---|
| 46 | CONFIG FILE FORMAT |
|---|
| 47 | ---------------------------------------------------------------------- |
|---|
| 48 | |
|---|
| 49 | Here's an example config file entry: |
|---|
| 50 | |
|---|
| 51 | {'plone/atcontenttypes': {'module': 'ATContentTypes', |
|---|
| 52 | 'source_kind': 'cvs', |
|---|
| 53 | 'subdir': 'ATContentTypes', |
|---|
| 54 | 'target_kind': 'darcs', |
|---|
| 55 | 'upstream_repos': ':ext:cvs.sourceforge.net:/cvsroot/collective', |
|---|
| 56 | 'upstream_revision': '2004-11-24 19:42:06 by ctheune'}} |
|---|
| 57 | |
|---|
| 58 | The above represents one entry in a config file. You can multiple entries, |
|---|
| 59 | but be careful to make sure have an extra bracket on the first and last lines |
|---|
| 60 | of the file. Here's an example with three entries to illustrate this: |
|---|
| 61 | |
|---|
| 62 | {'plone/atcontenttypes': {'module': 'ATContentTypes', |
|---|
| 63 | 'source_kind': 'cvs', |
|---|
| 64 | 'subdir': 'ATContentTypes', |
|---|
| 65 | 'target_kind': 'darcs', |
|---|
| 66 | 'upstream_repos': ':ext:cvs.sourceforge.net:/cvsroot/collective', |
|---|
| 67 | 'upstream_revision': '2004-11-24 19:42:06 by ctheune'}, |
|---|
| 68 | 'plone/btreefolder2': {'module': 'Products/BTreeFolder2', |
|---|
| 69 | 'source_kind': 'cvs', |
|---|
| 70 | 'subdir': 'BTreeFolder2', |
|---|
| 71 | 'target_kind': 'darcs', |
|---|
| 72 | 'upstream_repos': ':pserver:anonymous@cvs.zope.org:/cvs-repository', |
|---|
| 73 | 'upstream_revision': '2004-06-16 23:45:45 by shane'}, |
|---|
| 74 | 'plone/cmfactionicons': {'module': 'CMF/CMFActionIcons', |
|---|
| 75 | 'source_kind': 'cvs', |
|---|
| 76 | 'subdir': 'CMFActionIcons', |
|---|
| 77 | 'target_kind': 'darcs', |
|---|
| 78 | 'upstream_repos': ':pserver:anonymous@cvs.zope.org:/cvs-repository', |
|---|
| 79 | 'upstream_revision': '2004-10-04 17:03:38 by tseaver'}} |
|---|
| 80 | |
|---|
| 81 | By convention, config files are named with the extension ".tailor", but this is |
|---|
| 82 | not enforced. |
|---|
| 83 | |
|---|
| 84 | In the example above, 'plone/atcontenttypes' is a directory where the target source |
|---|
| 85 | will be stored. The keys such 'module', 'source_kind', etc correspond to options |
|---|
| 86 | of the same name. See the output of 'tailor.py' for more details. |
|---|
| 87 | |
|---|
| 88 | |
|---|
| 89 | FURTHER HELP |
|---|
| 90 | ---------------------------------------------------------------------- |
|---|
| 91 | See the output of tailor.py -h for some further tips. |
|---|
| 92 | |
|---|
| 93 | |
|---|
| 94 | AUTHOR |
|---|
| 95 | ---------------------------------------------------------------------- |
|---|
| 96 | Lele Gaifax <lele@nautilus.homeip.net> |
|---|
| 97 | |
|---|
| 98 | |
|---|