Mercurial > hgsubversion
comparison utility_commands.py @ 253:c3d5c4ae9c7c
Work with simple command table instead of decorators.
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Fri, 10 Apr 2009 23:09:59 +0200 |
parents | 79349fd04836 |
children | 9ba31af57e4b |
comparison
equal
deleted
inserted
replaced
252:4d3bcd2f26ed | 253:c3d5c4ae9c7c |
---|---|
2 | 2 |
3 import mercurial | 3 import mercurial |
4 from mercurial import cmdutil | 4 from mercurial import cmdutil |
5 from mercurial import node | 5 from mercurial import node |
6 from mercurial import util as hgutil | 6 from mercurial import util as hgutil |
7 from hgext import rebase | 7 from hgext import rebase as hgrebase |
8 | 8 |
9 import svnwrap | 9 import svnwrap |
10 import util | 10 import util |
11 import hg_delta_editor | 11 import hg_delta_editor |
12 | 12 |
13 def print_wc_url(ui, repo, hg_repo_path, **opts): | 13 def url(ui, repo, hg_repo_path, **opts): |
14 """show the location (URL) of the Subversion repository | 14 """show the location (URL) of the Subversion repository |
15 """ | 15 """ |
16 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 16 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
17 ui_=ui) | 17 ui_=ui) |
18 ui.status(hge.url, '\n') | 18 ui.status(hge.url, '\n') |
19 print_wc_url = util.register_subcommand('url')(print_wc_url) | |
20 | 19 |
21 | 20 |
22 def find_wc_parent_rev(ui, repo, hge, svn_commit_hashes): | 21 def find_wc_parent_rev(ui, repo, hge, svn_commit_hashes): |
23 """Find the svn parent revision of the repo's dirstate. | 22 """Find the svn parent revision of the repo's dirstate. |
24 """ | 23 """ |
27 if o_r: | 26 if o_r: |
28 workingctx = repo[o_r[-1]].parents()[0] | 27 workingctx = repo[o_r[-1]].parents()[0] |
29 return workingctx | 28 return workingctx |
30 | 29 |
31 | 30 |
32 def generate_ignore(ui, repo, hg_repo_path, force=False, **opts): | 31 def genignore(ui, repo, hg_repo_path, force=False, **opts): |
33 """generate .hgignore from svn:ignore properties. | 32 """generate .hgignore from svn:ignore properties. |
34 """ | 33 """ |
35 ignpath = os.path.join(hg_repo_path, '.hgignore') | 34 ignpath = os.path.join(hg_repo_path, '.hgignore') |
36 if not force and os.path.exists(ignpath): | 35 if not force and os.path.exists(ignpath): |
37 raise hgutil.Abort('not overwriting existing .hgignore, try --force?') | 36 raise hgutil.Abort('not overwriting existing .hgignore, try --force?') |
61 for prop in lines: | 60 for prop in lines: |
62 if dir: | 61 if dir: |
63 ignorefile.write('%s/%s\n' % (dir, prop)) | 62 ignorefile.write('%s/%s\n' % (dir, prop)) |
64 else: | 63 else: |
65 ignorefile.write('%s\n' % prop) | 64 ignorefile.write('%s\n' % prop) |
66 generate_ignore = util.register_subcommand('genignore')(generate_ignore) | 65 |
67 | 66 |
68 | 67 def info(ui, repo, hg_repo_path, **opts): |
69 def run_svn_info(ui, repo, hg_repo_path, **opts): | |
70 """show Subversion details similar to `svn info' | 68 """show Subversion details similar to `svn info' |
71 """ | 69 """ |
72 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 70 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
73 ui_=ui) | 71 ui_=ui) |
74 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 72 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
109 'revision': r, | 107 'revision': r, |
110 # TODO I'd like to format this to the user's local TZ if possible | 108 # TODO I'd like to format this to the user's local TZ if possible |
111 'date': hgutil.datestr(parent.date(), | 109 'date': hgutil.datestr(parent.date(), |
112 '%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)') | 110 '%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)') |
113 }) | 111 }) |
114 run_svn_info = util.register_subcommand('info')(run_svn_info) | 112 |
115 | 113 |
116 | 114 def parent(ui, repo, hg_repo_path, **opts): |
117 def print_parent_revision(ui, repo, hg_repo_path, **opts): | |
118 """show Mercurial & Subversion parents of the working dir or revision | 115 """show Mercurial & Subversion parents of the working dir or revision |
119 """ | 116 """ |
120 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 117 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
121 ui_=ui) | 118 ui_=ui) |
122 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 119 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
127 ui.status('Working copy parent revision is %s: r%s on %s\n' % | 124 ui.status('Working copy parent revision is %s: r%s on %s\n' % |
128 (ha, r, br or 'trunk')) | 125 (ha, r, br or 'trunk')) |
129 else: | 126 else: |
130 ui.status('Working copy seems to have no parent svn revision.\n') | 127 ui.status('Working copy seems to have no parent svn revision.\n') |
131 return 0 | 128 return 0 |
132 print_parent_revision = util.register_subcommand('parent')(print_parent_revision) | 129 |
133 | 130 |
134 | 131 def rebase(ui, repo, extrafn=None, sourcerev=None, **opts): |
135 def rebase_commits(ui, repo, extrafn=None, sourcerev=None, **opts): | |
136 """rebase current unpushed revisions onto the Subversion head | 132 """rebase current unpushed revisions onto the Subversion head |
137 | 133 |
138 This moves a line of development from making its own head to the top of | 134 This moves a line of development from making its own head to the top of |
139 Subversion development, linearizing the changes. In order to make sure you | 135 Subversion development, linearizing the changes. In order to make sure you |
140 rebase on top of the current top of Subversion work, you should probably run | 136 rebase on top of the current top of Subversion work, you should probably run |
173 break | 169 break |
174 if parent_rev == target_rev: | 170 if parent_rev == target_rev: |
175 ui.status('Already up to date!\n') | 171 ui.status('Already up to date!\n') |
176 return 0 | 172 return 0 |
177 # TODO this is really hacky, there must be a more direct way | 173 # TODO this is really hacky, there must be a more direct way |
178 return rebase.rebase(ui, repo, dest=node.hex(target_rev.node()), | 174 return hgrebase.rebase(ui, repo, dest=node.hex(target_rev.node()), |
179 base=node.hex(sourcerev), | 175 base=node.hex(sourcerev), |
180 extrafn=extrafn) | 176 extrafn=extrafn) |
181 rebase_commits = util.register_subcommand('rebase')(rebase_commits) | 177 |
182 | 178 |
183 | 179 def outgoing(ui, repo, hg_repo_path, **opts): |
184 def show_outgoing_to_svn(ui, repo, hg_repo_path, **opts): | |
185 """show changesets not found in the Subversion repository | 180 """show changesets not found in the Subversion repository |
186 """ | 181 """ |
187 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 182 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
188 ui_=ui) | 183 ui_=ui) |
189 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 184 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
193 ui.status('No outgoing changes found.\n') | 188 ui.status('No outgoing changes found.\n') |
194 return 0 | 189 return 0 |
195 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=False) | 190 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=False) |
196 for node in reversed(o_r): | 191 for node in reversed(o_r): |
197 displayer.show(repo[node]) | 192 displayer.show(repo[node]) |
198 show_outgoing_to_svn = util.register_subcommand('outgoing')(show_outgoing_to_svn) | 193 |
199 | 194 |
200 | 195 def listauthors(ui, args, authors=None, **opts): |
201 def list_authors(ui, args, authors=None, **opts): | |
202 """list all authors in a Subversion repository | 196 """list all authors in a Subversion repository |
203 """ | 197 """ |
204 if not len(args): | 198 if not len(args): |
205 ui.status('No repository specified.\n') | 199 ui.status('No repository specified.\n') |
206 return | 200 return |
212 authorfile = open(authors, 'w') | 206 authorfile = open(authors, 'w') |
213 authorfile.write('%s=\n' % '=\n'.join(sorted(author_set))) | 207 authorfile.write('%s=\n' % '=\n'.join(sorted(author_set))) |
214 authorfile.close() | 208 authorfile.close() |
215 else: | 209 else: |
216 ui.status('%s\n' % '\n'.join(sorted(author_set))) | 210 ui.status('%s\n' % '\n'.join(sorted(author_set))) |
217 list_authors = util.register_subcommand('listauthors')(list_authors) | |
218 list_authors = util.command_needs_no_url(list_authors) | |
219 | 211 |
220 | 212 |
221 def version(ui, **opts): | 213 def version(ui, **opts): |
222 """Show current version of hg and hgsubversion. | 214 """Show current version of hg and hgsubversion. |
223 """ | 215 """ |
224 ui.status('hg: %s\n' % hgutil.version()) | 216 ui.status('hg: %s\n' % hgutil.version()) |
225 ui.status('svn bindings: %s\n' % svnwrap.version()) | 217 ui.status('svn bindings: %s\n' % svnwrap.version()) |
226 ui.status('hgsubversion: %s\n' % util.version(ui)) | 218 ui.status('hgsubversion: %s\n' % util.version(ui)) |
227 version = util.register_subcommand('version')(version) | 219 |
228 version = util.command_needs_no_url(version) | 220 |
221 nourl = ['version', 'listauthors'] | |
222 table = { | |
223 'url': url, | |
224 'genignore': genignore, | |
225 'info': info, | |
226 'parent': parent, | |
227 'outgoing': outgoing, | |
228 'listauthors': listauthors, | |
229 'version': version, | |
230 'rebase': rebase, | |
231 } |