diff --git a/namcap b/namcap index ea0bc94..019b077 100755 --- a/namcap +++ b/namcap @@ -1,39 +1,2 @@  #!/bin/bash - -args='' -tmp=$(mktemp -d --tmpdir namcap.XXXXXXXXXX) -cleanup() { -    rm -rf "${tmp}" -} -trap 'cleanup' 0 - -for arg in "${@}"; do -    if echo "${arg}" | grep -q -E "^.+\.pkg\.tar\..+$" && [ -f "${arg}" ]; then - -        extra_opts='' -        case "${arg##*.}" in -            gz|z|Z) cmd='gzip' ;; -            bz2|bz) cmd='bzip2' ;; -            xz)     cmd='xz' ;; -            lzo)    cmd='lzop' ;; -            lrz)    cmd='lrzip' -                extra_opts="-q -o -" ;; -            lz4)    cmd='lz4' -                extra_opts="-q" ;; -            lz)     cmd='lzip' -                extra_opts="-q" ;; -            zst)    cmd='zstd' -                extra_opts="-q" ;; -            *)      echo 'Unsupported compression'; exit 1;; -        esac - -        tar="${tmp}/$(basename "${arg%.*}")" -        $cmd -dcf $extra_opts "${arg}" > "${tar}" - -        args="${args} ${tar}" -    else -        args="${args} ${arg}" -    fi -done - -/usr/bin/env python3 -m namcap ${args} +/usr/bin/env python3 -m namcap ${@} diff --git a/namcap.py b/namcap.py index a7f532a..c5b54ca 100755 --- a/namcap.py +++ b/namcap.py @@ -23,6 +23,9 @@ import getopt  import os  import sys  import tarfile +import subprocess +import tempfile +import pathlib    import Namcap.depends  import Namcap.tags @@ -237,14 +240,51 @@ if len(active_modules) == 0:    # Go through each package, get the info, and apply the rules  for package in packages: -    if not os.access(package, os.R_OK): +    pkgpath = pathlib.Path(package) + +    if not pkgpath.is_file():          print("Error: Problem reading %s" % package) -        usage() +        parser.print_usage() +        continue # Skip to next package if any + +    if pkgpath.with_suffix('').suffix == '.tar': +        # What compression is used? +        extra_opts = '' +        if pkgpath.suffix == '.gz' or pkgpath.suffix == '.z' or pkgpath.suffix == '.Z': +            cmd = 'gzip' +        elif pkgpath.suffix == '.bz2' or pkgpath.suffix == '.bz': +            cmd = 'bzip2' +        elif pkgpath.suffix == '.xz': +            cmd = 'xz' +        elif pkgpath.suffix == '.lzo': +            cmd = 'lzop' +        elif pkgpath.suffix == '.lrz': +            cmd = 'lrzip' +            extra_opts="-q -o -" +        elif pkgpath.suffix == '.lz4': +            cmd = 'lz4' +            extra_opts="-q" +        elif pkgpath.suffix == '.lz': +            cmd = 'lzip' +            extra_opts="-q" +        elif pkgpath.suffix == '.zst': +            cmd = 'zstd' +            extra_opts="-q" +        else: +            print("Unsupported compression!") +            continue # Skip to next package if any + +        # Run decompression and put the .tar file in a temporary directory +        tmpdir = tempfile.TemporaryDirectory(prefix='namcap.') +        tmpfilepath = pathlib.Path(tmpdir.name).joinpath(pkgpath.with_suffix('').name) +        subprocess.run(cmd + ' -dcf ' + extra_opts + pkgpath.as_posix() + ' > ' + tmpfilepath.as_posix(), shell=True) + +        if tmpfilepath.is_file() and tarfile.is_tarfile(tmpfilepath): +            process_realpackage(package, active_modules)   -    if os.path.isfile(package) and tarfile.is_tarfile(package): -        process_realpackage(package, active_modules)      elif 'PKGBUILD' in package:          process_pkgbuild(package, active_modules) +      else:          print("Error: %s not package or PKGBUILD" % package)