Mercurial > hgsubversion
comparison utility_commands.py @ 331:75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
The 'hg svn url' command has been killed; the replacement is
'.hg/hgrc'. More stuff related to its disappearance has been stripped,
including two tests.
HgChangeReceiver now takes a UUID argument, which it uses to ensure
that remote repositories remain unchanged. This is a temporary
solution, and I'm not entirely satisfied with how it's done either.
Access to the UUID file has been isolated in a HgChangeReceiver
property.
Some more tests have been updated to use ui.pushbuffer()/popbuffer(),
and to pass through the Mercurial API.
Moved the arguments to wrappers.pull() to the UI configuration.
Also, remove HgChangeReceiver.opts in favour of a 'usebranchnames'
instance & configuration variable. The name is taken from the
ConvertExtension.
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Fri, 15 May 2009 19:18:43 +0200 |
parents | 1d48d9a34c19 |
children |
comparison
equal
deleted
inserted
replaced
330:5f8f2fd4fd54 | 331:75f082b5897e |
---|---|
5 import svnwrap | 5 import svnwrap |
6 import cmdutil | 6 import cmdutil |
7 import util | 7 import util |
8 import hg_delta_editor | 8 import hg_delta_editor |
9 | 9 |
10 def url(ui, repo, hg_repo_path, **opts): | |
11 """show the location (URL) of the Subversion repository | |
12 """ | |
13 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | |
14 ui_=ui) | |
15 ui.status(hge.url, '\n') | |
16 | |
17 | |
18 def genignore(ui, repo, hg_repo_path, force=False, **opts): | 10 def genignore(ui, repo, hg_repo_path, force=False, **opts): |
19 """generate .hgignore from svn:ignore properties. | 11 """generate .hgignore from svn:ignore properties. |
20 """ | 12 """ |
21 ignpath = os.path.join(hg_repo_path, '.hgignore') | 13 ignpath = os.path.join(hg_repo_path, '.hgignore') |
22 if not force and os.path.exists(ignpath): | 14 if not force and os.path.exists(ignpath): |
23 raise hgutil.Abort('not overwriting existing .hgignore, try --force?') | 15 raise hgutil.Abort('not overwriting existing .hgignore, try --force?') |
24 ignorefile = open(ignpath, 'w') | 16 ignorefile = open(ignpath, 'w') |
25 ignorefile.write('.hgignore\nsyntax:glob\n') | 17 ignorefile.write('.hgignore\nsyntax:glob\n') |
26 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 18 url = util.normalize_url(repo.ui.config('paths', 'default')) |
27 ui_=ui) | 19 user, passwd = util.getuserpass(opts) |
20 svn = svnwrap.SubversionRepo(url, user, passwd) | |
21 hge = hg_delta_editor.HgChangeReceiver(path=hg_repo_path, repo=repo, | |
22 ui_=ui, uuid=svn.uuid) | |
28 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 23 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
29 hge.revmap.iterkeys())) | 24 hge.revmap.iterkeys())) |
30 parent = cmdutil.parentrev(ui, repo, hge, svn_commit_hashes) | 25 parent = cmdutil.parentrev(ui, repo, hge, svn_commit_hashes) |
31 r, br = svn_commit_hashes[parent.node()] | 26 r, br = svn_commit_hashes[parent.node()] |
32 if br == None: | 27 if br == None: |
33 branchpath = 'trunk' | 28 branchpath = 'trunk' |
34 else: | 29 else: |
35 branchpath = 'branches/%s' % br | 30 branchpath = 'branches/%s' % br |
36 url = hge.url | |
37 if url[-1] == '/': | 31 if url[-1] == '/': |
38 url = url[:-1] | 32 url = url[:-1] |
39 user, passwd = util.getuserpass(opts) | |
40 svn = svnwrap.SubversionRepo(url, user, passwd) | |
41 dirs = [''] + [d[0] for d in svn.list_files(branchpath, r) if d[1] == 'd'] | 33 dirs = [''] + [d[0] for d in svn.list_files(branchpath, r) if d[1] == 'd'] |
42 for dir in dirs: | 34 for dir in dirs: |
43 props = svn.list_props('%s/%s/' % (branchpath,dir), r) | 35 props = svn.list_props('%s/%s/' % (branchpath,dir), r) |
44 if 'svn:ignore' in props: | 36 if 'svn:ignore' in props: |
45 lines = props['svn:ignore'].strip().split('\n') | 37 lines = props['svn:ignore'].strip().split('\n') |
51 | 43 |
52 | 44 |
53 def info(ui, repo, hg_repo_path, **opts): | 45 def info(ui, repo, hg_repo_path, **opts): |
54 """show Subversion details similar to `svn info' | 46 """show Subversion details similar to `svn info' |
55 """ | 47 """ |
56 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 48 url = util.normalize_url(repo.ui.config('paths', 'default')) |
57 ui_=ui) | 49 user, passwd = util.getuserpass(opts) |
50 svn = svnwrap.SubversionRepo(url, user, passwd) | |
51 hge = hg_delta_editor.HgChangeReceiver(path=hg_repo_path, repo=repo, | |
52 ui_=ui, uuid=svn.uuid) | |
58 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 53 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
59 hge.revmap.iterkeys())) | 54 hge.revmap.iterkeys())) |
60 parent = cmdutil.parentrev(ui, repo, hge, svn_commit_hashes) | 55 parent = cmdutil.parentrev(ui, repo, hge, svn_commit_hashes) |
61 pn = parent.node() | 56 pn = parent.node() |
62 if pn not in svn_commit_hashes: | 57 if pn not in svn_commit_hashes: |
69 elif br.startswith('../'): | 64 elif br.startswith('../'): |
70 branchpath = '/%s' % br[3:] | 65 branchpath = '/%s' % br[3:] |
71 subdir = subdir.replace('branches/../', '') | 66 subdir = subdir.replace('branches/../', '') |
72 else: | 67 else: |
73 branchpath = '/branches/%s' % br | 68 branchpath = '/branches/%s' % br |
74 url = hge.url | 69 url = util.normalize_url(repo.ui.config('paths', 'default')) |
75 if url[-1] == '/': | 70 if url[-1] == '/': |
76 url = url[:-1] | 71 url = url[:-1] |
77 url = '%s%s' % (url, branchpath) | 72 url = '%s%s' % (url, branchpath) |
78 author = hge.authors.reverselookup(parent.user()) | 73 author = hge.authors.reverselookup(parent.user()) |
79 # cleverly figure out repo root w/o actually contacting the server | 74 # cleverly figure out repo root w/o actually contacting the server |
85 Node Kind: directory | 80 Node Kind: directory |
86 Last Changed Author: %(author)s | 81 Last Changed Author: %(author)s |
87 Last Changed Rev: %(revision)s | 82 Last Changed Rev: %(revision)s |
88 Last Changed Date: %(date)s\n''' % | 83 Last Changed Date: %(date)s\n''' % |
89 {'reporoot': reporoot, | 84 {'reporoot': reporoot, |
90 'uuid': open(hge.uuid_file).read(), | 85 'uuid': hge.uuid, |
91 'url': url, | 86 'url': url, |
92 'author': author, | 87 'author': author, |
93 'revision': r, | 88 'revision': r, |
94 # TODO I'd like to format this to the user's local TZ if possible | 89 # TODO I'd like to format this to the user's local TZ if possible |
95 'date': hgutil.datestr(parent.date(), | 90 'date': hgutil.datestr(parent.date(), |
123 ui.status('hgsubversion: %s\n' % util.version(ui)) | 118 ui.status('hgsubversion: %s\n' % util.version(ui)) |
124 | 119 |
125 | 120 |
126 nourl = ['version', 'listauthors'] | 121 nourl = ['version', 'listauthors'] |
127 table = { | 122 table = { |
128 'url': url, | |
129 'genignore': genignore, | 123 'genignore': genignore, |
130 'info': info, | 124 'info': info, |
131 'listauthors': listauthors, | 125 'listauthors': listauthors, |
132 'version': version, | 126 'version': version, |
133 } | 127 } |