comparison __init__.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 235022089da6
children 56d877e6ccbb
comparison
equal deleted inserted replaced
330:5f8f2fd4fd54 331:75f082b5897e
9 9
10 Before using hgsubversion, it is *strongly* encouraged to run the 10 Before using hgsubversion, it is *strongly* encouraged to run the
11 automated tests. See `README' in the hgsubversion directory for 11 automated tests. See `README' in the hgsubversion directory for
12 details. 12 details.
13 ''' 13 '''
14 # TODO: The docstring should be slightly more helpful, and at least mention all
15 # configuration settings we support
14 16
15 import os 17 import os
16 import sys 18 import sys
17 import traceback 19 import traceback
18 20
27 import svnrepo 29 import svnrepo
28 import util 30 import util
29 import wrappers 31 import wrappers
30 import svnexternals 32 import svnexternals
31 33
34 schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+file')
35
36 optionmap = {
37 'tagpaths': ('hgsubversion', 'tagpaths'),
38 'authors': ('hgsubversion', 'authormap'),
39 'filemap': ('hgsubversion', 'filemap'),
40 'stupid': ('hgsubversion', 'stupid'),
41 'defaulthost': ('hgsubversion', 'defaulthost'),
42 'defaultauthors': ('hgsubversion', 'defaultauthors'),
43 'usebranchnames': ('hgsubversion', 'usebranchnames'),
44 }
45
46 def wrapper(orig, ui, repo, *args, **opts):
47 """
48 Subversion repositories are also supported for this command. See
49 `hg help %(extension)s` for details.
50 """
51 for opt, (section, name) in optionmap.iteritems():
52 if opt in opts:
53 if isinstance(repo, str):
54 ui.setconfig(section, name, opts.pop(opt))
55 else:
56 repo.ui.setconfig(section, name, opts.pop(opt))
57
58 return orig(ui, repo, *args, **opts)
59
32 def uisetup(ui): 60 def uisetup(ui):
33 """Do our UI setup. 61 """Do our UI setup.
34 62
35 Does the following wrappings: 63 Does the following wrappings:
36 * parent -> utility_commands.parent 64 * parent -> utility_commands.parent
44 entry[1].append(('', 'svn', None, "show revisions outgoing to subversion")) 72 entry[1].append(('', 'svn', None, "show revisions outgoing to subversion"))
45 entry = extensions.wrapcommand(commands.table, 'diff', 73 entry = extensions.wrapcommand(commands.table, 'diff',
46 wrappers.diff) 74 wrappers.diff)
47 entry[1].append(('', 'svn', None, 75 entry[1].append(('', 'svn', None,
48 "show svn-style diffs, default against svn parent")) 76 "show svn-style diffs, default against svn parent"))
49 entry = extensions.wrapcommand(commands.table, 'push',
50 wrappers.push)
51 entry[1].append(('', 'svn', None, "push to subversion"))
52 entry[1].append(('', 'svn-stupid', None, "use stupid replay during push to svn"))
53 77
78 newflags = (('A', 'authors', '', 'path to file containing username '
79 'mappings for Subversion sources'),
80 ('', 'filemap', '', 'path to file containing rules for file '
81 'name mapping used for sources)'),
82 ('T', 'tagpaths', ['tags'], 'list of paths to search for tags '
83 'in Subversion repositories.'))
84 extname = __package__.split('_')[-1]
85
86 for command in ['clone']:
87 doc = wrapper.__doc__.strip() % { 'extension': extname }
88 getattr(commands, command).__doc__ += doc
89 entry = extensions.wrapcommand(commands.table, command, wrapper)
90 entry[1].extend(newflags)
91
54 try: 92 try:
55 rebase = extensions.find('rebase') 93 rebase = extensions.find('rebase')
56 if rebase: 94 if rebase:
57 entry = extensions.wrapcommand(rebase.cmdtable, 'rebase', wrappers.rebase) 95 entry = extensions.wrapcommand(rebase.cmdtable, 'rebase', wrappers.rebase)
58 entry[1].append(('', 'svn', None, 'automatic svn rebase', )) 96 entry[1].append(('', 'svn', None, 'automatic svn rebase', ))
98 136
99 def reposetup(ui, repo): 137 def reposetup(ui, repo):
100 if repo.local(): 138 if repo.local():
101 svnrepo.generate_repo_class(ui, repo) 139 svnrepo.generate_repo_class(ui, repo)
102 140
103 for scheme in ('svn', 'svn+ssh', 'svn+http', 'svn+file'): 141 for scheme in schemes:
104 hg.schemes[scheme] = svnrepo 142 hg.schemes[scheme] = svnrepo
105 143
106 cmdtable = { 144 cmdtable = {
107 "svn": 145 "svn":
108 (svn, 146 (svn,