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 |
1581 For remote repository, using --bundle avoids downloading the changesets |
1582 For remote repository, using --bundle avoids downloading the changesets |
1582 twice if the incoming is followed by a pull. |
1583 twice if the incoming is followed by a pull. |
1583 |
1584 |
1584 See pull for valid source format details. |
1585 See pull for valid source format details. |
1585 """ |
1586 """ |
1586 source = ui.expandpath(source) |
1587 source, revs = cmdutil.parseurl(ui.expandpath(source), opts['rev']) |
1587 setremoteconfig(ui, opts) |
1588 setremoteconfig(ui, opts) |
1588 |
1589 |
1589 other = hg.repository(ui, source) |
1590 other = hg.repository(ui, source) |
1590 ui.status(_('comparing with %s\n') % source) |
1591 ui.status(_('comparing with %s\n') % source) |
1591 incoming = repo.findincoming(other, force=opts["force"]) |
1592 if revs: |
|
1593 if 'lookup' in other.capabilities: |
|
1594 revs = [other.lookup(rev) for rev in revs] |
|
1595 else: |
|
1596 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") |
|
1597 raise util.Abort(error) |
|
1598 incoming = repo.findincoming(other, heads=revs, force=opts["force"]) |
1592 if not incoming: |
1599 if not incoming: |
1593 try: |
1600 try: |
1594 os.unlink(opts["bundle"]) |
1601 os.unlink(opts["bundle"]) |
1595 except: |
1602 except: |
1596 pass |
1603 pass |
1600 cleanup = None |
1607 cleanup = None |
1601 try: |
1608 try: |
1602 fname = opts["bundle"] |
1609 fname = opts["bundle"] |
1603 if fname or not other.local(): |
1610 if fname or not other.local(): |
1604 # create a bundle (uncompressed if other repo is not local) |
1611 # create a bundle (uncompressed if other repo is not local) |
1605 cg = other.changegroup(incoming, "incoming") |
1612 if revs is None: |
|
1613 cg = other.changegroup(incoming, "incoming") |
|
1614 else: |
|
1615 if 'changegroupsubset' not in other.capabilities: |
|
1616 raise util.Abort(_("Partial incoming cannot be done because other repository doesn't support changegroupsubset.")) |
|
1617 cg = other.changegroupsubset(incoming, revs, 'incoming') |
1606 bundletype = other.local() and "HG10BZ" or "HG10UN" |
1618 bundletype = other.local() and "HG10BZ" or "HG10UN" |
1607 fname = cleanup = changegroup.writebundle(cg, fname, bundletype) |
1619 fname = cleanup = changegroup.writebundle(cg, fname, bundletype) |
1608 # keep written bundle? |
1620 # keep written bundle? |
1609 if opts["bundle"]: |
1621 if opts["bundle"]: |
1610 cleanup = None |
1622 cleanup = None |
1611 if not other.local(): |
1623 if not other.local(): |
1612 # use the created uncompressed bundlerepo |
1624 # use the created uncompressed bundlerepo |
1613 other = bundlerepo.bundlerepository(ui, repo.root, fname) |
1625 other = bundlerepo.bundlerepository(ui, repo.root, fname) |
1614 |
1626 |
1615 revs = None |
|
1616 if opts['rev']: |
|
1617 revs = [other.lookup(rev) for rev in opts['rev']] |
|
1618 o = other.changelog.nodesbetween(incoming, revs)[0] |
1627 o = other.changelog.nodesbetween(incoming, revs)[0] |
1619 if opts['newest_first']: |
1628 if opts['newest_first']: |
1620 o.reverse() |
1629 o.reverse() |
1621 displayer = cmdutil.show_changeset(ui, other, opts) |
1630 displayer = cmdutil.show_changeset(ui, other, opts) |
1622 for n in o: |
1631 for n in o: |
1875 the default push location. These are the changesets that would be pushed |
1884 the default push location. These are the changesets that would be pushed |
1876 if a push was requested. |
1885 if a push was requested. |
1877 |
1886 |
1878 See pull for valid destination format details. |
1887 See pull for valid destination format details. |
1879 """ |
1888 """ |
1880 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
1889 dest, revs = cmdutil.parseurl( |
|
1890 ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev']) |
1881 setremoteconfig(ui, opts) |
1891 setremoteconfig(ui, opts) |
1882 revs = None |
1892 if revs: |
1883 if opts['rev']: |
1893 revs = [repo.lookup(rev) for rev in revs] |
1884 revs = [repo.lookup(rev) for rev in opts['rev']] |
|
1885 |
1894 |
1886 other = hg.repository(ui, dest) |
1895 other = hg.repository(ui, dest) |
1887 ui.status(_('comparing with %s\n') % dest) |
1896 ui.status(_('comparing with %s\n') % dest) |
1888 o = repo.findoutgoing(other, force=opts['force']) |
1897 o = repo.findoutgoing(other, force=opts['force']) |
1889 if not o: |
1898 if not o: |
1973 repositories or to bundle files (as created by 'hg bundle' or |
1982 repositories or to bundle files (as created by 'hg bundle' or |
1974 'hg incoming --bundle'). The static-http:// protocol, albeit slow, |
1983 'hg incoming --bundle'). The static-http:// protocol, albeit slow, |
1975 allows access to a Mercurial repository where you simply use a web |
1984 allows access to a Mercurial repository where you simply use a web |
1976 server to publish the .hg directory as static content. |
1985 server to publish the .hg directory as static content. |
1977 |
1986 |
|
1987 An optional identifier after # indicates a particular branch, tag, |
|
1988 or changeset to pull. |
|
1989 |
1978 Some notes about using SSH with Mercurial: |
1990 Some notes about using SSH with Mercurial: |
1979 - SSH requires an accessible shell account on the destination machine |
1991 - SSH requires an accessible shell account on the destination machine |
1980 and a copy of hg in the remote path or specified with as remotecmd. |
1992 and a copy of hg in the remote path or specified with as remotecmd. |
1981 - path is relative to the remote user's home directory by default. |
1993 - path is relative to the remote user's home directory by default. |
1982 Use an extra slash at the start of a path to specify an absolute path: |
1994 Use an extra slash at the start of a path to specify an absolute path: |
1988 Host * |
2000 Host * |
1989 Compression yes |
2001 Compression yes |
1990 Alternatively specify "ssh -C" as your ssh command in your hgrc or |
2002 Alternatively specify "ssh -C" as your ssh command in your hgrc or |
1991 with the --ssh command line option. |
2003 with the --ssh command line option. |
1992 """ |
2004 """ |
1993 source = ui.expandpath(source) |
2005 source, revs = cmdutil.parseurl(ui.expandpath(source), opts['rev']) |
1994 setremoteconfig(ui, opts) |
2006 setremoteconfig(ui, opts) |
1995 |
2007 |
1996 other = hg.repository(ui, source) |
2008 other = hg.repository(ui, source) |
1997 ui.status(_('pulling from %s\n') % (source)) |
2009 ui.status(_('pulling from %s\n') % (source)) |
1998 revs = None |
2010 if revs: |
1999 if opts['rev']: |
|
2000 if 'lookup' in other.capabilities: |
2011 if 'lookup' in other.capabilities: |
2001 revs = [other.lookup(rev) for rev in opts['rev']] |
2012 revs = [other.lookup(rev) for rev in revs] |
2002 else: |
2013 else: |
2003 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") |
2014 error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.") |
2004 raise util.Abort(error) |
2015 raise util.Abort(error) |
|
2016 |
2005 modheads = repo.pull(other, heads=revs, force=opts['force']) |
2017 modheads = repo.pull(other, heads=revs, force=opts['force']) |
2006 return postincoming(ui, repo, modheads, opts['update']) |
2018 return postincoming(ui, repo, modheads, opts['update']) |
2007 |
2019 |
2008 def push(ui, repo, dest=None, **opts): |
2020 def push(ui, repo, dest=None, **opts): |
2009 """push changes to the specified destination |
2021 """push changes to the specified destination |
2024 local/filesystem/path (or file://local/filesystem/path) |
2036 local/filesystem/path (or file://local/filesystem/path) |
2025 ssh://[user@]host[:port]/[path] |
2037 ssh://[user@]host[:port]/[path] |
2026 http://[user@]host[:port]/[path] |
2038 http://[user@]host[:port]/[path] |
2027 https://[user@]host[:port]/[path] |
2039 https://[user@]host[:port]/[path] |
2028 |
2040 |
|
2041 An optional identifier after # indicates a particular branch, tag, |
|
2042 or changeset to push. |
|
2043 |
2029 Look at the help text for the pull command for important details |
2044 Look at the help text for the pull command for important details |
2030 about ssh:// URLs. |
2045 about ssh:// URLs. |
2031 |
2046 |
2032 Pushing to http:// and https:// URLs is only possible, if this |
2047 Pushing to http:// and https:// URLs is only possible, if this |
2033 feature is explicitly enabled on the remote Mercurial server. |
2048 feature is explicitly enabled on the remote Mercurial server. |
2034 """ |
2049 """ |
2035 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
2050 dest, revs = cmdutil.parseurl( |
|
2051 ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev']) |
2036 setremoteconfig(ui, opts) |
2052 setremoteconfig(ui, opts) |
2037 |
2053 |
2038 other = hg.repository(ui, dest) |
2054 other = hg.repository(ui, dest) |
2039 ui.status('pushing to %s\n' % (dest)) |
2055 ui.status('pushing to %s\n' % (dest)) |
2040 revs = None |
2056 if revs: |
2041 if opts['rev']: |
2057 revs = [repo.lookup(rev) for rev in revs] |
2042 revs = [repo.lookup(rev) for rev in opts['rev']] |
|
2043 r = repo.push(other, opts['force'], revs=revs) |
2058 r = repo.push(other, opts['force'], revs=revs) |
2044 return r == 0 |
2059 return r == 0 |
2045 |
2060 |
2046 def rawcommit(ui, repo, *pats, **opts): |
2061 def rawcommit(ui, repo, *pats, **opts): |
2047 """raw commit interface (DEPRECATED) |
2062 """raw commit interface (DEPRECATED) |