Created
July 18, 2023 17:14
-
-
Save chris-pcguy/453571e76679c51b2018402cb56783b6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| import sys, os, glob | |
| def parse_pkgs(fn): | |
| basefn = os.path.basename(fn) | |
| basefn = basefn.split('_dists_', 1)[0] | |
| basefn = basefn.split('_._', 1)[0] | |
| #print(basefn) | |
| fd = open(fn, 'rb').read() | |
| pkgfdl = fd.split(b'Package: ') | |
| for pkgfdli in pkgfdl: | |
| pkgfdli = b'Package: '+pkgfdli | |
| #print(pkgfdli) | |
| pkg_name = '' | |
| pkg_version = '' | |
| pkg_deps = [] | |
| pkg_url = '' | |
| for pkgfdli_f in pkgfdli.split(b'\n'): | |
| if (not pkgfdli_f): | |
| continue | |
| #print(pkgfdli_f) | |
| pkgfdli_fvf = pkgfdli_f.split(b': ', 1) | |
| if (len(pkgfdli_fvf) != 2): | |
| pkgfdli_fvf = pkgfdli_f.split(b':', 1) | |
| if (len(pkgfdli_fvf) != 2): | |
| continue | |
| pkgfdli_fv = pkgfdli_fvf[1] | |
| if (pkgfdli_f.startswith(b'Package: ')): | |
| pkgfdli_fv = pkgfdli_fv.decode() | |
| pkg_name = pkgfdli_fv | |
| elif (pkgfdli_f.startswith(b'Version: ')): | |
| pkgfdli_fv = pkgfdli_fv.decode() | |
| pkg_version = pkgfdli_fv | |
| elif (pkgfdli_f.startswith(b'Filename: ')): | |
| basefn = basefn.replace('_', '/') | |
| pkgfdli_fv = pkgfdli_fv.decode() | |
| pkg_url = f'{basefn}/{pkgfdli_fv}' | |
| elif (pkgfdli_f.startswith(b'Pre-Depends: ') or pkgfdli_f.startswith(b'Depends: ')): | |
| ##if (pkg_name in pkgs): | |
| ## pkg_deps.extend(pkgs[pkg_name]['deps']) | |
| pkgfdli_fv = pkgfdli_fv.decode() | |
| #print(f'Depends0: {pkg_name}:', pkgfdli_fv) | |
| deppkgs_with_version = pkgfdli_fv.split(',') | |
| for deppkgs_with_version_i in deppkgs_with_version: | |
| onlydeppkg = deppkgs_with_version_i.strip() | |
| onlydeppkg = onlydeppkg.split(' ')[0] | |
| onlydeppkg = onlydeppkg.split('(')[0] | |
| #print('Depends:', onlydeppkg) | |
| pkg_deps.append(onlydeppkg) | |
| #print(f'Depends1: {pkg_name}:', pkg_deps) | |
| #print(pkg_deps) | |
| if (pkg_name in pkgs): | |
| prev_ver = pkgs[pkg_name]['version'] | |
| if (pkg_version < prev_ver): | |
| continue | |
| #print(pkg_name, pkg_deps) | |
| pkgs[pkg_name] = {'name': pkg_name, 'version': pkg_version, 'deps': pkg_deps, 'url' : pkg_url} | |
| deps = [] | |
| def recurse_deps(pkg): | |
| global deps | |
| #deps = [pkg] | |
| deps.append(pkg) | |
| if (pkg not in pkgs): | |
| #print(f'recurse_deps: Pkg {pkg} not found!') | |
| #return deps | |
| return | |
| pkg_deps = pkgs[pkg]['deps'] | |
| #print(pkg, pkg_deps) | |
| for pkg_dep in pkg_deps: | |
| if (pkg_dep in deps): | |
| continue | |
| deps.append(pkg_dep) | |
| rec_deps = recurse_deps(pkg_dep) | |
| #deps.extend(rec_deps) | |
| #return deps | |
| deps = list(set(deps)) | |
| def get_urls(pkg): | |
| #print(pkg) | |
| if (pkg not in pkgs): | |
| #print(f'get_urls: Pkg {pkg} not found!') | |
| return '' | |
| pkg_url = pkgs[pkg]['url'] | |
| #print('pkg_url:', pkg_url) | |
| return pkg_url | |
| pkg = sys.argv[1] | |
| fns = glob.glob('/home/.../.../.../.../iphone/strap/private/var/lib/apt/lists/*Packages') | |
| pkgs = {} | |
| #print(fns) | |
| for fn in fns: | |
| parse_pkgs(fn) | |
| #print(pkgs) | |
| #deps = | |
| recurse_deps(pkg) | |
| #print(deps) | |
| for dep in deps: | |
| url = get_urls(dep) | |
| if (not url): | |
| continue | |
| print(url) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment