Mercurial > hg
view hgext/bookflow.py @ 41682:1ab6f5df263e
test: stabilize test-wireproto-exchangev2.t flaky output
When running the test suite with multiple processes, we often get flaky
outputs, like here: https://ci.octobus.net/job/MercurialPy2/267/console
```
- received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
add changeset cd2534766bec
add changeset e96ae20f4188
add changeset caa2a465451d
+ received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
```
Instead of simply sorting the clone and pull output, I saved the output in a
separate file and checked the `received frame` messages on one side and then
the rest of the output on the other side. This way we conserve the order of
messages as it seems important.
Differential Revision: https://phab.mercurial-scm.org/D5897
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 08 Feb 2019 18:26:35 +0100 |
parents | b53c5651fcf6 |
children | 2372284d9457 |
line wrap: on
line source
"""implements bookmark-based branching (EXPERIMENTAL) - Disables creation of new branches (config: enable_branches=False). - Requires an active bookmark on commit (config: require_bookmark=True). - Doesn't move the active bookmark on update, only on commit. - Requires '--rev' for moving an existing bookmark. - Protects special bookmarks (config: protect=@). flow related commands :hg book NAME: create a new bookmark :hg book NAME -r REV: move bookmark to revision (fast-forward) :hg up|co NAME: switch to bookmark :hg push -B .: push active bookmark """ from __future__ import absolute_import from mercurial.i18n import _ from mercurial import ( bookmarks, commands, error, extensions, registrar, ) MY_NAME = 'bookflow' configtable = {} configitem = registrar.configitem(configtable) configitem(MY_NAME, 'protect', ['@']) configitem(MY_NAME, 'require-bookmark', True) configitem(MY_NAME, 'enable-branches', False) cmdtable = {} command = registrar.command(cmdtable) def commit_hook(ui, repo, **kwargs): active = repo._bookmarks.active if active: if active in ui.configlist(MY_NAME, 'protect'): raise error.Abort( _('cannot commit, bookmark %s is protected') % active) if not cwd_at_bookmark(repo, active): raise error.Abort( _('cannot commit, working directory out of sync with active bookmark'), hint=_("run 'hg up %s'") % active) elif ui.configbool(MY_NAME, 'require-bookmark', True): raise error.Abort(_('cannot commit without an active bookmark')) return 0 def bookmarks_update(orig, repo, parents, node): if len(parents) == 2: # called during commit return orig(repo, parents, node) else: # called during update return False def bookmarks_addbookmarks( orig, repo, tr, names, rev=None, force=False, inactive=False): if not rev: marks = repo._bookmarks for name in names: if name in marks: raise error.Abort(_( "bookmark %s already exists, to move use the --rev option" ) % name) return orig(repo, tr, names, rev, force, inactive) def commands_commit(orig, ui, repo, *args, **opts): commit_hook(ui, repo) return orig(ui, repo, *args, **opts) def commands_pull(orig, ui, repo, *args, **opts): rc = orig(ui, repo, *args, **opts) active = repo._bookmarks.active if active and not cwd_at_bookmark(repo, active): ui.warn(_( "working directory out of sync with active bookmark, run " "'hg up %s'" ) % active) return rc def commands_branch(orig, ui, repo, label=None, **opts): if label and not opts.get(r'clean') and not opts.get(r'rev'): raise error.Abort( _("creating named branches is disabled and you should use bookmarks"), hint="see 'hg help bookflow'") return orig(ui, repo, label, **opts) def cwd_at_bookmark(repo, mark): mark_id = repo._bookmarks[mark] cur_id = repo.lookup('.') return cur_id == mark_id def uisetup(ui): extensions.wrapfunction(bookmarks, 'update', bookmarks_update) extensions.wrapfunction(bookmarks, 'addbookmarks', bookmarks_addbookmarks) extensions.wrapcommand(commands.table, 'commit', commands_commit) extensions.wrapcommand(commands.table, 'pull', commands_pull) if not ui.configbool(MY_NAME, 'enable-branches'): extensions.wrapcommand(commands.table, 'branch', commands_branch)