add remote options support for each alias
authorAleix Conchillo Flaque <aleix@member.fsf.org>
Thu Mar 13 21:47:38 2008 +0100 (2008-03-13)
changeset 8f1e633232cf7
parent 7 8eca57511b39
child 9 8d6469c3d709
add remote options support for each alias
deps.py
     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  }