Mercurial > public > mercurial-scm > hg
comparison mercurial/cmdutil.py @ 4716:36d23de02da1
Make earlygetopt return a list of all option values, use the last value.
This fixes:
"hg -R" showing a useful error instead of traceback
"hg -R foo --repository bar" using bar instead of foo
And provides a way for other users of earlygetopt to accept more than
one value.
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Mon, 25 Jun 2007 22:08:10 +0200 |
parents | a741293793f6 |
children | 97369f6a6bb6 |
comparison
equal
deleted
inserted
replaced
4715:ad45209a7c7a | 4716:36d23de02da1 |
---|---|
246 except (IndexError, ValueError): | 246 except (IndexError, ValueError): |
247 raise util.Abort(_('malformed --config option: %s') % cfg) | 247 raise util.Abort(_('malformed --config option: %s') % cfg) |
248 return parsed | 248 return parsed |
249 | 249 |
250 def earlygetopt(aliases, args): | 250 def earlygetopt(aliases, args): |
251 if "--" in args: | 251 """Return list of values for a option (with aliases) in given order""" |
252 args = args[:args.index("--")] | 252 try: |
253 for opt in aliases: | 253 argcount = args.index("--") |
254 if opt in args: | 254 except ValueError: |
255 return args[args.index(opt) + 1] | 255 argcount = len(args) |
256 return None | 256 values = [] |
257 pos = 0 | |
258 while pos < argcount: | |
259 valuepos = argcount | |
260 for opt in aliases: | |
261 # find next occurance of current alias | |
262 try: | |
263 candidate = args.index(opt, pos, argcount) + 1 | |
264 # ignore and let getopt report an error if there is no value | |
265 if candidate < valuepos: | |
266 valuepos = candidate | |
267 except ValueError: | |
268 pass | |
269 if valuepos < argcount: | |
270 values.append(args[valuepos]) | |
271 pos = valuepos | |
272 return values | |
257 | 273 |
258 def dispatch(ui, args, argv0=None): | 274 def dispatch(ui, args, argv0=None): |
259 # remember how to call 'hg' before changing the working dir | 275 # remember how to call 'hg' before changing the working dir |
260 util.set_hgexecutable(argv0) | 276 util.set_hgexecutable(argv0) |
261 | 277 |
262 # check for cwd first | 278 # check for cwd first |
263 cwd = earlygetopt(['--cwd'], args) | 279 cwd = earlygetopt(['--cwd'], args) |
264 if cwd: | 280 if cwd: |
265 os.chdir(cwd) | 281 os.chdir(cwd[-1]) |
266 | 282 |
267 # read the local repository .hgrc into a local ui object | 283 # read the local repository .hgrc into a local ui object |
268 path = findrepo() or "" | 284 path = findrepo() or "" |
269 if not path: | 285 if not path: |
270 lui = ui | 286 lui = ui |
276 pass | 292 pass |
277 | 293 |
278 # now we can expand paths, even ones in .hg/hgrc | 294 # now we can expand paths, even ones in .hg/hgrc |
279 rpath = earlygetopt(["-R", "--repository", "--repo"], args) | 295 rpath = earlygetopt(["-R", "--repository", "--repo"], args) |
280 if rpath: | 296 if rpath: |
281 path = lui.expandpath(rpath) | 297 path = lui.expandpath(rpath[-1]) |
282 lui = commands.ui.ui(parentui=ui) | 298 lui = commands.ui.ui(parentui=ui) |
283 lui.readconfig(os.path.join(path, ".hg", "hgrc")) | 299 lui.readconfig(os.path.join(path, ".hg", "hgrc")) |
284 | 300 |
285 extensions.loadall(lui) | 301 extensions.loadall(lui) |
286 # check for fallback encoding | 302 # check for fallback encoding |