pull: list bookmarks before pulling changesets (
issue3873)
Consider a bookmark B that exists both locally and remotely. If B is updated
remotely, and then a pull is performed where the pull set contains the new
location of B, the bookmark is updated locally. However, if remote B is
updated in the middle of a pull to a location not in the pull set, the
bookmark won't be updated locally at all.
To fix this, list bookmarks before pulling in changesets, not after. This
still leaves a race open if B gets moved in between listing bookmarks and
pulling in changesets, but the race window is much smaller. Fixing the race
properly would require a bundle format upgrade.
test-hook.t's output changes because we no longer do two listkeys calls during
pull, just one.
test-pull-http.t's output changes because we now search for bookmarks before
searching for changes.
# this is hack to make sure no escape characters are inserted into the output
import os
if 'TERM' in os.environ:
del os.environ['TERM']
import doctest
import mercurial.util
doctest.testmod(mercurial.util)
# Only run doctests for the current platform
doctest.testmod(mercurial.util.platform)
import mercurial.changelog
doctest.testmod(mercurial.changelog)
import mercurial.dagparser
doctest.testmod(mercurial.dagparser, optionflags=doctest.NORMALIZE_WHITESPACE)
import mercurial.match
doctest.testmod(mercurial.match)
import mercurial.store
doctest.testmod(mercurial.store)
import mercurial.ui
doctest.testmod(mercurial.ui)
import mercurial.url
doctest.testmod(mercurial.url)
import mercurial.encoding
doctest.testmod(mercurial.encoding)
import mercurial.hgweb.hgwebdir_mod
doctest.testmod(mercurial.hgweb.hgwebdir_mod)
import hgext.convert.cvsps
doctest.testmod(hgext.convert.cvsps)
import mercurial.revset
doctest.testmod(mercurial.revset)
import mercurial.minirst
doctest.testmod(mercurial.minirst)
import mercurial.templatefilters
doctest.testmod(mercurial.templatefilters)