Mercurial > hg
comparison mercurial/commands.py @ 4478:b2b55acbacdd
Add support for url#id syntax
This allows you to do:
hg clone http://server/repo#stable
which is equivalent to:
hg clone -r stable http://server/repo
Future incoming, outgoing, and push commands will default to using
this id because it's recorded in the default path.
Other commands that accept URLs (push, pull, bundle, incoming, and
outgoing) also accept this syntax.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 01 Jun 2007 18:40:14 -0500 |
parents | 08ae451148b2 |
children | 649dd2492ae5 |
comparison
equal
deleted
inserted
replaced
4477:6cbfa740c129 | 4478:b2b55acbacdd |
---|---|
334 if p not in seen: | 334 if p not in seen: |
335 seen[p] = 1 | 335 seen[p] = 1 |
336 visit.append(p) | 336 visit.append(p) |
337 else: | 337 else: |
338 setremoteconfig(ui, opts) | 338 setremoteconfig(ui, opts) |
339 dest = ui.expandpath(dest or 'default-push', dest or 'default') | 339 dest, revs = cmdutil.parseurl( |
340 ui.expandpath(dest or 'default-push', dest or 'default'), revs) | |
340 other = hg.repository(ui, dest) | 341 other = hg.repository(ui, dest) |
341 o = repo.findoutgoing(other, force=opts['force']) | 342 o = repo.findoutgoing(other, force=opts['force']) |
342 | 343 |
343 if revs: | 344 if revs: |
344 cg = repo.changegroupsubset(o, revs, 'bundle') | 345 cg = repo.changegroupsubset(o, revs, 'bundle') |
405 .hg/hgrc and working directory will be created on the remote side. | 406 .hg/hgrc and working directory will be created on the remote side. |
406 Look at the help text for the pull command for important details | 407 Look at the help text for the pull command for important details |
407 about ssh:// URLs. | 408 about ssh:// URLs. |
408 """ | 409 """ |
409 setremoteconfig(ui, opts) | 410 setremoteconfig(ui, opts) |
410 hg.clone(ui, ui.expandpath(source), dest, | 411 hg.clone(ui, source, dest, |
411 pull=opts['pull'], | 412 pull=opts['pull'], |
412 stream=opts['uncompressed'], | 413 stream=opts['uncompressed'], |
413 rev=opts['rev'], | 414 rev=opts['rev'], |
414 update=not opts['noupdate']) | 415 update=not opts['noupdate']) |
415 | 416 |
1586 For remote repository, using --bundle avoids downloading the changesets | 1587 For remote repository, using --bundle avoids downloading the changesets |
1587 twice if the incoming is followed by a pull. | 1588 twice if the incoming is followed by a pull. |
1588 | 1589 |
1589 See pull for valid source format details. | 1590 See pull for valid source format details. |
1590 """ | 1591 """ |
1591 source = ui.expandpath(source) | 1592 source, revs = cmdutil.parseurl(ui.expandpath(source), opts['rev']) |
1592 setremoteconfig(ui, opts) | 1593 setremoteconfig(ui, opts) |
1593 | 1594 |
1594 other = hg.repository(ui, source) | 1595 other = hg.repository(ui, source) |
1595 ui.status(_('comparing with %s\n') % source) | 1596 ui.status(_('comparing with %s\n') % source) |
1596 revs = None | 1597 if revs: |
1597 if opts['rev']: | |
1598 if 'lookup' in other.capabilities: | 1598 if 'lookup' in other.capabilities: |
1599 revs = [other.lookup(rev) for rev in opts['rev']] | 1599 revs = [other.lookup(rev) for rev in revs] |
1600 else: | 1600 else: |
1601 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") | 1601 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") |
1602 raise util.Abort(error) | 1602 raise util.Abort(error) |
1603 incoming = repo.findincoming(other, heads=revs, force=opts["force"]) | 1603 incoming = repo.findincoming(other, heads=revs, force=opts["force"]) |
1604 if not incoming: | 1604 if not incoming: |
1889 the default push location. These are the changesets that would be pushed | 1889 the default push location. These are the changesets that would be pushed |
1890 if a push was requested. | 1890 if a push was requested. |
1891 | 1891 |
1892 See pull for valid destination format details. | 1892 See pull for valid destination format details. |
1893 """ | 1893 """ |
1894 dest = ui.expandpath(dest or 'default-push', dest or 'default') | 1894 dest, revs = cmdutil.parseurl( |
1895 ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev']) | |
1895 setremoteconfig(ui, opts) | 1896 setremoteconfig(ui, opts) |
1896 revs = None | 1897 if revs: |
1897 if opts['rev']: | 1898 revs = [repo.lookup(rev) for rev in revs] |
1898 revs = [repo.lookup(rev) for rev in opts['rev']] | |
1899 | 1899 |
1900 other = hg.repository(ui, dest) | 1900 other = hg.repository(ui, dest) |
1901 ui.status(_('comparing with %s\n') % dest) | 1901 ui.status(_('comparing with %s\n') % dest) |
1902 o = repo.findoutgoing(other, force=opts['force']) | 1902 o = repo.findoutgoing(other, force=opts['force']) |
1903 if not o: | 1903 if not o: |
1987 repositories or to bundle files (as created by 'hg bundle' or | 1987 repositories or to bundle files (as created by 'hg bundle' or |
1988 'hg incoming --bundle'). The static-http:// protocol, albeit slow, | 1988 'hg incoming --bundle'). The static-http:// protocol, albeit slow, |
1989 allows access to a Mercurial repository where you simply use a web | 1989 allows access to a Mercurial repository where you simply use a web |
1990 server to publish the .hg directory as static content. | 1990 server to publish the .hg directory as static content. |
1991 | 1991 |
1992 An optional identifier after # indicates a particular branch, tag, | |
1993 or changeset to pull. | |
1994 | |
1992 Some notes about using SSH with Mercurial: | 1995 Some notes about using SSH with Mercurial: |
1993 - SSH requires an accessible shell account on the destination machine | 1996 - SSH requires an accessible shell account on the destination machine |
1994 and a copy of hg in the remote path or specified with as remotecmd. | 1997 and a copy of hg in the remote path or specified with as remotecmd. |
1995 - path is relative to the remote user's home directory by default. | 1998 - path is relative to the remote user's home directory by default. |
1996 Use an extra slash at the start of a path to specify an absolute path: | 1999 Use an extra slash at the start of a path to specify an absolute path: |
2002 Host * | 2005 Host * |
2003 Compression yes | 2006 Compression yes |
2004 Alternatively specify "ssh -C" as your ssh command in your hgrc or | 2007 Alternatively specify "ssh -C" as your ssh command in your hgrc or |
2005 with the --ssh command line option. | 2008 with the --ssh command line option. |
2006 """ | 2009 """ |
2007 source = ui.expandpath(source) | 2010 source, revs = cmdutil.parseurl(ui.expandpath(source), opts['rev']) |
2008 setremoteconfig(ui, opts) | 2011 setremoteconfig(ui, opts) |
2009 | 2012 |
2010 other = hg.repository(ui, source) | 2013 other = hg.repository(ui, source) |
2011 ui.status(_('pulling from %s\n') % (source)) | 2014 ui.status(_('pulling from %s\n') % (source)) |
2012 revs = None | 2015 if revs: |
2013 if opts['rev']: | |
2014 if 'lookup' in other.capabilities: | 2016 if 'lookup' in other.capabilities: |
2015 revs = [other.lookup(rev) for rev in opts['rev']] | 2017 revs = [other.lookup(rev) for rev in revs] |
2016 else: | 2018 else: |
2017 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") | 2019 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") |
2018 raise util.Abort(error) | 2020 raise util.Abort(error) |
2021 | |
2019 modheads = repo.pull(other, heads=revs, force=opts['force']) | 2022 modheads = repo.pull(other, heads=revs, force=opts['force']) |
2020 return postincoming(ui, repo, modheads, opts['update']) | 2023 return postincoming(ui, repo, modheads, opts['update']) |
2021 | 2024 |
2022 def push(ui, repo, dest=None, **opts): | 2025 def push(ui, repo, dest=None, **opts): |
2023 """push changes to the specified destination | 2026 """push changes to the specified destination |
2038 local/filesystem/path (or file://local/filesystem/path) | 2041 local/filesystem/path (or file://local/filesystem/path) |
2039 ssh://[user@]host[:port]/[path] | 2042 ssh://[user@]host[:port]/[path] |
2040 http://[user@]host[:port]/[path] | 2043 http://[user@]host[:port]/[path] |
2041 https://[user@]host[:port]/[path] | 2044 https://[user@]host[:port]/[path] |
2042 | 2045 |
2046 An optional identifier after # indicates a particular branch, tag, | |
2047 or changeset to push. | |
2048 | |
2043 Look at the help text for the pull command for important details | 2049 Look at the help text for the pull command for important details |
2044 about ssh:// URLs. | 2050 about ssh:// URLs. |
2045 | 2051 |
2046 Pushing to http:// and https:// URLs is only possible, if this | 2052 Pushing to http:// and https:// URLs is only possible, if this |
2047 feature is explicitly enabled on the remote Mercurial server. | 2053 feature is explicitly enabled on the remote Mercurial server. |
2048 """ | 2054 """ |
2049 dest = ui.expandpath(dest or 'default-push', dest or 'default') | 2055 dest, revs = cmdutil.parseurl( |
2056 ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev']) | |
2050 setremoteconfig(ui, opts) | 2057 setremoteconfig(ui, opts) |
2051 | 2058 |
2052 other = hg.repository(ui, dest) | 2059 other = hg.repository(ui, dest) |
2053 ui.status('pushing to %s\n' % (dest)) | 2060 ui.status('pushing to %s\n' % (dest)) |
2054 revs = None | 2061 if revs: |
2055 if opts['rev']: | 2062 revs = [repo.lookup(rev) for rev in revs] |
2056 revs = [repo.lookup(rev) for rev in opts['rev']] | |
2057 r = repo.push(other, opts['force'], revs=revs) | 2063 r = repo.push(other, opts['force'], revs=revs) |
2058 return r == 0 | 2064 return r == 0 |
2059 | 2065 |
2060 def rawcommit(ui, repo, *pats, **opts): | 2066 def rawcommit(ui, repo, *pats, **opts): |
2061 """raw commit interface (DEPRECATED) | 2067 """raw commit interface (DEPRECATED) |