##// END OF EJS Templates
typing: lock in correct changes from pytype 2023.04.11 -> 2023.06.16...
typing: lock in correct changes from pytype 2023.04.11 -> 2023.06.16 There were a handful of other changes to the pyi files generated when updating pytype locally (and jumping from python 3.8.0 to python 3.10.11), but they were not as clear (e.g. the embedded type in a list changing from `nothing` to `Any` or similar). These looked obviously correct, and agreed with PyCharm's thoughts on the signatures. Oddly, even though pytype starting inferring `obsutil._getfilteredreason()` as returning bytes, it (correctly) complained about the None path when it was typed that way. Instead, raise a ProgrammingError if an unhandled fate is calculated. (Currently, all possibilities are handled, so this isn't reachable unless another fate is added in the future.)

File last commit:

r51668:3c8a31be default
r52708:460e8048 default
Show More
bookflow.py
125 lines | 3.7 KiB | text/x-python | PythonLexer
bookflow: new extension for bookmark-based branching...
r40869 """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 mercurial.i18n import _
from mercurial import (
bookmarks,
commands,
error,
extensions,
registrar,
)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 MY_NAME = b'bookflow'
bookflow: new extension for bookmark-based branching...
r40869
configtable = {}
configitem = registrar.configitem(configtable)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 configitem(MY_NAME, b'protect', [b'@'])
configitem(MY_NAME, b'require-bookmark', True)
configitem(MY_NAME, b'enable-branches', False)
bookflow: new extension for bookmark-based branching...
r40869
cmdtable = {}
command = registrar.command(cmdtable)
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 def commit_hook(ui, repo, **kwargs):
active = repo._bookmarks.active
if active:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if active in ui.configlist(MY_NAME, b'protect'):
bookflow: new extension for bookmark-based branching...
r40869 raise error.Abort(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 _(b'cannot commit, bookmark %s is protected') % active
Augie Fackler
formatting: blacken the codebase...
r43346 )
bookflow: new extension for bookmark-based branching...
r40869 if not cwd_at_bookmark(repo, active):
raise error.Abort(
Augie Fackler
formatting: blacken the codebase...
r43346 _(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'cannot commit, working directory out of sync with active bookmark'
Augie Fackler
formatting: blacken the codebase...
r43346 ),
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 hint=_(b"run 'hg up %s'") % active,
Augie Fackler
formatting: blacken the codebase...
r43346 )
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif ui.configbool(MY_NAME, b'require-bookmark', True):
raise error.Abort(_(b'cannot commit without an active bookmark'))
bookflow: new extension for bookmark-based branching...
r40869 return 0
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 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
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 def bookmarks_addbookmarks(
Augie Fackler
formatting: blacken the codebase...
r43346 orig, repo, tr, names, rev=None, force=False, inactive=False
):
bookflow: new extension for bookmark-based branching...
r40869 if not rev:
marks = repo._bookmarks
for name in names:
if name in marks:
Augie Fackler
formatting: blacken the codebase...
r43346 raise error.Abort(
_(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"bookmark %s already exists, to move use the --rev option"
Augie Fackler
formatting: blacken the codebase...
r43346 )
% name
)
bookflow: new extension for bookmark-based branching...
r40869 return orig(repo, tr, names, rev, force, inactive)
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 def commands_commit(orig, ui, repo, *args, **opts):
commit_hook(ui, repo)
return orig(ui, repo, *args, **opts)
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 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):
Augie Fackler
formatting: blacken the codebase...
r43346 ui.warn(
_(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"working directory out of sync with active bookmark, run "
b"'hg up %s'"
Augie Fackler
formatting: blacken the codebase...
r43346 )
% active
)
bookflow: new extension for bookmark-based branching...
r40869 return rc
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 def commands_branch(orig, ui, repo, label=None, **opts):
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 if label and not opts.get('clean') and not opts.get('rev'):
bookflow: new extension for bookmark-based branching...
r40869 raise error.Abort(
Augie Fackler
formatting: blacken the codebase...
r43346 _(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"creating named branches is disabled and you should use bookmarks"
Augie Fackler
formatting: blacken the codebase...
r43346 ),
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 hint=b"see 'hg help bookflow'",
Augie Fackler
formatting: blacken the codebase...
r43346 )
bookflow: new extension for bookmark-based branching...
r40869 return orig(ui, repo, label, **opts)
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 def cwd_at_bookmark(repo, mark):
mark_id = repo._bookmarks[mark]
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 cur_id = repo.lookup(b'.')
bookflow: new extension for bookmark-based branching...
r40869 return cur_id == mark_id
Augie Fackler
formatting: blacken the codebase...
r43346
bookflow: new extension for bookmark-based branching...
r40869 def uisetup(ui):
wrapfunction: use sysstr instead of bytes as argument in "bookflow"...
r51668 extensions.wrapfunction(bookmarks, 'update', bookmarks_update)
extensions.wrapfunction(bookmarks, 'addbookmarks', bookmarks_addbookmarks)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 extensions.wrapcommand(commands.table, b'commit', commands_commit)
extensions.wrapcommand(commands.table, b'pull', commands_pull)
if not ui.configbool(MY_NAME, b'enable-branches'):
extensions.wrapcommand(commands.table, b'branch', commands_branch)