comparison __init__.py @ 248:a9134fa28d15

Move svncommand code into __init__.py.
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Wed, 08 Apr 2009 19:12:23 +0200
parents 1272e87546ed
children 23b02f892d9b
comparison
equal deleted inserted replaced
247:1272e87546ed 248:a9134fa28d15
14 14
15 import os 15 import os
16 16
17 from mercurial import commands 17 from mercurial import commands
18 from mercurial import hg 18 from mercurial import hg
19 from mercurial import util as mutil 19 from mercurial import util as hgutil
20 20
21 from svn import core 21 from svn import core
22 22
23 import svncommand 23 import svncommand
24 import svncommands 24 import svncommands
25 import tag_repo 25 import tag_repo
26 import util 26 import util
27
28 from util import svn_subcommands, svn_commands_nourl
27 29
28 def reposetup(ui, repo): 30 def reposetup(ui, repo):
29 if not util.is_svn_repo(repo): 31 if not util.is_svn_repo(repo):
30 return 32 return
31 33
32 repo.__class__ = tag_repo.generate_repo_class(ui, repo) 34 repo.__class__ = tag_repo.generate_repo_class(ui, repo)
33 35
34 36
35 def svn(ui, repo, subcommand, *args, **opts): 37 def svn(ui, repo, subcommand, *args, **opts):
36 '''see detailed help for list of subcommands''' 38 '''see detailed help for list of subcommands'''
39
40 # guess command if prefix
41 if subcommand not in svn_subcommands:
42 candidates = []
43 for c in svn_subcommands:
44 if c.startswith(subcommand):
45 candidates.append(c)
46 if len(candidates) == 1:
47 subcommand = candidates[0]
48
49 path = os.path.dirname(repo.path)
37 try: 50 try:
38 return svncommand.svncmd(ui, repo, subcommand, *args, **opts) 51 commandfunc = svn_subcommands[subcommand]
52 if commandfunc not in svn_commands_nourl:
53 opts['svn_url'] = open(os.path.join(repo.path, 'svn', 'url')).read()
54 return commandfunc(ui, args=args, hg_repo_path=path, repo=repo, **opts)
39 except core.SubversionException, e: 55 except core.SubversionException, e:
40 if e.apr_err == core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED: 56 if e.apr_err == core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED:
41 raise mutil.Abort('It appears svn does not trust the ssl cert for this site.\n' 57 raise hgutil.Abort('It appears svn does not trust the ssl cert for this site.\n'
42 'Please try running svn ls on that url first.') 58 'Please try running svn ls on that url first.')
43 raise 59 raise
60 except TypeError:
61 tb = traceback.extract_tb(sys.exc_info()[2])
62 if len(tb) == 1:
63 ui.status('Bad arguments for subcommand %s\n' % subcommand)
64 else:
65 raise
66 except KeyError, e:
67 tb = traceback.extract_tb(sys.exc_info()[2])
68 if len(tb) == 1:
69 ui.status('Unknown subcommand %s\n' % subcommand)
70 else:
71 raise
44 72
45 73
46 def svn_fetch(ui, svn_url, hg_repo_path=None, **opts): 74 def svn_fetch(ui, svn_url, hg_repo_path=None, **opts):
47 '''clone Subversion repository to a local Mercurial repository. 75 '''clone Subversion repository to a local Mercurial repository.
48 76
59 svn_url = util.normalize_url(svn_url) 87 svn_url = util.normalize_url(svn_url)
60 try: 88 try:
61 res = svncommands.pull(ui, svn_url, hg_repo_path, **opts) 89 res = svncommands.pull(ui, svn_url, hg_repo_path, **opts)
62 except core.SubversionException, e: 90 except core.SubversionException, e:
63 if e.apr_err == core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED: 91 if e.apr_err == core.SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED:
64 raise mutil.Abort('It appears svn does not trust the ssl cert for this site.\n' 92 raise hgutil.Abort('It appears svn does not trust the ssl cert for this site.\n'
65 'Please try running svn ls on that url first.') 93 'Please try running svn ls on that url first.')
66 raise 94 raise
67 if (res is None or res == 0) and should_update: 95 if (res is None or res == 0) and should_update:
68 repo = hg.repository(ui, hg_repo_path) 96 repo = hg.repository(ui, hg_repo_path)
69 commands.update(ui, repo, repo['tip'].node()) 97 commands.update(ui, repo, repo['tip'].node())