Skip to content

Instantly share code, notes, and snippets.

@chris-pcguy
Created July 18, 2023 17:14
Show Gist options
  • Select an option

  • Save chris-pcguy/453571e76679c51b2018402cb56783b6 to your computer and use it in GitHub Desktop.

Select an option

Save chris-pcguy/453571e76679c51b2018402cb56783b6 to your computer and use it in GitHub Desktop.
#!/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