# HG changeset patch # User Alexis S. L. Carvalho # Date 2007-08-27 04:44:35 # Node ID cbe6e263357b28eb2c06ee55410ec4c9410125e7 # Parent 8ede77c2d008fdb71454a25714b86f538c2bc0bc parseurl: also return the revision after the "#"; add a test diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -462,10 +462,10 @@ def parseurl(url, revs): '''parse url#branch, returning url, branch + revs''' if '#' not in url: - return url, (revs or None) + return url, (revs or None), None url, rev = url.split('#', 1) - return url, revs + [rev] + return url, revs + [rev], rev def revpair(repo, revs): '''return pair of nodes, given list of revisions. second item can diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -324,7 +324,7 @@ def bundle(ui, repo, fname, dest=None, * visit.append(p) else: cmdutil.setremoteconfig(ui, opts) - dest, revs = cmdutil.parseurl( + dest, revs, checkout = cmdutil.parseurl( ui.expandpath(dest or 'default-push', dest or 'default'), revs) other = hg.repository(ui, dest) o = repo.findoutgoing(other, force=opts['force']) @@ -1491,7 +1491,7 @@ def identify(ui, repo, source=None, output = [] if source: - source, revs = cmdutil.parseurl(ui.expandpath(source), []) + source, revs, checkout = cmdutil.parseurl(ui.expandpath(source), []) srepo = hg.repository(ui, source) if not rev and revs: rev = revs[0] @@ -1649,7 +1649,8 @@ def incoming(ui, repo, source="default", See pull for valid source format details. """ - source, revs = cmdutil.parseurl(ui.expandpath(source), opts['rev']) + source, revs, checkout = cmdutil.parseurl(ui.expandpath(source), + opts['rev']) cmdutil.setremoteconfig(ui, opts) other = hg.repository(ui, source) @@ -1952,7 +1953,7 @@ def outgoing(ui, repo, dest=None, **opts See pull for valid destination format details. """ - dest, revs = cmdutil.parseurl( + dest, revs, checkout = cmdutil.parseurl( ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev']) cmdutil.setremoteconfig(ui, opts) if revs: @@ -2074,7 +2075,8 @@ def pull(ui, repo, source="default", **o Alternatively specify "ssh -C" as your ssh command in your hgrc or with the --ssh command line option. """ - source, revs = cmdutil.parseurl(ui.expandpath(source), opts['rev']) + source, revs, checkout = cmdutil.parseurl(ui.expandpath(source), + opts['rev']) cmdutil.setremoteconfig(ui, opts) other = hg.repository(ui, source) @@ -2119,7 +2121,7 @@ def push(ui, repo, dest=None, **opts): Pushing to http:// and https:// URLs is only possible, if this feature is explicitly enabled on the remote Mercurial server. """ - dest, revs = cmdutil.parseurl( + dest, revs, checkout = cmdutil.parseurl( ui.expandpath(dest or 'default-push', dest or 'default'), opts['rev']) cmdutil.setremoteconfig(ui, opts) diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -99,7 +99,7 @@ def clone(ui, source, dest=None, pull=Fa """ origsource = source - source, rev = cmdutil.parseurl(ui.expandpath(source), rev) + source, rev, checkout = cmdutil.parseurl(ui.expandpath(source), rev) if isinstance(source, str): src_repo = repository(ui, source) diff --git a/tests/test-url-rev b/tests/test-url-rev new file mode 100755 --- /dev/null +++ b/tests/test-url-rev @@ -0,0 +1,50 @@ +#!/bin/sh +# test basic functionality of url#rev syntax + +hg init repo +cd repo +echo a > a +hg ci -qAm 'add a' -d '0 0' +hg branch foo +echo >> a +hg ci -m 'change a' -d '0 0' +cd .. + +echo '% clone repo#foo' +hg clone 'repo#foo' clone +hg --cwd clone heads +sed -e 's/default.*#/default = #/' clone/.hg/hgrc +echo + +echo '% changing original repo' +cd repo +echo >> a +hg ci -m 'new head of branch foo' -d '0 0' +hg up -qC default +echo bar > bar +hg ci -qAm 'add bar' -d '0 0' +hg log +echo + +echo '% outgoing' +hg -q outgoing '../clone#foo' +echo + +echo '% push' +hg -q push '../clone#foo' +hg --cwd ../clone heads +cd .. +echo + +echo '% rolling back' +cd clone +hg rollback + +echo '% incoming' +hg -q incoming + +echo '% pull' +hg -q pull +hg heads +echo + diff --git a/tests/test-url-rev.out b/tests/test-url-rev.out new file mode 100644 --- /dev/null +++ b/tests/test-url-rev.out @@ -0,0 +1,69 @@ +marked working directory as branch foo +% clone repo#foo +requesting all changes +adding changesets +adding manifests +adding file changes +added 2 changesets with 2 changes to 1 files +1 files updated, 0 files merged, 0 files removed, 0 files unresolved +changeset: 1:cd2a86ecc814 +branch: foo +tag: tip +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: change a + +[paths] +default = #foo + +% changing original repo +changeset: 3:4cd725637392 +tag: tip +parent: 0:1f0dee641bb7 +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: add bar + +changeset: 2:faba9097cad4 +branch: foo +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: new head of branch foo + +changeset: 1:cd2a86ecc814 +branch: foo +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: change a + +changeset: 0:1f0dee641bb7 +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: add a + + +% outgoing +2:faba9097cad4 + +% push +changeset: 2:faba9097cad4 +branch: foo +tag: tip +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: new head of branch foo + + +% rolling back +rolling back last transaction +% incoming +2:faba9097cad4 +% pull +changeset: 2:faba9097cad4 +branch: foo +tag: tip +user: test +date: Thu Jan 01 00:00:00 1970 +0000 +summary: new head of branch foo + +