diff --git a/opkg-make-index b/opkg-make-index index 02c425f..4425107 100755 --- a/opkg-make-index +++ b/opkg-make-index @@ -190,34 +190,38 @@ if packages_filename: os.rename(tmp_packages_filename, packages_filename) os.rename(tmp_gzip_filename, gzip_filename) -if verbose: - sys.stderr.write("Generate Packages.filelist file\n") -files = {} -names = list(packages.packages.keys()) -names.sort() -for name in names: - try: - fnlist = packages[name].get_file_list() - except OSError as e: - sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e)) - continue - except IOError as e: - sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e)) - continue - for fn in fnlist: - (h,t) = os.path.split(fn) - if not t: continue - if t not in files: files[t] = name+':'+fn - else: files[t] = files[t] + ',' + name+':'+fn - if filelist_filename: - tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid())) - f = open(tmp_filelist_filename, "w") - names = list(files.keys()) - names.sort() - for name in names: - f.write("%s %s\n" % (name, files[name])) - f.close() - if posixpath.exists(filelist_filename): - os.unlink(filelist_filename) - os.rename(tmp_filelist_filename, filelist_filename) + if verbose: + sys.stderr.write("Generate Packages.filelist file\n") + files = {} + names = list(packages.packages.keys()) + names.sort() + for name in names: + try: + if verbose: + sys.stderr.write("Reading filelist for package '%s'\n" % name) +# sys.stderr.write("Package for name '%s':\n'%s'\n" % (name, packages[name])) + fnlist = packages[name].get_file_list_dir(pkg_dir) +# sys.stderr.write("Filelist for package '%s': '%s'\n" % (name, fnlist)) + except OSError as e: + sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e)) + continue + except IOError as e: + sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e)) + continue + for fn in fnlist: + (h,t) = os.path.split(fn) + if not t: continue + if t not in files: files[t] = name+':'+fn + else: files[t] = files[t] + ',' + name+':'+fn + + tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid())) + f = open(tmp_filelist_filename, "w") + names = list(files.keys()) + names.sort() + for name in names: + f.write("%s %s\n" % (name, files[name])) + f.close() + if posixpath.exists(filelist_filename): + os.unlink(filelist_filename) + os.rename(tmp_filelist_filename, filelist_filename) diff --git a/opkg.py b/opkg.py index 27cbc2a..707a882 100644 --- a/opkg.py +++ b/opkg.py @@ -325,8 +325,24 @@ class Package: def get_license(self, license): return self.license + def get_file_list_dir(self, directory): + if not self.fn: + try: + cmd = "find %s -name %s | head -n 1" % (directory, self.filename) + rc = subprocess.check_output(cmd, shell=True) + newfn = str(rc).split()[0] +# sys.stderr.write("Package '%s' with empty fn and filename is '%s' was found in '%s', updating fn\n" % (self.package, self.filename, newfn)) + self.fn = newfn + except OSError as e: + sys.stderr.write("Cannot find current fn for package '%s' filename '%s' in dir '%s'\n(%s)\n" % (self.package, self.filename, directory, e)) + except IOError as e: + sys.stderr.write("Cannot find current fn for package '%s' filename '%s' in dir '%s'\n(%s)\n" % (self.package, self.filename, directory, e)) + return self.get_file_list() + + def get_file_list(self): if not self.fn: + sys.stderr.write("Package '%s' has empty fn returning empty filelist\n" % (self.package)) return [] f = open(self.fn, "rb") ar = arfile.ArFile(f, self.fn)