* Dmitrijs Ledkovs <x...@debian.org>, 2012-08-07, 22:47:
Does this include search across all components of standard $PATH
Yes, modulo bugs (see my other message in this thread).
and across all packages?
Yes, on i386 and amd64. If you check kfreebsd-* there's also this one:
ztest: zfsutils zutils
There might be even more if you assume that you can co-install Linux and
kFreeBSD binaries (yay, multi-arch world!).
How did you run this check?
I used a script (attached) to analyse Contents-*.gz files, which you can
find on your favourite mirror. Then I manually filtered some
false-positives.
--
Jakub Wilk
#!/usr/bin/python3
# Copyright © 2012 Jakub Wilk <jw...@debian.org>
# Redistribution and use in source and compiled forms, with or without
# modification, are permitted under any circumstances. No warranty.
import argparse
import collections
import functools
import gzip
import re
interesting =
re.compile(br'^((?:usr/)?s?bin/|usr/games/)([^/\s]+)\s+(\S+)').match
def main():
ap = argparse.ArgumentParser()
ap.add_argument('files', metavar='FILE', nargs='+')
options = ap.parse_args()
data = collections.defaultdict(
lambda: collections.defaultdict(set)
)
for filename in options.files:
if filename.endswith('.gz'):
file = gzip.open(filename)
else:
file = open(filename, 'rb')
with file:
for line in file:
if line.startswith(b'FILE'):
break
for line in file:
match = interesting(line)
if match is not None:
path, command, packages = (s.decode('UTF-8') for s in
match.groups())
packages = set(p.split('/')[-1] for p in
packages.split(','))
data[command][path] |= packages
for command, paths in data.items():
if len(paths) > 1:
packages = functools.reduce(set.union, paths.values(), set())
if len(packages) > 1:
print('{command}: {packages}'.format(
command=command,
packages=' '.join(sorted(packages))
))
if __name__ == '__main__':
main()
# vim:ts=4 sw=4 et