Upgraded 4 packages to upstream.

Upgraded dev-python/cached-property to version 1.5.1 on amd64
Upgraded dev-python/cffi to version 1.14.0-r2 on amd64
Upgraded dev-python/pycparser to version 2.20 on amd64
Upgraded dev-python/pygit2 to version 1.2.1 on amd64

BUG=chromium:1127371
TEST=sudo emerge -j pygit2

Cq-Depend: chromium:2406634
Change-Id: I3b8414ca00b5db73fe68541124cd1af3e2b8a4ea
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2404210
Tested-by: Allen Webb <allenwebb@google.com>
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Allen Webb <allenwebb@google.com>
diff --git a/dev-python/cached-property/Manifest b/dev-python/cached-property/Manifest
new file mode 100644
index 0000000..747064c
--- /dev/null
+++ b/dev-python/cached-property/Manifest
@@ -0,0 +1 @@
+DIST cached-property-1.5.1.tar.gz 12791 BLAKE2B dcc75564d3b1dbb2f34ea433f4a477b2fe0454047f1fb4825cc6350458bf09509cf970b308744d79eb3b17f96c04c606ad36327c7e24f0b13f412880d9ad2ab7 SHA512 61bbedb48336af7c0b465421eb4d3b6b48155cfe4fd6270ff49caefe0d80e40b50c4801a68a5564931d316e374b69112ad14f72687a015ce81aaeade6fcf9ce3
diff --git a/dev-python/cached-property/cached-property-1.5.1.ebuild b/dev-python/cached-property/cached-property-1.5.1.ebuild
new file mode 100644
index 0000000..2e8ca57
--- /dev/null
+++ b/dev-python/cached-property/cached-property-1.5.1.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{6..9} )
+
+inherit distutils-r1
+
+DESCRIPTION="A cached-property for decorating methods in classes"
+HOMEPAGE="https://github.com/pydanny/cached-property"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="*"
+
+DEPEND="test? ( dev-python/freezegun[${PYTHON_USEDEP}] )"
+
+distutils_enable_tests pytest
+
+python_prepare_all() {
+	# bug 638250
+	eapply "${FILESDIR}"/${PN}-1.5.1-test-failure.patch
+
+	distutils-r1_python_prepare_all
+}
+
+python_install_all() {
+	dodoc README.rst HISTORY.rst CONTRIBUTING.rst AUTHORS.rst
+	distutils-r1_python_install_all
+}
diff --git a/dev-python/cached-property/files/cached-property-1.5.1-test-failure.patch b/dev-python/cached-property/files/cached-property-1.5.1-test-failure.patch
new file mode 100644
index 0000000..03fabd2
--- /dev/null
+++ b/dev-python/cached-property/files/cached-property-1.5.1-test-failure.patch
@@ -0,0 +1,10 @@
+--- a/tests/test_cached_property.py
++++ b/tests/test_cached_property.py
+@@ -191,6 +191,7 @@
+         self.assert_cached(check, 2)
+         self.assert_cached(check, 2)
+ 
++    @unittest.skip("Gentoo Bug #638250")
+     def test_threads_ttl_expiry(self):
+         Check = CheckFactory(self.cached_property_factory(ttl=100000), threadsafe=True)
+         check = Check()
diff --git a/dev-python/cached-property/metadata.xml b/dev-python/cached-property/metadata.xml
new file mode 100644
index 0000000..d54a4c7
--- /dev/null
+++ b/dev-python/cached-property/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>cedk@gentoo.org</email>
+		<name>Cédric Krier</name>
+	</maintainer>
+	<maintainer type="project">
+		<email>python@gentoo.org</email>
+		<name>Python</name>
+	</maintainer>
+	<upstream>
+		<remote-id type="pypi">cached-property</remote-id>
+		<remote-id type="github">pydanny/cached-property</remote-id>
+	</upstream>
+</pkgmetadata>
diff --git a/dev-python/cffi/Manifest b/dev-python/cffi/Manifest
index e8fecd3..380fea6 100644
--- a/dev-python/cffi/Manifest
+++ b/dev-python/cffi/Manifest
@@ -1 +1 @@
-DIST cffi-1.11.4.tar.gz 436857 BLAKE2B 46b5d1adf4aca2a75ea02ba01ae934821d0e864accd9c355745a681d11a08ed34c33c473204c78ecb2113b2d59fbc762ca0607ff92f6cd2dc411907844bbdaf3 SHA512 184572ab8c1f7a72f00084c23894efe1691aa20f9e822a3f7184ebbed16e757586ac47e7f1d12dd7b14b4322bf5b88e35465dc3bc8b0caf0dc8e2b626a52615e
+DIST cffi-1.14.0.tar.gz 463065 BLAKE2B 4d1e8a92241db801848ef8bd05ea15a31c7f61ea426ce4da184aff00df786348d2c76de9dc48898c814478aed9750b665868df24ad39435062cd7e1c84163e52 SHA512 4c5451eeede1d48a8f4b40e25b845ad1863b8bf3bd39624e6c693c2800d89a13efedc4c43b37e317a035613bffc2e3fd5f7e583c46cb283cb5cb930356f86253
diff --git a/dev-python/cffi/cffi-1.11.4.ebuild b/dev-python/cffi/cffi-1.11.4.ebuild
deleted file mode 100644
index ed05407..0000000
--- a/dev-python/cffi/cffi-1.11.4.ebuild
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 1999-2018 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-# DO NOT ADD pypy to PYTHON_COMPAT
-# pypy bundles a modified version of cffi. Use python_gen_cond_dep instead.
-PYTHON_COMPAT=( python2_7 python3_{4,5,6} )
-
-inherit distutils-r1 toolchain-funcs
-
-DESCRIPTION="Foreign Function Interface for Python calling C code"
-HOMEPAGE="https://cffi.readthedocs.io/ https://pypi.org/project/cffi/"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0/${PV}"
-KEYWORDS="*"
-IUSE="doc test"
-
-RDEPEND="
-	virtual/libffi:=
-	dev-python/pycparser[${PYTHON_USEDEP}]"
-DEPEND="${RDEPEND}
-	virtual/pkgconfig
-	doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
-	test? ( dev-python/pytest[${PYTHON_USEDEP}] )"
-
-# Avoid race on _configtest.c (distutils/command/config.py:_gen_temp_sourcefile)
-DISTUTILS_IN_SOURCE_BUILD=1
-
-python_configure_all() {
-	tc-export PKG_CONFIG
-}
-
-python_compile_all() {
-	use doc && emake -C doc html
-}
-
-python_test() {
-	einfo "$PYTHONPATH"
-	$PYTHON -c "import _cffi_backend as backend" || die
-	PYTHONPATH="${PYTHONPATH}" \
-	py.test -x -v \
-		--ignore testing/test_zintegration.py \
-		--ignore testing/embedding \
-		c/ testing/ \
-		|| die "Testing failed with ${EPYTHON}"
-}
-
-python_install_all() {
-	use doc && local HTML_DOCS=( doc/build/html/. )
-	distutils-r1_python_install_all
-}
diff --git a/dev-python/cffi/cffi-1.14.0-r2.ebuild b/dev-python/cffi/cffi-1.14.0-r2.ebuild
new file mode 100644
index 0000000..4428f3b
--- /dev/null
+++ b/dev-python/cffi/cffi-1.14.0-r2.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+# DO NOT ADD pypy to PYTHON_COMPAT
+# pypy bundles a modified version of cffi. Use python_gen_cond_dep instead.
+DISTUTILS_USE_SETUPTOOLS=rdepend
+PYTHON_COMPAT=( python2_7 python3_{6,7,8,9} )
+
+inherit distutils-r1 toolchain-funcs
+
+DESCRIPTION="Foreign Function Interface for Python calling C code"
+HOMEPAGE="https://cffi.readthedocs.io/ https://pypi.org/project/cffi/"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0/${PV}"
+KEYWORDS="*"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+DEPEND="dev-libs/libffi:="
+RDEPEND="${DEPEND}
+	dev-python/pycparser[${PYTHON_USEDEP}]"
+BDEPEND="${RDEPEND}
+	virtual/pkgconfig
+	test? ( dev-python/pytest[${PYTHON_USEDEP}] )"
+
+distutils_enable_sphinx doc/source
+
+PATCHES=(
+	"${FILESDIR}"/cffi-0.14.0-g-line.patch
+)
+
+src_configure() {
+	tc-export PKG_CONFIG
+}
+
+python_test() {
+	"${EPYTHON}" -c "import _cffi_backend as backend" || die
+	pytest -x -vv \
+		--ignore testing/test_zintegration.py \
+		--ignore testing/embedding \
+		c/ testing/ \
+		|| die "Testing failed with ${EPYTHON}"
+}
diff --git a/dev-python/cffi/files/cffi-0.14.0-g-line.patch b/dev-python/cffi/files/cffi-0.14.0-g-line.patch
new file mode 100644
index 0000000..45a1099
--- /dev/null
+++ b/dev-python/cffi/files/cffi-0.14.0-g-line.patch
@@ -0,0 +1,250 @@
+From 19ff1036043ae40ff3d8a2e1a6a793219e1ec378 Mon Sep 17 00:00:00 2001
+From: Armin Rigo <arigo@tunes.org>
+Date: Tue, 26 May 2020 15:51:56 +0200
+Subject: [PATCH] Issue #454
+
+Try harder to avoid #line directives confuse the rest of pre-parsing
+---
+ cffi/cparser.py               | 37 ++++++++++++++++++++++++---
+ testing/cffi0/test_parsing.py | 48 ++++++++++++++++++++++++++++++++++-
+ 2 files changed, 81 insertions(+), 4 deletions(-)
+
+diff --git a/cffi/cparser.py b/cffi/cparser.py
+index d7069a73..d9784655 100644
+--- a/cffi/cparser.py
++++ b/cffi/cparser.py
+@@ -29,6 +29,7 @@ _r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$",
+ _r_define  = re.compile(r"^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)"
+                         r"\b((?:[^\n\\]|\\.)*?)$",
+                         re.DOTALL | re.MULTILINE)
++_r_line_directive = re.compile(r"^[ \t]*#[ \t]*line\b.*$", re.MULTILINE)
+ _r_partial_enum = re.compile(r"=\s*\.\.\.\s*[,}]|\.\.\.\s*\}")
+ _r_enum_dotdotdot = re.compile(r"__dotdotdot\d+__$")
+ _r_partial_array = re.compile(r"\[\s*\.\.\.\s*\]")
+@@ -163,10 +164,37 @@ def _warn_for_non_extern_non_static_global_variable(decl):
+                       "with C it should have a storage class specifier "
+                       "(usually 'extern')" % (decl.name,))
+ 
++def _remove_line_directives(csource):
++    # _r_line_directive matches whole lines, without the final \n, if they
++    # start with '#line' with some spacing allowed.  This function stores
++    # them away and replaces them with exactly the string '#line@N', where
++    # N is the index in the list 'line_directives'.
++    line_directives = []
++    def replace(m):
++        i = len(line_directives)
++        line_directives.append(m.group())
++        return '#line@%d' % i
++    csource = _r_line_directive.sub(replace, csource)
++    return csource, line_directives
++
++def _put_back_line_directives(csource, line_directives):
++    def replace(m):
++        s = m.group()
++        if not s.startswith('#line@'):
++            raise AssertionError("unexpected #line directive "
++                                 "(should have been processed and removed")
++        return line_directives[int(s[6:])]
++    return _r_line_directive.sub(replace, csource)
++
+ def _preprocess(csource):
++    # First, remove the lines of the form '#line N "filename"' because
++    # the "filename" part could confuse the rest
++    csource, line_directives = _remove_line_directives(csource)
+     # Remove comments.  NOTE: this only work because the cdef() section
+-    # should not contain any string literal!
+-    csource = _r_comment.sub(' ', csource)
++    # should not contain any string literals (except in line directives)!
++    def replace_keeping_newlines(m):
++        return ' ' + m.group().count('\n') * '\n'
++    csource = _r_comment.sub(replace_keeping_newlines, csource)
+     # Remove the "#define FOO x" lines
+     macros = {}
+     for match in _r_define.finditer(csource):
+@@ -219,7 +247,10 @@ def _preprocess(csource):
+     csource = _r_float_dotdotdot.sub(' __dotdotdotfloat__ ', csource)
+     # Replace all remaining "..." with the same name, "__dotdotdot__",
+     # which is declared with a typedef for the purpose of C parsing.
+-    return csource.replace('...', ' __dotdotdot__ '), macros
++    csource = csource.replace('...', ' __dotdotdot__ ')
++    # Finally, put back the line directives
++    csource = _put_back_line_directives(csource, line_directives)
++    return csource, macros
+ 
+ def _common_type_names(csource):
+     # Look in the source for what looks like usages of types from the
+diff --git a/testing/cffi0/test_parsing.py b/testing/cffi0/test_parsing.py
+index 3fc3783a..5f2d7ec4 100644
+--- a/testing/cffi0/test_parsing.py
++++ b/testing/cffi0/test_parsing.py
+@@ -174,7 +174,7 @@ def test_remove_line_continuation_comments():
+         double // blah \\
+                   more comments
+         x(void);
+-        double // blah\\\\
++        double // blah // blah\\\\
+         y(void);
+         double // blah\\ \
+                   etc
+@@ -185,6 +185,52 @@ def test_remove_line_continuation_comments():
+     m.y
+     m.z
+ 
++def test_dont_remove_comment_in_line_directives():
++    ffi = FFI(backend=FakeBackend())
++    e = py.test.raises(CDefError, ffi.cdef, """
++        \t # \t line \t 8 \t "baz.c" \t
++
++        some syntax error here
++    """)
++    assert str(e.value) == "parse error\nbaz.c:9:14: before: syntax"
++    #
++    e = py.test.raises(CDefError, ffi.cdef, """
++        #line 7 "foo//bar.c"
++
++        some syntax error here
++    """)
++    assert str(e.value) == "parse error\nfoo//bar.c:8:14: before: syntax"
++
++def test_multiple_line_directives():
++    ffi = FFI(backend=FakeBackend())
++    e = py.test.raises(CDefError, ffi.cdef,
++    """ #line 5 "foo.c"
++        extern int xx;
++        #line 6 "bar.c"
++        extern int yy;
++        #line 7 "baz.c"
++        some syntax error here
++        #line 8 "yadda.c"
++        extern int zz;
++    """)
++    assert str(e.value) == "parse error\nbaz.c:7:14: before: syntax"
++
++def test_commented_line_directive():
++    ffi = FFI(backend=FakeBackend())
++    e = py.test.raises(CDefError, ffi.cdef, """
++        /*
++        #line 5 "foo.c"
++        */
++        void xx(void);
++
++        #line 6 "bar.c"
++        /*
++        #line 35 "foo.c"
++        */
++        some syntax error
++    """)
++    assert str(e.value) == "parse error\nbar.c:9:14: before: syntax"
++
+ def test_line_continuation_in_defines():
+     ffi = FFI(backend=FakeBackend())
+     ffi.cdef("""
+-- 
+2.26.2
+
+From 31249d786c833d4960bbbf4e0d7f7bcaecf92d1f Mon Sep 17 00:00:00 2001
+From: Armin Rigo <arigo@tunes.org>
+Date: Fri, 29 May 2020 10:27:40 +0200
+Subject: [PATCH] #454
+
+Second try with '# NUMBER' instead of '#line NUMBER', as gcc seems to output
+---
+ cffi/cparser.py               |  8 +++----
+ testing/cffi0/test_parsing.py | 41 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 45 insertions(+), 4 deletions(-)
+
+diff --git a/cffi/cparser.py b/cffi/cparser.py
+index d9784655..74830e91 100644
+--- a/cffi/cparser.py
++++ b/cffi/cparser.py
+@@ -29,7 +29,7 @@ _r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$",
+ _r_define  = re.compile(r"^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)"
+                         r"\b((?:[^\n\\]|\\.)*?)$",
+                         re.DOTALL | re.MULTILINE)
+-_r_line_directive = re.compile(r"^[ \t]*#[ \t]*line\b.*$", re.MULTILINE)
++_r_line_directive = re.compile(r"^[ \t]*#[ \t]*(?:line|\d+)\b.*$", re.MULTILINE)
+ _r_partial_enum = re.compile(r"=\s*\.\.\.\s*[,}]|\.\.\.\s*\}")
+ _r_enum_dotdotdot = re.compile(r"__dotdotdot\d+__$")
+ _r_partial_array = re.compile(r"\[\s*\.\.\.\s*\]")
+@@ -166,9 +166,9 @@ def _warn_for_non_extern_non_static_global_variable(decl):
+ 
+ def _remove_line_directives(csource):
+     # _r_line_directive matches whole lines, without the final \n, if they
+-    # start with '#line' with some spacing allowed.  This function stores
+-    # them away and replaces them with exactly the string '#line@N', where
+-    # N is the index in the list 'line_directives'.
++    # start with '#line' with some spacing allowed, or '#NUMBER'.  This
++    # function stores them away and replaces them with exactly the string
++    # '#line@N', where N is the index in the list 'line_directives'.
+     line_directives = []
+     def replace(m):
+         i = len(line_directives)
+diff --git a/testing/cffi0/test_parsing.py b/testing/cffi0/test_parsing.py
+index 5f2d7ec4..a5e45874 100644
+--- a/testing/cffi0/test_parsing.py
++++ b/testing/cffi0/test_parsing.py
+@@ -199,6 +199,21 @@ def test_dont_remove_comment_in_line_directives():
+ 
+         some syntax error here
+     """)
++    #
++    assert str(e.value) == "parse error\nfoo//bar.c:8:14: before: syntax"
++    ffi = FFI(backend=FakeBackend())
++    e = py.test.raises(CDefError, ffi.cdef, """
++        \t # \t 8 \t "baz.c" \t
++
++        some syntax error here
++    """)
++    assert str(e.value) == "parse error\nbaz.c:9:14: before: syntax"
++    #
++    e = py.test.raises(CDefError, ffi.cdef, """
++        # 7 "foo//bar.c"
++
++        some syntax error here
++    """)
+     assert str(e.value) == "parse error\nfoo//bar.c:8:14: before: syntax"
+ 
+ def test_multiple_line_directives():
+@@ -214,6 +229,18 @@ def test_multiple_line_directives():
+         extern int zz;
+     """)
+     assert str(e.value) == "parse error\nbaz.c:7:14: before: syntax"
++    #
++    e = py.test.raises(CDefError, ffi.cdef,
++    """ # 5 "foo.c"
++        extern int xx;
++        # 6 "bar.c"
++        extern int yy;
++        # 7 "baz.c"
++        some syntax error here
++        # 8 "yadda.c"
++        extern int zz;
++    """)
++    assert str(e.value) == "parse error\nbaz.c:7:14: before: syntax"
+ 
+ def test_commented_line_directive():
+     ffi = FFI(backend=FakeBackend())
+@@ -229,6 +256,20 @@ def test_commented_line_directive():
+         */
+         some syntax error
+     """)
++    #
++    assert str(e.value) == "parse error\nbar.c:9:14: before: syntax"
++    e = py.test.raises(CDefError, ffi.cdef, """
++        /*
++        # 5 "foo.c"
++        */
++        void xx(void);
++
++        # 6 "bar.c"
++        /*
++        # 35 "foo.c"
++        */
++        some syntax error
++    """)
+     assert str(e.value) == "parse error\nbar.c:9:14: before: syntax"
+ 
+ def test_line_continuation_in_defines():
+-- 
+2.26.2
+
diff --git a/dev-python/pycparser/Manifest b/dev-python/pycparser/Manifest
index bdc4cf0..5ec1265 100644
--- a/dev-python/pycparser/Manifest
+++ b/dev-python/pycparser/Manifest
@@ -1 +1 @@
-DIST pycparser-2.14.tar.gz 223295 BLAKE2B 13dd4e36d7239db4fd6dfb77f08088bdbffa897ab75d748da5bd7297fe0a7dd751ba7153f8bf15f93494e347c653d1ebc7250907d2ccc555e785830e731e93dc SHA512 d5b9ab434a8944898ac23a4f51189db77b02b993bf3e3ca018852b117fc0eb43e460b156beaa5c1d631ad71c81e1649113e9fff7e33506b1e7d4de24d8b464c6
+DIST pycparser-2.20.tar.gz 161330 BLAKE2B 9a114e4b73e6c3c495bd78c393957146ec425eb5b15d72266cbf424f15e8d2e2e6402ef36d60a9dff41b393aab80fe1356befd25549517f398e129836a76b037 SHA512 ff0853c9f981b43b4f2e879350715c07b02cf9dab223d4980d8fe0a3138c98041b5f848a9355ae4f1cb45e7f137c03a88843008e18d77af9250e0d9c55f5ca1b
diff --git a/dev-python/pycparser/pycparser-2.14.ebuild b/dev-python/pycparser/pycparser-2.14.ebuild
deleted file mode 100644
index c40a670..0000000
--- a/dev-python/pycparser/pycparser-2.14.ebuild
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=5
-
-PYTHON_COMPAT=( python2_7 python3_{4,5,6} pypy pypy3 )
-
-inherit distutils-r1 vcs-snapshot
-
-DESCRIPTION="C parser and AST generator written in Python"
-HOMEPAGE="https://github.com/eliben/pycparser"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="BSD"
-SLOT="0"
-KEYWORDS="*"
-IUSE="test"
-
-RDEPEND="dev-python/ply[${PYTHON_USEDEP}]"
-DEPEND="${RDEPEND}
-	dev-python/setuptools[${PYTHON_USEDEP}]
-	test? ( dev-python/nose[${PYTHON_USEDEP}] )"
-
-python_compile() {
-	distutils-r1_python_compile
-	pushd "${BUILD_DIR}/lib/pycparser" > /dev/null || die
-	"${PYTHON}" _build_tables.py || die
-	popd > /dev/null || die
-}
-
-python_test() {
-	nosetests || die
-}
diff --git a/dev-python/pycparser/pycparser-2.20.ebuild b/dev-python/pycparser/pycparser-2.20.ebuild
new file mode 100644
index 0000000..43acbb4
--- /dev/null
+++ b/dev-python/pycparser/pycparser-2.20.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python2_7 python3_{6,7,8,9} pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="C parser and AST generator written in Python"
+HOMEPAGE="https://github.com/eliben/pycparser"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="*"
+
+RDEPEND="dev-python/ply:=[${PYTHON_USEDEP}]"
+BDEPEND="${RDEPEND}
+	dev-python/setuptools[${PYTHON_USEDEP}]"
+
+python_prepare_all() {
+	# remove the original files to guarantee their regen
+	rm pycparser/{c_ast,lextab,yacctab}.py || die
+
+	# kill sys.path manipulations to force the tests to use built files
+	sed -i -e '/sys\.path/d' tests/*.py || die
+
+	distutils-r1_python_prepare_all
+}
+
+python_compile() {
+	distutils-r1_python_compile
+
+	# note: tables built by py3.5+ are incompatible with older versions
+	# because of 100 group limit of 're' module -- just generate them
+	# separately optimized for each target instead
+	pushd "${BUILD_DIR}"/lib/pycparser > /dev/null || die
+	"${PYTHON}" _build_tables.py || die
+	popd > /dev/null || die
+}
+
+python_test() {
+	# Skip tests if cpp is not in PATH
+	type -P cpp >/dev/null || return 0
+	# change workdir to avoid '.' import
+	cd tests || die
+	"${EPYTHON}" -m unittest discover -v || die "Tests fail with ${EPYTHON}"
+}
+
+python_install() {
+	distutils-r1_python_install
+
+	# setup.py generates {c_ast,lextab,yacctab}.py with bytecode disabled.
+	python_optimize
+}
diff --git a/dev-python/pygit2/Manifest b/dev-python/pygit2/Manifest
new file mode 100644
index 0000000..9df217f
--- /dev/null
+++ b/dev-python/pygit2/Manifest
@@ -0,0 +1 @@
+DIST pygit2-1.2.1.tar.gz 235852 BLAKE2B 997c54359c87bdbb5338d6524ca119a058a2dfa9ec5079abfeac5e3f1312e7fe0b6a532cf3dcea6a2b317124337746b9e4fbaa71585bc88a8afa37f8b74a7f97 SHA512 2491892e50d9298d68c2f90b3c4b23c87e51995ccc29e285eb2f868f5e34d2568d5f554818203bf2c735179aeb197e3b7aba1be88e72a6526812e3ee2e0b4348
diff --git a/dev-python/pygit2/metadata.xml b/dev-python/pygit2/metadata.xml
new file mode 100644
index 0000000..667874d
--- /dev/null
+++ b/dev-python/pygit2/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+  <maintainer type="person">
+    <email>mgorny@gentoo.org</email>
+    <name>MichaƂ Górny</name>
+  </maintainer>
+  <maintainer type="project">
+    <email>python@gentoo.org</email>
+    <name>Python</name>
+  </maintainer>
+  <upstream>
+    <remote-id type="github">libgit2/pygit2</remote-id>
+    <remote-id type="pypi">pygit2</remote-id>
+  </upstream>
+</pkgmetadata>
diff --git a/dev-python/pygit2/pygit2-1.2.1.ebuild b/dev-python/pygit2/pygit2-1.2.1.ebuild
new file mode 100644
index 0000000..1ec5ab2
--- /dev/null
+++ b/dev-python/pygit2/pygit2-1.2.1.ebuild
@@ -0,0 +1,43 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+PYTHON_COMPAT=( python3_{6,7,8} )
+
+inherit distutils-r1
+
+DESCRIPTION="Python bindings for libgit2"
+HOMEPAGE="https://github.com/libgit2/pygit2 https://pypi.org/project/pygit2/"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2-with-linking-exception"
+SLOT="0"
+KEYWORDS="*"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+	=dev-libs/libgit2-1.0*
+	dev-python/cached-property[${PYTHON_USEDEP}]
+	>=dev-python/cffi-1.0:=[${PYTHON_USEDEP}]
+"
+DEPEND="${RDEPEND}
+	test? ( dev-python/pytest[${PYTHON_USEDEP}] )"
+
+src_prepare() {
+	distutils-r1_src_prepare
+
+	# unconditionally prevent it from using network
+	sed -i -e '/def no_network/a \
+    return True' test/utils.py || die
+
+	# we need to move them away to prevent pytest from forcing '..'
+	# for imports
+	mkdir hack || die
+	mv test hack/ || die
+	ln -s hack/test test || die
+}
+
+python_test() {
+	pytest -vv hack/test || die
+}
diff --git a/metadata/md5-cache/dev-libs/libgit2-1.0.1 b/metadata/md5-cache/dev-libs/libgit2-1.0.1
new file mode 100644
index 0000000..ad438c6
--- /dev/null
+++ b/metadata/md5-cache/dev-libs/libgit2-1.0.1
@@ -0,0 +1,15 @@
+BDEPEND=dev-util/ninja dev-util/cmake
+DEFINED_PHASES=compile configure install prepare setup test
+DEPEND=!libressl? ( dev-libs/openssl:0= ) libressl? ( dev-libs/libressl:0= ) sys-libs/zlib net-libs/http-parser:= gssapi? ( virtual/krb5 ) ssh? ( net-libs/libssh2 ) || ( dev-lang/python:3.8 dev-lang/python:3.7 dev-lang/python:3.6 ) virtual/pkgconfig
+DESCRIPTION=A linkable library for Git
+EAPI=7
+HOMEPAGE=https://libgit2.org
+IUSE=examples gssapi libressl +ssh test +threads trace
+KEYWORDS=*
+LICENSE=GPL-2-with-linking-exception
+RDEPEND=!libressl? ( dev-libs/openssl:0= ) libressl? ( dev-libs/libressl:0= ) sys-libs/zlib net-libs/http-parser:= gssapi? ( virtual/krb5 ) ssh? ( net-libs/libssh2 )
+RESTRICT=!test? ( test )
+SLOT=0/1.0
+SRC_URI=https://github.com/libgit2/libgit2/archive/v1.0.1.tar.gz -> libgit2-1.0.1.tar.gz
+_eclasses_=cmake	b22e256fd899c7e0c747e8834eff121a	eutils	06133990e861be0fe60c2b428fd025d9	flag-o-matic	5d5921a298e95441da2f85be419894c0	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	ninja-utils	132cbb376048d079b5a012f5467c4e7f	python-any-r1	54a3178500786b0a7ede4a23b7f2a6ad	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb	xdg-utils	ff2ff954e6b17929574eee4efc5152ba
+_md5_=134202082cca117c1b7b41c0e7e3bcab
diff --git a/metadata/md5-cache/dev-python/cached-property-1.5.1 b/metadata/md5-cache/dev-python/cached-property-1.5.1
new file mode 100644
index 0000000..3b3bbfd
--- /dev/null
+++ b/metadata/md5-cache/dev-python/cached-property-1.5.1
@@ -0,0 +1,16 @@
+BDEPEND=test? ( dev-python/pytest[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] ) python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) python_targets_python3_9? ( dev-lang/python:3.9 ) >=dev-lang/python-exec-2:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] dev-python/setuptools[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)]
+DEFINED_PHASES=compile configure install prepare test
+DEPEND=test? ( dev-python/freezegun[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] )
+DESCRIPTION=A cached-property for decorating methods in classes
+EAPI=7
+HOMEPAGE=https://github.com/pydanny/cached-property
+IUSE=test python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 python_targets_python3_9
+KEYWORDS=*
+LICENSE=BSD
+RDEPEND=python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) python_targets_python3_9? ( dev-lang/python:3.9 ) >=dev-lang/python-exec-2:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)]
+REQUIRED_USE=|| ( python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 python_targets_python3_9 )
+RESTRICT=!test? ( test )
+SLOT=0
+SRC_URI=mirror://pypi/c/cached-property/cached-property-1.5.1.tar.gz
+_eclasses_=distutils-r1	198e3b9ddb55ae36b2a50b07ca2877ef	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	python-r1	79e26ce8f853c9daebe9a4956e37cc1b	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb
+_md5_=af0e1bb37f664b421a7a2f5259b83e3f
diff --git a/metadata/md5-cache/dev-python/cffi-1.11.4 b/metadata/md5-cache/dev-python/cffi-1.11.4
deleted file mode 100644
index 6815e36..0000000
--- a/metadata/md5-cache/dev-python/cffi-1.11.4
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINED_PHASES=compile configure install prepare test
-DEPEND=virtual/libffi:= dev-python/pycparser[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)] virtual/pkgconfig doc? ( dev-python/sphinx[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)] ) test? ( dev-python/pytest[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)] ) python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)] dev-python/setuptools[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)]
-DESCRIPTION=Foreign Function Interface for Python calling C code
-EAPI=6
-HOMEPAGE=https://cffi.readthedocs.io/ https://pypi.org/project/cffi/
-IUSE=doc test python_targets_python2_7 python_targets_python3_6
-KEYWORDS=*
-LICENSE=MIT
-RDEPEND=virtual/libffi:= dev-python/pycparser[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)] python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-)]
-REQUIRED_USE=|| ( python_targets_python2_7 python_targets_python3_6 )
-SLOT=0/1.11.4
-SRC_URI=mirror://pypi/c/cffi/cffi-1.11.4.tar.gz
-_eclasses_=distutils-r1	198e3b9ddb55ae36b2a50b07ca2877ef	eutils	06133990e861be0fe60c2b428fd025d9	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	python-r1	79e26ce8f853c9daebe9a4956e37cc1b	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb	xdg-utils	ff2ff954e6b17929574eee4efc5152ba
-_md5_=19bcb360ccbb1eecac00e8f0fdd655eb
diff --git a/metadata/md5-cache/dev-python/cffi-1.14.0-r2 b/metadata/md5-cache/dev-python/cffi-1.14.0-r2
new file mode 100644
index 0000000..b458202
--- /dev/null
+++ b/metadata/md5-cache/dev-python/cffi-1.14.0-r2
@@ -0,0 +1,16 @@
+BDEPEND=dev-libs/libffi:= dev-python/pycparser[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] virtual/pkgconfig test? ( dev-python/pytest[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] ) doc? ( || ( ( dev-lang/python:3.9 dev-python/sphinx[python_targets_python3_9(-),python_single_target_python3_9(+)] ) ( dev-lang/python:3.8 dev-python/sphinx[python_targets_python3_8(-),python_single_target_python3_8(+)] ) ( dev-lang/python:3.7 dev-python/sphinx[python_targets_python3_7(-),python_single_target_python3_7(+)] ) ( dev-lang/python:3.6 dev-python/sphinx[python_targets_python3_6(-),python_single_target_python3_6(+)] ) ( >=dev-lang/python-2.7.5-r2:2.7 dev-python/sphinx[python_targets_python2_7(-),python_single_target_python2_7(+)] ) ) ) python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) python_targets_python3_9? ( dev-lang/python:3.9 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] dev-python/setuptools[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)]
+DEFINED_PHASES=compile configure install prepare test
+DEPEND=dev-libs/libffi:=
+DESCRIPTION=Foreign Function Interface for Python calling C code
+EAPI=7
+HOMEPAGE=https://cffi.readthedocs.io/ https://pypi.org/project/cffi/
+IUSE=test doc python_targets_python2_7 python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 python_targets_python3_9
+KEYWORDS=*
+LICENSE=MIT
+RDEPEND=dev-libs/libffi:= dev-python/pycparser[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) python_targets_python3_9? ( dev-lang/python:3.9 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] dev-python/setuptools[python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)]
+REQUIRED_USE=|| ( python_targets_python2_7 python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 python_targets_python3_9 )
+RESTRICT=!test? ( test )
+SLOT=0/1.14.0
+SRC_URI=mirror://pypi/c/cffi/cffi-1.14.0.tar.gz
+_eclasses_=distutils-r1	198e3b9ddb55ae36b2a50b07ca2877ef	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	python-r1	79e26ce8f853c9daebe9a4956e37cc1b	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb
+_md5_=d116cbd6c1ce7bfb3335eb71d980380a
diff --git a/metadata/md5-cache/dev-python/pycparser-2.14 b/metadata/md5-cache/dev-python/pycparser-2.14
deleted file mode 100644
index 1b5c68c..0000000
--- a/metadata/md5-cache/dev-python/pycparser-2.14
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINED_PHASES=compile configure install prepare test unpack
-DEPEND=dev-python/ply[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)] dev-python/setuptools[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)] test? ( dev-python/nose[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)] ) python_targets_pypy3? ( >=dev-python/pypy3-7.3.0:0= ) python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)] dev-python/setuptools[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)]
-DESCRIPTION=C parser and AST generator written in Python
-EAPI=5
-HOMEPAGE=https://github.com/eliben/pycparser
-IUSE=test python_targets_pypy3 python_targets_python2_7 python_targets_python3_6
-KEYWORDS=*
-LICENSE=BSD
-RDEPEND=dev-python/ply[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)] python_targets_pypy3? ( >=dev-python/pypy3-7.3.0:0= ) python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-)]
-REQUIRED_USE=|| ( python_targets_pypy3 python_targets_python2_7 python_targets_python3_6 )
-SLOT=0
-SRC_URI=mirror://pypi/p/pycparser/pycparser-2.14.tar.gz
-_eclasses_=distutils-r1	198e3b9ddb55ae36b2a50b07ca2877ef	eutils	06133990e861be0fe60c2b428fd025d9	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	python-r1	79e26ce8f853c9daebe9a4956e37cc1b	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb	vcs-snapshot	3be1ab44131e8c0bbdaa75823008444b	xdg-utils	ff2ff954e6b17929574eee4efc5152ba
-_md5_=9362f9c78e22e542906cb27adc5669b2
diff --git a/metadata/md5-cache/dev-python/pycparser-2.20 b/metadata/md5-cache/dev-python/pycparser-2.20
new file mode 100644
index 0000000..9d0c5bd
--- /dev/null
+++ b/metadata/md5-cache/dev-python/pycparser-2.20
@@ -0,0 +1,14 @@
+BDEPEND=dev-python/ply:=[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] dev-python/setuptools[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] python_targets_pypy3? ( >=dev-python/pypy3-7.3.0:0= ) python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) python_targets_python3_9? ( dev-lang/python:3.9 ) >=dev-lang/python-exec-2:=[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] dev-python/setuptools[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)]
+DEFINED_PHASES=compile configure install prepare test
+DESCRIPTION=C parser and AST generator written in Python
+EAPI=7
+HOMEPAGE=https://github.com/eliben/pycparser
+IUSE=python_targets_pypy3 python_targets_python2_7 python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 python_targets_python3_9
+KEYWORDS=*
+LICENSE=BSD
+RDEPEND=dev-python/ply:=[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)] python_targets_pypy3? ( >=dev-python/pypy3-7.3.0:0= ) python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) python_targets_python3_9? ( dev-lang/python:3.9 ) >=dev-lang/python-exec-2:=[python_targets_pypy3(-)?,python_targets_python2_7(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,python_targets_python3_9(-)?,-python_single_target_pypy3(-),-python_single_target_python2_7(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-),-python_single_target_python3_9(-)]
+REQUIRED_USE=|| ( python_targets_pypy3 python_targets_python2_7 python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 python_targets_python3_9 )
+SLOT=0
+SRC_URI=mirror://pypi/p/pycparser/pycparser-2.20.tar.gz
+_eclasses_=distutils-r1	198e3b9ddb55ae36b2a50b07ca2877ef	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	python-r1	79e26ce8f853c9daebe9a4956e37cc1b	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb
+_md5_=dce14fbececebea3309b9540338164cd
diff --git a/metadata/md5-cache/dev-python/pygit2-1.2.1 b/metadata/md5-cache/dev-python/pygit2-1.2.1
new file mode 100644
index 0000000..534433a
--- /dev/null
+++ b/metadata/md5-cache/dev-python/pygit2-1.2.1
@@ -0,0 +1,16 @@
+BDEPEND=python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)] dev-python/setuptools[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
+DEFINED_PHASES=compile configure install prepare test
+DEPEND==dev-libs/libgit2-1.0* dev-python/cached-property[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)] >=dev-python/cffi-1.0:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)] test? ( dev-python/pytest[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)] )
+DESCRIPTION=Python bindings for libgit2
+EAPI=7
+HOMEPAGE=https://github.com/libgit2/pygit2 https://pypi.org/project/pygit2/
+IUSE=test python_targets_python3_6 python_targets_python3_7 python_targets_python3_8
+KEYWORDS=*
+LICENSE=GPL-2-with-linking-exception
+RDEPEND==dev-libs/libgit2-1.0* dev-python/cached-property[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)] >=dev-python/cffi-1.0:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)] python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
+REQUIRED_USE=|| ( python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 )
+RESTRICT=!test? ( test )
+SLOT=0
+SRC_URI=mirror://pypi/p/pygit2/pygit2-1.2.1.tar.gz
+_eclasses_=distutils-r1	198e3b9ddb55ae36b2a50b07ca2877ef	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multiprocessing	e32940a7b2a9992ad217eccddb84d548	python-r1	79e26ce8f853c9daebe9a4956e37cc1b	python-utils-r1	157a6a7a3e99c7dbdf81acc9dd4f57cd	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb
+_md5_=d1e25ed92e4f8f1acdd39bffef9248bf