public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/pax-utils:master commit in: /
Date: Wed, 28 Sep 2022 07:42:55 +0000 (UTC)	[thread overview]
Message-ID: <1664350937.b07b25dcc8ad0e518d801bc23d01fb59cc6de442.vapier@gentoo> (raw)

commit:     b07b25dcc8ad0e518d801bc23d01fb59cc6de442
Author:     Mike Frysinger <vapier <AT> chromium <DOT> org>
AuthorDate: Wed Sep 28 06:03:01 2022 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Wed Sep 28 07:42:17 2022 +0000
URL:        https://gitweb.gentoo.org/proj/pax-utils.git/commit/?id=b07b25dc

lddtree: add typing info to more places

Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>

 lddtree.py | 87 +++++++++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 61 insertions(+), 26 deletions(-)

diff --git a/lddtree.py b/lddtree.py
index ecb353d..6939bb6 100755
--- a/lddtree.py
+++ b/lddtree.py
@@ -48,6 +48,7 @@ import mmap
 import os
 import shutil
 import sys
+from typing import Any, Iterable, Optional, Union
 
 assert sys.version_info >= (3, 6), f'Python 3.6+ required, but found {sys.version}'
 
@@ -60,31 +61,31 @@ from elftools.common import exceptions
 from elftools.elf.elffile import ELFFile
 
 
-def warn(msg, prefix='warning'):
+def warn(msg: Any, prefix: Optional[str] = "warning") -> None:
     """Write |msg| to stderr with a |prefix| before it"""
     print('%s: %s: %s' % (os.path.basename(sys.argv[0]), prefix, msg), file=sys.stderr)
 
 
-def err(msg, status=1):
+def err(msg: Any, status: Optional[int] = 1) -> None:
     """Write |msg| to stderr and exit with |status|"""
     warn(msg, prefix='error')
     sys.exit(status)
 
 
-def dbg(debug, *args, **kwargs):
+def dbg(debug: bool, *args, **kwargs) -> None:
     """Pass |args| and |kwargs| to print() when |debug| is True"""
     if debug:
         print(*args, **kwargs)
 
 
-def bstr(buf):
+def bstr(buf: Union[bytes, str]) -> str:
     """Decode the byte string into a string"""
     if isinstance(buf, str):
         return buf
     return buf.decode('utf-8')
 
 
-def normpath(path):
+def normpath(path: str) -> str:
     """Normalize a path
 
     Python's os.path.normpath() doesn't handle some cases:
@@ -96,7 +97,7 @@ def normpath(path):
 
 
 @functools.lru_cache(maxsize=None)
-def readlink(path, root, prefixed=False):
+def readlink(path: str, root: str, prefixed: Optional[bool] = False) -> str:
     """Like os.readlink(), but relative to a |root|
 
     This does not currently handle the pathological case:
@@ -124,14 +125,14 @@ def readlink(path, root, prefixed=False):
     return normpath((root + path) if prefixed else path)
 
 
-def dedupe(items):
+def dedupe(items: list[str]) -> list[str]:
     """Remove all duplicates from |items| (keeping order)"""
-    seen = {}
+    seen: dict[str, str] = {}
     return [seen.setdefault(x, x) for x in items if x not in seen]
 
 
 @functools.lru_cache(maxsize=None)
-def interp_supports_argv0(interp) -> bool:
+def interp_supports_argv0(interp: str) -> bool:
     """See whether |interp| supports the --argv0 option.
 
     Starting with glibc-2.33, the ldso supports --argv0 to override argv[0].
@@ -141,7 +142,12 @@ def interp_supports_argv0(interp) -> bool:
             return mm.find(b'--argv0') >= 0
 
 
-def GenerateLdsoWrapper(root, path, interp, libpaths=()):
+def GenerateLdsoWrapper(
+    root: str,
+    path: str,
+    interp: str,
+    libpaths: Iterable[str] = (),
+) -> None:
     """Generate a shell script wrapper which uses local ldso to run the ELF
 
     Since we cannot rely on the host glibc (or other libraries), we need to
@@ -190,7 +196,12 @@ exec \\
 
 
 @functools.lru_cache(maxsize=None)
-def ParseLdPaths(str_ldpaths, root='', cwd=None, path=None):
+def ParseLdPaths(
+    str_ldpaths: str,
+    root: str = "",
+    cwd: Optional[str] = None,
+    path: str = "",
+) -> list[str]:
     """Parse the colon-delimited list of paths and apply ldso rules to each
 
     Note the special handling as dictated by the ldso:
@@ -232,7 +243,12 @@ def ParseLdPaths(str_ldpaths, root='', cwd=None, path=None):
     return dedupe(ldpaths)
 
 
-def ParseLdSoConf(ldso_conf, root='/', debug=False, _first=True):
+def ParseLdSoConf(
+    ldso_conf: str,
+    root: str = "/",
+    debug: bool = False,
+    _first: bool = True,
+) -> list[str]:
     """Load all the paths from a given ldso config file
 
     This should handle comments, whitespace, and "include" statements.
@@ -283,7 +299,12 @@ def ParseLdSoConf(ldso_conf, root='/', debug=False, _first=True):
     return paths
 
 
-def LoadLdpaths(root='/', cwd=None, prefix='', debug=False):
+def LoadLdpaths(
+    root: str = "/",
+    cwd: Optional[str] = None,
+    prefix: str = "",
+    debug: bool = False,
+) -> dict[str, list[str]]:
     """Load linker paths from common locations
 
     This parses the ld.so.conf and LD_LIBRARY_PATH env var.
@@ -297,7 +318,7 @@ def LoadLdpaths(root='/', cwd=None, prefix='', debug=False):
     Returns:
       dict containing library paths to search
     """
-    ldpaths = {
+    ldpaths: dict[str, list[str]] = {
         'conf': [],
         'env': [],
         'interp': [],
@@ -321,7 +342,7 @@ def LoadLdpaths(root='/', cwd=None, prefix='', debug=False):
     return ldpaths
 
 
-def CompatibleELFs(elf1, elf2):
+def CompatibleELFs(elf1: ELFFile, elf2: ELFFile) -> bool:
     """See if two ELFs are compatible
 
     This compares the aspects of the ELF to see if they're compatible:
@@ -344,7 +365,13 @@ def CompatibleELFs(elf1, elf2):
             elf1.header['e_machine'] == elf2.header['e_machine'])
 
 
-def FindLib(elf, lib, ldpaths, root='/', debug=False):
+def FindLib(
+    elf: ELFFile,
+    lib: str,
+    ldpaths: list[str],
+    root: str = "/",
+    debug: bool = False,
+) -> tuple[Optional[str], Optional[str]]:
     """Try to locate a |lib| that is compatible to |elf| in the given |ldpaths|
 
     Args:
@@ -381,9 +408,17 @@ def FindLib(elf, lib, ldpaths, root='/', debug=False):
 
 # We abuse the _all_libs state.  We probably shouldn't, but we do currently.
 # pylint: disable=dangerous-default-value
-def ParseELF(path, root='/', cwd=None, prefix='',
-             ldpaths={'conf':[], 'env':[], 'interp':[]},
-             display=None, debug=False, _first=True, _all_libs={}):
+def ParseELF(
+    path: str,
+    root: str = "/",
+    cwd: Optional[str] = None,
+    prefix: str = "",
+    ldpaths={"conf": [], "env": [], "interp": []},
+    display: Optional[str] = None,
+    debug: bool = False,
+    _first: bool = True,
+    _all_libs={},
+) -> dict[str, Any]:
     """Parse the ELF dependency tree of the specified file
 
     Args:
@@ -522,7 +557,7 @@ def ParseELF(path, root='/', cwd=None, prefix='',
                 'path': fullpath,
                 'needed': [],
             }
-            if fullpath:
+            if realpath is not None:
                 try:
                     lret = ParseELF(realpath, root, cwd, prefix, ldpaths, display=fullpath,
                                     debug=debug, _first=False, _all_libs=_all_libs)
@@ -541,7 +576,7 @@ class _NormalizePathAction(argparse.Action):
         setattr(namespace, self.dest, normpath(values))
 
 
-def _ActionShow(options, elf):
+def _ActionShow(options: argparse.Namespace, elf: dict):
     """Show the dependency tree for this ELF"""
     def _show(lib, depth):
         chain_libs.append(lib)
@@ -568,7 +603,7 @@ def _ActionShow(options, elf):
 
     shown_libs = set(elf['needed'])
     new_libs = elf['needed'][:]
-    chain_libs = []
+    chain_libs: list[str] = []
     interp = elf['interp']
     if interp:
         lib = os.path.basename(interp)
@@ -590,9 +625,9 @@ def _ActionShow(options, elf):
         _show(lib, 1)
 
 
-def _ActionCopy(options, elf):
+def _ActionCopy(options: argparse.Namespace, elf: dict):
     """Copy the ELF and its dependencies to a destination tree"""
-    def _StripRoot(path):
+    def _StripRoot(path: str) -> str:
         return path[len(options.root) - 1:]
 
     def _copy(realsrc, src, striproot=True, wrapit=False, libpaths=(),
@@ -687,7 +722,7 @@ def _ActionCopy(options, elf):
           outdir=options.bindir)
 
 
-def GetParser():
+def GetParser() -> argparse.ArgumentParser:
     """Get a CLI parser."""
     parser = argparse.ArgumentParser(
         description=__doc__,
@@ -758,7 +793,7 @@ def GetParser():
     return parser
 
 
-def main(argv):
+def main(argv: list[str]) -> Optional[int]:
     """The main entry point!"""
     parser = GetParser()
     options = parser.parse_args(argv)


             reply	other threads:[~2022-09-28  7:43 UTC|newest]

Thread overview: 253+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-28  7:42 Mike Frysinger [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-09-22  4:33 [gentoo-commits] proj/pax-utils:master commit in: / Sam James
2024-09-22  4:30 Sam James
2024-08-09 10:06 Sam James
2024-08-09 10:06 Sam James
2024-08-09 10:06 Sam James
2024-08-09 10:06 Sam James
2024-08-09 10:06 Sam James
2024-08-09 10:06 Sam James
2024-08-09 10:02 Sam James
2024-07-22 21:07 Mike Gilbert
2024-07-22 20:08 Mike Gilbert
2024-01-25  6:52 Mike Frysinger
2024-01-25  5:57 Mike Frysinger
2024-01-25  5:57 Mike Frysinger
2024-01-25  5:36 Mike Frysinger
2024-01-25  5:21 Mike Frysinger
2024-01-25  5:06 Mike Frysinger
2024-01-25  5:06 Mike Frysinger
2024-01-25  4:44 Mike Frysinger
2024-01-25  2:53 Mike Frysinger
2024-01-25  2:53 Mike Frysinger
2024-01-25  2:53 Mike Frysinger
2024-01-25  2:14 Mike Frysinger
2024-01-24 22:53 Mike Frysinger
2024-01-24 22:15 Mike Frysinger
2024-01-24 15:44 Mike Frysinger
2024-01-16  5:13 Mike Frysinger
2024-01-16  5:13 Mike Frysinger
2024-01-10  8:05 Mike Frysinger
2024-01-10  8:02 Mike Frysinger
2024-01-10  8:02 Mike Frysinger
2024-01-10  7:58 Mike Frysinger
2024-01-02 18:03 Mike Frysinger
2024-01-02 18:03 Mike Frysinger
2024-01-02 18:03 Mike Frysinger
2024-01-02 18:03 Mike Frysinger
2024-01-02 16:28 Mike Frysinger
2024-01-01 15:43 Mike Frysinger
2024-01-01 15:43 Mike Frysinger
2023-12-22  5:31 Mike Frysinger
2023-12-22  5:31 Mike Frysinger
2023-12-22  5:31 Mike Frysinger
2023-12-22  2:31 Mike Frysinger
2023-12-22  2:31 Mike Frysinger
2023-12-22  2:31 Mike Frysinger
2023-12-14 21:28 Mike Frysinger
2023-12-14 21:28 Mike Frysinger
2023-12-14 19:57 Mike Frysinger
2023-11-23 13:31 Sam James
2023-02-13  5:26 Sam James
2023-02-13  5:26 Sam James
2023-01-29  5:56 Sam James
2023-01-29  5:56 Sam James
2023-01-29  5:56 Sam James
2023-01-29  3:41 Sam James
2023-01-29  3:36 Sam James
2023-01-29  3:36 Sam James
2023-01-26 21:46 Sam James
2023-01-06  7:15 Sam James
2022-09-28  7:42 Mike Frysinger
2022-09-28  7:42 Mike Frysinger
2022-09-28  7:42 Mike Frysinger
2022-09-28  7:42 Mike Frysinger
2022-09-28  7:42 Mike Frysinger
2022-09-28  7:42 Mike Frysinger
2022-09-21  8:28 Mike Frysinger
2022-09-21  8:26 Mike Frysinger
2022-09-21  8:20 Mike Frysinger
2022-07-31  4:56 Sam James
2022-07-12  6:33 Sam James
2022-07-12  6:33 Sam James
2022-04-25  1:20 WANG Xuerui
2022-03-24 15:42 Sam James
2022-03-09  8:01 Mike Frysinger
2022-02-07  7:18 Fabian Groffen
2022-01-23  2:47 Mike Frysinger
2021-12-24  1:45 Sam James
2021-12-17  5:19 Mike Frysinger
2021-10-17  5:15 Mike Frysinger
2021-10-05  1:05 Mike Frysinger
2021-10-04 22:05 Mike Frysinger
2021-09-20  4:51 Sam James
2021-07-22 21:31 Sergei Trofimovich
2021-07-22 21:16 Sergei Trofimovich
2021-07-02 22:04 Sergei Trofimovich
2021-06-10  7:07 Sergei Trofimovich
2021-06-10  7:02 Sergei Trofimovich
2021-04-19  4:58 Mike Frysinger
2021-04-18 18:29 Mike Frysinger
2021-04-17  5:39 Mike Frysinger
2021-04-17  5:39 Mike Frysinger
2021-04-17  0:38 Mike Frysinger
2021-04-16 19:26 Mike Frysinger
2021-04-16 19:26 Mike Frysinger
2021-04-16 19:26 Mike Frysinger
2021-04-16 19:03 Mike Frysinger
2021-04-16 19:03 Mike Frysinger
2021-04-16 15:08 Mike Frysinger
2021-04-16 15:08 Mike Frysinger
2021-04-16 15:08 Mike Frysinger
2021-04-16  3:41 Mike Frysinger
2021-04-16  3:39 Mike Frysinger
2021-04-16  3:39 Mike Frysinger
2021-04-16  1:56 Mike Frysinger
2021-04-16  1:56 Mike Frysinger
2021-04-16  0:48 Mike Frysinger
2021-04-16  0:48 Mike Frysinger
2021-02-26 11:51 Sergei Trofimovich
2021-02-04 18:51 Sergei Trofimovich
2021-02-03 20:41 Sergei Trofimovich
2021-02-03 20:17 Sergei Trofimovich
2021-02-03 19:46 Sergei Trofimovich
2021-01-01 14:08 Fabian Groffen
2021-01-01 14:08 Fabian Groffen
2020-12-20 19:53 Sergei Trofimovich
2020-10-05 17:46 Sergei Trofimovich
2020-08-14 22:17 Sergei Trofimovich
2020-04-13 10:41 Sergei Trofimovich
2020-04-06 18:00 Sergei Trofimovich
2020-03-26 19:27 Mike Frysinger
2020-03-26 17:09 Mike Frysinger
2020-03-26 17:09 Mike Frysinger
2020-03-19  0:00 Sergei Trofimovich
2020-03-18 23:39 Sergei Trofimovich
2020-02-16 10:57 Sergei Trofimovich
2020-02-16 10:50 Sergei Trofimovich
2020-02-16 10:48 Sergei Trofimovich
2020-02-16 10:17 Sergei Trofimovich
2019-01-14 22:53 Sergei Trofimovich
2018-11-19 22:20 Sergei Trofimovich
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07 14:09 Mike Frysinger
2018-06-07  4:44 Mike Frysinger
2018-06-07  4:44 Mike Frysinger
2018-06-07  4:44 Mike Frysinger
2018-02-24 10:16 Sergei Trofimovich
2017-09-18  9:27 Fabian Groffen
2017-09-18  9:27 Fabian Groffen
2017-09-18  7:06 Fabian Groffen
2017-03-14  7:19 Mike Frysinger
2017-02-16 21:24 Mike Frysinger
2017-02-16 21:24 Mike Frysinger
2017-02-16 21:24 Mike Frysinger
2017-02-11  7:06 Mike Frysinger
2017-02-01 23:08 Mike Frysinger
2017-02-01 23:08 Mike Frysinger
2017-02-01 23:08 Mike Frysinger
2017-01-24 20:39 Mike Frysinger
2017-01-24 20:39 Mike Frysinger
2017-01-24  6:50 Mike Frysinger
2017-01-24  6:50 Mike Frysinger
2017-01-24  6:50 Mike Frysinger
2017-01-24  6:50 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2017-01-22 17:59 Mike Frysinger
2016-11-27  3:43 Mike Frysinger
2016-11-15  4:02 Mike Frysinger
2016-11-15  4:02 Mike Frysinger
2016-11-14 14:57 Mike Frysinger
2016-11-12  7:15 Mike Frysinger
2016-11-12  7:15 Mike Frysinger
2016-11-12  7:15 Mike Frysinger
2016-11-12  7:15 Mike Frysinger
2016-11-12  7:15 Mike Frysinger
2016-11-12  7:15 Mike Frysinger
2016-11-08 20:47 Mike Gilbert
2016-06-20 17:46 Mike Frysinger
2016-06-20  4:03 Mike Frysinger
2016-06-20  4:03 Mike Frysinger
2016-06-20  3:22 Mike Frysinger
2016-06-20  3:22 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-06-20  3:08 Mike Frysinger
2016-05-31 22:27 Mike Frysinger
2016-03-03 21:15 Mike Frysinger
2016-02-10 19:41 Mike Frysinger
2016-02-10 18:54 Mike Frysinger
2016-01-28 22:42 Mike Frysinger
2016-01-03 22:23 Mike Frysinger
2016-01-03 22:23 Mike Frysinger
2016-01-03 22:01 Mike Frysinger
2016-01-02 15:26 Mike Frysinger
2016-01-02  3:52 Mike Frysinger
2015-12-19 19:41 Mike Frysinger
2015-12-17  3:24 Mike Frysinger
2015-12-17  3:24 Mike Frysinger
2015-12-17  3:24 Mike Frysinger
2015-12-17  3:24 Mike Frysinger
2015-12-12 22:45 Mike Frysinger
2015-12-12 22:45 Mike Frysinger
2015-12-12 22:45 Mike Frysinger
2015-12-12 22:45 Mike Frysinger
2015-12-12 22:45 Mike Frysinger
2015-12-12 22:45 Mike Frysinger
2015-11-26  8:43 Mike Frysinger
2015-10-26  4:35 Mike Frysinger
2015-10-08 20:31 Mike Frysinger
2015-09-19  6:27 Mike Frysinger
2015-09-19  6:27 Mike Frysinger
2015-09-12  4:17 Mike Frysinger
2015-08-28  0:33 Mike Frysinger
2015-08-26  6:29 Mike Frysinger
2015-08-24 21:22 Mike Frysinger
2015-08-24 21:22 Mike Frysinger
2015-08-24 21:22 Mike Frysinger
2015-08-20 14:39 Mike Frysinger
2015-08-20 14:39 Mike Frysinger
2015-08-20 14:39 Mike Frysinger
2015-08-20 14:33 Mike Frysinger
2015-08-20 14:33 Mike Frysinger
2015-08-20 13:32 Mike Frysinger
2015-08-18 15:56 Mike Frysinger
2015-08-18 15:35 Mike Frysinger
2015-08-18 15:35 Mike Frysinger
2015-08-18 14:39 Mike Frysinger
2015-08-18 14:38 Mike Frysinger
2015-07-13  9:14 Mike Frysinger
2015-07-13  9:14 Mike Frysinger
2015-07-13  9:14 Mike Frysinger
2015-05-24  3:22 Mike Frysinger
2015-03-29 20:07 Mike Frysinger
2015-03-29 20:07 Mike Frysinger
2015-03-29 20:07 Mike Frysinger
2015-03-10  5:31 Mike Frysinger
2015-03-10  5:31 Mike Frysinger
2015-03-10  4:19 Mike Frysinger
2015-03-10  3:36 Mike Frysinger
2015-03-06 11:52 Mike Frysinger
2015-03-04 22:35 Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1664350937.b07b25dcc8ad0e518d801bc23d01fb59cc6de442.vapier@gentoo \
    --to=vapier@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox