1.1 --- a/deps.py Thu Mar 13 20:41:56 2008 +0100
1.2 +++ b/deps.py Thu Mar 13 21:47:38 2008 +0100
1.3 @@ -19,13 +19,13 @@
1.4 import re
1.5
1.6 from mercurial.i18n import _
1.7 -from mercurial import cmdutil, commands, hg, util
1.8 +from mercurial import cmdutil, commands, fancyopts, hg, util
1.9
1.10 def deps(ui, repo, tag = None, **opts):
1.11 '''create and manage repository dependencies
1.12
1.13 This extension is useful when a repository might depend on some
1.14 - external dependencies: repositories (Mercurial, CVS,
1.15 + external dependencies: other repositories (Mercurial, CVS,
1.16 Subversion...), files not handled by a SCM tool or some other
1.17 dependencies.
1.18
1.19 @@ -134,6 +134,16 @@
1.20 This command will copy all the dependencies of the given name into
1.21 the destination directories previously registered with the 'deps'
1.22 command.
1.23 +
1.24 + For Mercurial repository dependencies, remote clone options can be
1.25 + given through the configuration file:
1.26 +
1.27 + [deps]
1.28 + aliases = libfoo
1.29 + alias.libfoo = /path/to/libfoo
1.30 + alias.libfoo.options = --pull --uncompressed
1.31 +
1.32 + See 'clone' options for more details.
1.33 '''
1.34 aliases = deps_aliases(ui)
1.35 config = deps_config(ui, '.hgdeps')
1.36 @@ -146,7 +156,7 @@
1.37 if not aliases.has_alias(d.alias):
1.38 raise util.Abort(_("alias '%s' is not registered" % d.alias))
1.39 alias = aliases.alias(d.alias)
1.40 - alias.clone(ui, d.rev, d.dest, opts)
1.41 + alias.clone(ui, d.rev, d.dest)
1.42
1.43
1.44 # Internal classes
1.45 @@ -170,24 +180,25 @@
1.46 % (self.rev, self.alias, self.dest)
1.47
1.48 class dep_alias:
1.49 - def __init__(self, name, location, command):
1.50 + def __init__(self, name, location, command, opts):
1.51 self.name = name
1.52 self.location = location
1.53 self.command = command
1.54 + self._opts = opts
1.55
1.56 - def clone(self, ui, rev, dest, opts):
1.57 + def clone(self, ui, rev, dest):
1.58 ui.status(_('obtaining revision %s from %s to %s\n'
1.59 % (rev, self.location, dest)))
1.60 # create all intermediate directories
1.61 os.makedirs(dest)
1.62 os.rmdir(dest)
1.63 - self._hg_clone(ui, rev, dest, opts)
1.64 + self._hg_clone(ui, rev, dest)
1.65
1.66 - def _hg_clone(self, ui, rev, dest, opts):
1.67 - cmdutil.setremoteconfig(ui, opts)
1.68 + def _hg_clone(self, ui, rev, dest):
1.69 + cmdutil.setremoteconfig(ui, self._opts)
1.70 hg.clone(ui, self.location, dest,
1.71 - pull = opts['pull'],
1.72 - stream = opts['uncompressed'],
1.73 + pull = self._opts['pull'],
1.74 + stream = self._opts['uncompressed'],
1.75 rev = [rev],
1.76 update = True)
1.77
1.78 @@ -212,7 +223,17 @@
1.79 for name in aliases:
1.80 location = ui.config('deps', 'alias.%s' % name)
1.81 command = ui.config('deps', 'alias.%s.command' % name)
1.82 - alias = dep_alias(name, location, command)
1.83 + options = ui.config('deps', 'alias.%s.options' % name)
1.84 + args = []
1.85 + if options:
1.86 + args = [arg.strip() for arg in options.split()]
1.87 + opts = {}
1.88 + try:
1.89 + args = fancyopts.fancyopts(args, _cloneopts, opts)
1.90 + except fancyopts.getopt.GetoptError, inst:
1.91 + commands.help_(ui, 'depsclone')
1.92 + raise util.Abort(inst.args[0])
1.93 + alias = dep_alias(name, location, command, opts)
1.94 self._aliases[name] = alias
1.95
1.96 class deps_config:
1.97 @@ -310,6 +331,11 @@
1.98 self._tags[tag].append(dep)
1.99 f.close()
1.100
1.101 +_cloneopts = [
1.102 + ('', 'pull', None, _('use pull protocol to copy metadata')),
1.103 + ('', 'uncompressed', None, _('use uncompressed transfer (fast over LAN)')),
1.104 +] + commands.remoteopts
1.105 +
1.106 cmdtable = {
1.107 'deps': (deps,
1.108 [('a', 'alias', '', 'alias of the repository dependency'),
1.109 @@ -317,10 +343,5 @@
1.110 ('', 'remove', None, "remove name's dependencies"),
1.111 ('d', 'dest', '', 'destination directory for the dependency')],
1.112 'hg deps [-a ALIAS -r REV -d DEST] [NAME]'),
1.113 - 'depsclone': (deps_clone,
1.114 - [('', 'pull', None, _('use pull protocol to copy metadata')),
1.115 - ('', 'uncompressed', None,
1.116 - _('use uncompressed transfer (fast over LAN)')),
1.117 - ] + commands.remoteopts,
1.118 - 'hg depsclone NAME')
1.119 + 'depsclone': (deps_clone, [], 'hg depsclone NAME')
1.120 }