+ if d is None: return
+ s.src_dir(d, infol)
+
+ def report_from_packages_debian(s, files):
+ dpkg_S_in = tempfile.TemporaryFile(mode='w+')
+ for (file, infols) in files.items():
+ assert('\n' not in file)
+ dpkg_S_in.write(file)
+ dpkg_S_in.write('\0')
+ dpkg_S_in.seek(0)
+ cmdl = ['xargs','-0r','dpkg','-S','--']
+ dpkg_S = subprocess.Popen(cmdl,
+ cwd='/',
+ stdin=dpkg_S_in,
+ stdout=subprocess.PIPE,
+ stderr=sys.stderr,
+ close_fds=False)
+ dpkg_show_in = tempfile.TemporaryFile(mode='w+')
+ pkginfos = { }
+ for l in dpkg_S.stdout:
+ l = l.strip(b'\n').decode('utf-8')
+ (pkgs, fname) = l.split(': ',1)
+ pks = pkgs.split(', ')
+ for pk in pks:
+ pkginfos.setdefault(pk,{'files':[]})['files'].append(fname)
+ print(pk, file=dpkg_show_in)
+ assert(dpkg_S.wait() == 0)
+ dpkg_show_in.seek(0)
+ cmdl = ['xargs','-r','dpkg-query',
+ r'-f${binary:Package}\t${Package}\t${Architecture}\t${Version}\t${source:Package}\t${source:Version}\n',
+ '--show','--']
+ dpkg_show = subprocess.Popen(cmdl,
+ cwd='/',
+ stdin=dpkg_show_in,
+ stdout=subprocess.PIPE,
+ stderr=sys.stderr,
+ close_fds=False)
+ for l in dpkg_show.stdout:
+ l = l.strip(b'\n').decode('utf-8')
+ (pk,p,a,v,sp,sv) = l.split('\t')
+ pkginfos[pk]['binary'] = p
+ pkginfos[pk]['arch'] = a
+ pkginfos[pk]['version'] = v
+ pkginfos[pk]['source'] = sp
+ pkginfos[pk]['sourceversion'] = sv
+ assert(dpkg_show.wait() == 0)
+ for pk in sorted(pkginfos.keys()):
+ pi = pkginfos[pk]
+ debfname = '%s_%s_%s.deb' % (pi['binary'], pi['version'], pi['arch'])
+ dscfname = '%s_%s.dsc' % (pi['source'], pi['sourceversion'])
+ s.manifest_append_absentfile(dscfname, [debfname])
+ s.logger('mentioning %s and %s because %s' %
+ (dscfname, debfname, pi['files'][0]))
+ for fname in pi['files']:
+ infol = files[fname]
+ if s.show_pathnames: infol = infol + ['loaded='+fname]
+ s.manifest_append_absentfile(' \t' + debfname, infol)
+
+ def thing_ought_packaged(s, fname):
+ return s.thing_matches_globs(fname, s.src_package_globs)
+
+ def src_file_packaged(s, fname, infol):
+ s._package_files.setdefault(fname,[]).extend(infol)
+
+ def src_file(s, fname, infol):
+ def fngens():
+ yield (infol, fname)
+ infol_copy = infol.copy()
+ yield (infol_copy, s.path_prenormaliser(fname, infol_copy))
+ yield (infol, os.path.realpath(fname))
+
+ for (tinfol, tfname) in fngens():
+ if s.thing_ought_packaged(tfname):
+ s.src_file_packaged(tfname, tinfol)
+ return