diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -5112,7 +5112,13 @@ def pull(ui, repo, source="default", **o if revs: try: - revs = [other.lookup(rev) for rev in revs] + oldrevs = revs + revs = [] # actually, nodes + for r in oldrevs: + node = other.lookup(r) + revs.append(node) + if r == checkout: + checkout = node except error.CapabilityError: err = _("other repository doesn't support revision lookup, " "so a rev cannot be specified.") @@ -5122,7 +5128,7 @@ def pull(ui, repo, source="default", **o force=opts.get('force'), bookmarks=opts.get('bookmark', ())).cgresult if checkout: - checkout = str(repo.changelog.rev(other.lookup(checkout))) + checkout = str(repo.changelog.rev(checkout)) repo._subtoppath = source try: ret = postincoming(ui, repo, modheads, opts.get('update'), checkout) diff --git a/tests/test-pull-r.t b/tests/test-pull-r.t --- a/tests/test-pull-r.t +++ b/tests/test-pull-r.t @@ -101,4 +101,44 @@ This used to abort: received changelog g $ hg pull -qr 1 ../repo +Test race condition with -r and -U (issue4707) + +We pull '-U -r ' and the name change right after/during the changegroup emission. +We use http because http is better is our racy-est option. + + + $ echo babar > ../repo/jungle + $ cat < ../repo/.hg/hgrc + > [hooks] + > outgoing.makecommit = hg ci -Am 'racy commit'; echo committed in pull-race + > EOF + $ hg -R ../repo serve -p $HGPORT2 -d --pid-file=../repo.pid + $ cat ../repo.pid >> $DAEMON_PIDS + $ hg pull --rev default --update http://localhost:$HGPORT2/ + pulling from http://localhost:$HGPORT2/ + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files (+1 heads) + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg log -G + @ changeset: 2:effea6de0384 + | tag: tip + | parent: 0:bbd179dfa0a7 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: add bar + | + | o changeset: 1:ed1b79f46b9a + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: change foo + | + o changeset: 0:bbd179dfa0a7 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add foo + + $ cd ..