Mercurial > hgsubversion
comparison __init__.py @ 256:7932d098cb5f
Refactor commands to wrap their hg equivalent adding a --svn flag where sane.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Fri, 10 Apr 2009 18:47:18 -0500 |
parents | c3d5c4ae9c7c |
children | ffccf0080e54 |
comparison
equal
deleted
inserted
replaced
255:246aaefb1cc0 | 256:7932d098cb5f |
---|---|
15 import os | 15 import os |
16 import sys | 16 import sys |
17 import traceback | 17 import traceback |
18 | 18 |
19 from mercurial import commands | 19 from mercurial import commands |
20 from mercurial import extensions | |
20 from mercurial import hg | 21 from mercurial import hg |
21 from mercurial import util as hgutil | 22 from mercurial import util as hgutil |
22 | 23 |
23 from svn import core | 24 from svn import core |
24 | 25 |
29 def reposetup(ui, repo): | 30 def reposetup(ui, repo): |
30 if not util.is_svn_repo(repo): | 31 if not util.is_svn_repo(repo): |
31 return | 32 return |
32 | 33 |
33 repo.__class__ = tag_repo.generate_repo_class(ui, repo) | 34 repo.__class__ = tag_repo.generate_repo_class(ui, repo) |
35 | |
36 def uisetup(ui): | |
37 """Do our UI setup. | |
38 | |
39 Does the following wrappings: | |
40 * parent -> utility_commands.parent | |
41 * outgoing -> utility_commands.outgoing | |
42 """ | |
43 entry = extensions.wrapcommand(commands.table, 'parents', | |
44 utility_commands.parent) | |
45 entry[1].append(('', 'svn', None, "show parent svn revision instead")) | |
46 entry = extensions.wrapcommand(commands.table, 'outgoing', | |
47 utility_commands.outgoing) | |
48 entry[1].append(('', 'svn', None, "show revisions outgoing to subversion")) | |
49 entry = extensions.wrapcommand(commands.table, 'diff', | |
50 svncommands.diff) | |
51 entry[1].append(('', 'svn', None, | |
52 "show svn-style diffs, default against svn parent")) | |
53 entry = extensions.wrapcommand(commands.table, 'push', | |
54 svncommands.push) | |
55 entry[1].append(('', 'svn', None, "push to subversion")) | |
56 entry[1].append(('', 'svn-stupid', None, "use stupid replay during push to svn")) | |
57 entry = extensions.wrapcommand(commands.table, 'pull', | |
58 svncommands.pull) | |
59 entry[1].append(('', 'svn', None, "pull from subversion")) | |
60 entry[1].append(('', 'svn-stupid', None, "use stupid replay during pull from svn")) | |
61 | |
62 entry = extensions.wrapcommand(commands.table, 'clone', | |
63 svncommands.clone) | |
64 entry[1].extend([#('', 'skipto-rev', '0', 'skip commits before this revision.'), | |
65 ('', 'svn-stupid', False, 'be stupid and use diffy replay.'), | |
66 ('', 'svn-tag-locations', 'tags', 'Relative path to Subversion tags.'), | |
67 ('', 'svn-authors', '', 'username mapping filename'), | |
68 ('', 'svn-filemap', '', | |
69 'remap file to exclude paths or include only certain paths'), | |
70 ]) | |
71 # (svn_fetch, | |
72 # , | |
73 # 'hg svnclone source [dest]'), | |
34 | 74 |
35 | 75 |
36 def svn(ui, repo, subcommand, *args, **opts): | 76 def svn(ui, repo, subcommand, *args, **opts): |
37 '''see detailed help for list of subcommands''' | 77 '''see detailed help for list of subcommands''' |
38 | 78 |
68 ui.status('Unknown subcommand %s\n' % subcommand) | 108 ui.status('Unknown subcommand %s\n' % subcommand) |
69 else: | 109 else: |
70 raise | 110 raise |
71 | 111 |
72 | 112 |
73 def svn_fetch(ui, svn_url, hg_repo_path=None, **opts): | |
74 '''clone Subversion repository to a local Mercurial repository. | |
75 | 113 |
76 If no destination directory name is specified, it defaults to the | |
77 basename of the source plus "-hg". | |
78 | |
79 You can specify multiple paths for the location of tags using comma | |
80 separated values. | |
81 ''' | |
82 if not hg_repo_path: | |
83 hg_repo_path = hg.defaultdest(svn_url) + "-hg" | |
84 ui.status("Assuming destination %s\n" % hg_repo_path) | |
85 should_update = not os.path.exists(hg_repo_path) | |
86 svn_url = util.normalize_url(svn_url) | |
87 try: | |
88 res = svncommands.pull(ui, svn_url, hg_repo_path, **opts) | |
89 except core.SubversionException, e: | |
90 if e.apr_err == core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED: | |
91 raise hgutil.Abort('It appears svn does not trust the ssl cert for this site.\n' | |
92 'Please try running svn ls on that url first.') | |
93 raise | |
94 if (res is None or res == 0) and should_update: | |
95 repo = hg.repository(ui, hg_repo_path) | |
96 commands.update(ui, repo, repo['tip'].node()) | |
97 return res | |
98 | |
99 commands.norepo += " svnclone" | |
100 cmdtable = { | 114 cmdtable = { |
101 "svn": | 115 "svn": |
102 (svn, | 116 (svn, |
103 [('u', 'svn-url', '', 'path to the Subversion server.'), | 117 [('u', 'svn-url', '', 'path to the Subversion server.'), |
104 ('', 'stupid', False, 'be stupid and use diffy replay.'), | 118 ('', 'stupid', False, 'be stupid and use diffy replay.'), |
109 ('', 'username', '', 'username for authentication'), | 123 ('', 'username', '', 'username for authentication'), |
110 ('', 'password', '', 'password for authentication'), | 124 ('', 'password', '', 'password for authentication'), |
111 ], | 125 ], |
112 svncommands._helpgen(), | 126 svncommands._helpgen(), |
113 ), | 127 ), |
114 "svnclone": | |
115 (svn_fetch, | |
116 [('S', 'skipto-rev', '0', 'skip commits before this revision.'), | |
117 ('', 'stupid', False, 'be stupid and use diffy replay.'), | |
118 ('T', 'tag-locations', 'tags', 'Relative path to Subversion tags.'), | |
119 ('A', 'authors', '', 'username mapping filename'), | |
120 ('', 'filemap', '', | |
121 'remap file to exclude paths or include only certain paths'), | |
122 ('', 'username', '', 'username for authentication'), | |
123 ('', 'password', '', 'password for authentication'), | |
124 ], | |
125 'hg svnclone source [dest]'), | |
126 } | 128 } |