Mercurial > hg
annotate hgext/git/gitutil.py @ 50175:0ab92dabea6e
typing: add type hints to pycompat.maplist()
The typeshed hints define 5 overloads with an increasing number of parameters on
the passed function, and then a catchall that ignores the argument list on the
passed function and allows an `*iterators` arg. All of our uses are fulfilled
by the 1 function + 1 iterable overload, but add the second overload as a hint
in case it's needed in the future.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 21 Feb 2023 13:24:12 -0500 |
parents | de9ffb82ef4d |
children | f4733654f144 |
rev | line source |
---|---|
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 """utilities to assist in working with pygit2""" |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 |
49300
227124098e14
py3: use `x.hex()` instead of `pycompat.sysstr(node.hex(x))`
Manuel Jacob <me@manueljacob.de>
parents:
49290
diff
changeset
|
3 from mercurial.node import bin, sha1nodeconstants |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 |
44484
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
5 pygit2_module = None |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
6 |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
7 |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
8 def get_pygit2(): |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
9 global pygit2_module |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
10 if pygit2_module is None: |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
11 try: |
49849
de9ffb82ef4d
typing: suppress a bunch of potential import-error cases in extensions
Matt Harbison <matt_harbison@yahoo.com>
parents:
49300
diff
changeset
|
12 import pygit2 as pygit2_module # pytype: disable=import-error |
44484
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
13 |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
14 pygit2_module.InvalidSpecError |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
15 except (ImportError, AttributeError): |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
16 pass |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
17 return pygit2_module |
ec54b3d2af0b
git: don't fail import when pygit2 is not install
Martin von Zweigbergk <martinvonz@google.com>
parents:
44477
diff
changeset
|
18 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 |
45950
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
20 def pygit2_version(): |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
21 mod = get_pygit2() |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
22 v = "N/A" |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
23 |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
24 if mod: |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
25 try: |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
26 v = mod.__version__ |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
27 except AttributeError: |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
28 pass |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
29 |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
30 return b"(pygit2 %s)" % v.encode("utf-8") |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
31 |
c7c1efdfd4de
git: show the version of `pygit2` with verbose version output
Matt Harbison <matt_harbison@yahoo.com>
parents:
44484
diff
changeset
|
32 |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
33 def togitnode(n): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
34 """Wrapper to convert a Mercurial binary node to a unicode hexlified node. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
36 pygit2 and sqlite both need nodes as strings, not bytes. |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 """ |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
38 assert len(n) == 20 |
49300
227124098e14
py3: use `x.hex()` instead of `pycompat.sysstr(node.hex(x))`
Manuel Jacob <me@manueljacob.de>
parents:
49290
diff
changeset
|
39 return n.hex() |
44477
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
40 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
41 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 def fromgitnode(n): |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
43 """Opposite of togitnode.""" |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
44 assert len(n) == 40 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
45 return bin(n) |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
46 |
ad718271a9eb
git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
45950
diff
changeset
|
48 nullgit = togitnode(sha1nodeconstants.nullid) |