Mercurial > hg
view hgext/hooklib/__init__.py @ 51723:9367571fea21
cext: correct the argument handling of `b85encode()`
The type stub indicated that this argument is `Optional`, which implies None is
allowed. I don't see in the documentation where that's the case for `i`[1], and
trying it in `hg debugshell` resulted in the method failing with a TypeError. I
guess it was typed as an `int` argument because the `p` format unit wasn't added
until Python 3.3[2].
In any event, 2 clients in core (`pvec` and `obsolete`) call this with no
argument supplied, and `mdiff` calls it with True. So I guess we've avoided the
None arg case, and when no arg is supplied, it defaults to the 0 initialization
of the `pad` variable in C. Since the `p` format unit accepts both `int` and
None, as well as `bool`, I'm not bothering to bump the module version- this code
is more permissive than it was, in addition to being more correct.
Interestingly, when I first imported the `cext` and `pure` methods in the same
manner as the previous commit, it dropped the `Optional` part of the argument
type when generating `util.pyi`. No idea why.
[1] https://docs.python.org/3/c-api/arg.html#numbers
[2] https://docs.python.org/3/c-api/arg.html#other-objects
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 20 Jul 2024 01:55:09 -0400 |
parents | 6000f5b25c9b |
children | f4733654f144 |
line wrap: on
line source
"""collection of simple hooks for common tasks (EXPERIMENTAL) This extension provides a number of simple hooks to handle issues commonly found in repositories with many contributors: - email notification when changesets move from draft to public phase - email notification when changesets are obsoleted - enforcement of draft phase for all incoming changesets - enforcement of a no-branch-merge policy - enforcement of a no-multiple-heads policy The implementation of the hooks is subject to change, e.g. whether to implement them as individual hooks or merge them into the notify extension as option. The functionality itself is planned to be supported long-term. """ from . import ( changeset_obsoleted, changeset_published, ) # configtable is only picked up from the "top-level" module of the extension, # so expand it here to ensure all items are properly loaded configtable = {} configtable.update(changeset_published.configtable) configtable.update(changeset_obsoleted.configtable)