This produces shorter and faster code. The speed-up depends greatly on the workload - so here are some examples: File: mesa-18.3.2-1-x86_64.pkg.tar.xz from [1] Before: 1.66s user 0.15s system 100% cpu 1.814 total 1.61s user 0.21s system 100% cpu 1.820 total 1.69s user 0.15s system 100% cpu 1.832 total After: 1.62s user 0.17s system 100% cpu 1.782 total 1.66s user 0.14s system 100% cpu 1.800 total 1.63s user 0.15s system 100% cpu 1.781 total File: mesa-18.3.2-1-x86_64.pkg.tar.xz renamed to foo.bar Note: due to the rename, the build-in python extractor is used. Before: 687.76s user 2.19s system 99% cpu 11:30.68 total After: 390.73s user 1.37s system 99% cpu 6:32.72 total [1] https://archive.archlinux.org/packages/m/mesa/mesa-18.3.2-1-x86_64.pkg.tar.x... Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> --- Namcap/rules/elffiles.py | 7 +++---- Namcap/rules/rpath.py | 4 +--- Namcap/rules/runpath.py | 4 +--- Namcap/rules/sodepends.py | 4 +--- Namcap/tests/package/test_sodepends.py | 5 ++--- 5 files changed, 8 insertions(+), 16 deletions(-) diff --git a/Namcap/rules/elffiles.py b/Namcap/rules/elffiles.py index 4ad1e66..212f4c8 100644 --- a/Namcap/rules/elffiles.py +++ b/Namcap/rules/elffiles.py @@ -87,9 +87,8 @@ class ELFTextRelocationRule(TarballRule): for section in elffile.iter_sections(): if not isinstance(section, DynamicSection): continue - for tag in section.iter_tags(): - if tag.entry.d_tag == 'DT_TEXTREL': - files_with_textrel.append(entry.name) + for tag in section.iter_tags('DT_TEXTREL'): + files_with_textrel.append(entry.name) if files_with_textrel: self.warnings = [("elffile-with-textrel %s", i) @@ -218,7 +217,7 @@ class NoPIERule(TarballRule): for section in elffile.iter_sections(): if not isinstance(section, DynamicSection): continue - if any(tag.entry.d_tag == 'DT_DEBUG' for tag in section.iter_tags()): + for tag in section.iter_tags('DT_DEBUG'): return True return False diff --git a/Namcap/rules/rpath.py b/Namcap/rules/rpath.py index 4da040c..cb5a922 100644 --- a/Namcap/rules/rpath.py +++ b/Namcap/rules/rpath.py @@ -32,9 +32,7 @@ def get_rpaths(fileobj): for section in elffile.iter_sections(): if not isinstance(section, DynamicSection): continue - for tag in section.iter_tags(): - if tag.entry.d_tag != 'DT_RPATH': - continue + for tag in section.iter_tags('DT_RPATH'): rpaths = tag.rpath rpaths = rpaths.split(':') for path in rpaths: diff --git a/Namcap/rules/runpath.py b/Namcap/rules/runpath.py index 00874be..22c42f1 100644 --- a/Namcap/rules/runpath.py +++ b/Namcap/rules/runpath.py @@ -32,9 +32,7 @@ def get_runpaths(fileobj): for section in elffile.iter_sections(): if not isinstance(section, DynamicSection): continue - for tag in section.iter_tags(): - if tag.entry.d_tag != 'DT_RUNPATH': - continue + for tag in section.iter_tags('DT_RUNPATH'): for path in tag.runpath.split(':'): yield path diff --git a/Namcap/rules/sodepends.py b/Namcap/rules/sodepends.py index 2f061bb..c565109 100644 --- a/Namcap/rules/sodepends.py +++ b/Namcap/rules/sodepends.py @@ -52,10 +52,8 @@ def scanlibs(fileobj, filename, custom_libs): for section in elffile.iter_sections(): if not isinstance(section, DynamicSection): continue - for tag in section.iter_tags(): + for tag in section.iter_tags('DT_NEEDED'): # DT_NEEDED means shared library - if tag.entry.d_tag != 'DT_NEEDED': - continue bitsize = elffile.elfclass architecture = {32:'i686', 64:'x86-64'}[bitsize] libname = tag.needed diff --git a/Namcap/tests/package/test_sodepends.py b/Namcap/tests/package/test_sodepends.py index d5537ac..fe622ea 100644 --- a/Namcap/tests/package/test_sodepends.py +++ b/Namcap/tests/package/test_sodepends.py @@ -31,9 +31,8 @@ def get_soname(filename): for section in alpm.iter_sections(): if not isinstance(section, DynamicSection): continue - for tag in section.iter_tags(): - if tag.entry.d_tag == 'DT_SONAME': - return tag.soname + for tag in section.iter_tags('DT_SONAME'): + return tag.soname class SoDependsTest(MakepkgTest): pkgbuild = """ -- 2.30.0