mirror of
https://git.yoctoproject.org/git/opkg-utils
synced 2026-07-04 12:28:24 +02:00
opkg-make-index: fix pylint errors and warnings
Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
This commit is contained in:
473
opkg-make-index
473
opkg-make-index
@@ -1,247 +1,264 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
Utility to create opkg compatible indexes
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
|
||||
import sys, os, posixpath
|
||||
import subprocess
|
||||
import opkg
|
||||
import getopt
|
||||
import sys
|
||||
import os
|
||||
import posixpath
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
verbose = 0
|
||||
import opkg
|
||||
|
||||
def usage():
|
||||
sys.stderr.write("%s [-h] [-s] [-m] [-a] [-f] [-l Packages.filelist] [-p Packages] [-r Packages.old] [-L localesdir] [-v] packagesdir\n" % (sys.argv[0],))
|
||||
sys.exit(-1)
|
||||
""" Print help """
|
||||
sys.stderr.write("%s [-h] [-s] [-m] [-a] [-f] [-l Packages.filelist] [-p Packages]"
|
||||
" [-r Packages.old] [-L localesdir] [-v] packagesdir\n" % (sys.argv[0],))
|
||||
sys.exit(-1)
|
||||
|
||||
def to_morgue(filename):
|
||||
morgue_dir = pkg_dir + "/morgue"
|
||||
if verbose:
|
||||
sys.stderr.write ("Moving " + filename + " to morgue\n")
|
||||
if not os.path.exists(morgue_dir):
|
||||
os.mkdir(morgue_dir)
|
||||
if os.path.exists(pkg_dir + "/" + filename):
|
||||
os.rename(pkg_dir + "/" + filename, morgue_dir + "/" + filename)
|
||||
if os.path.exists(pkg_dir + "/" + filename + ".asc"):
|
||||
os.rename(pkg_dir + "/" + filename + ".asc", morgue_dir + "/" + filename + ".asc")
|
||||
|
||||
locales_dir = None
|
||||
def to_locale(filename, locale):
|
||||
locale_dir = pkg_dir + '/' + locales_dir + '/' + locale + "/"
|
||||
if verbose:
|
||||
sys.stderr.write ("Moving " + filename + " to " + locale_dir + "\n")
|
||||
if not os.path.exists(locale_dir):
|
||||
os.mkdir(locale_dir)
|
||||
os.rename(pkg_dir + "/" + filename, locale_dir + "/" + filename)
|
||||
if os.path.exists(pkg_dir + "/" + filename + ".asc"):
|
||||
os.rename(pkg_dir + "/" + filename + ".asc", locale_dir + "/" + filename + ".asc")
|
||||
|
||||
old_filename = None
|
||||
packages_filename = None
|
||||
filelist_filename = None
|
||||
stamplist_filename = "Packages.stamps"
|
||||
opt_s = 0
|
||||
opt_m = 0
|
||||
opt_a = 0
|
||||
opt_f = 0
|
||||
(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:af")
|
||||
for (optkey, optval) in opts:
|
||||
if optkey == '-h':
|
||||
usage()
|
||||
if optkey == '-s':
|
||||
opt_s = 1
|
||||
if optkey == '-p':
|
||||
packages_filename = optval
|
||||
stamplist_filename = optval + ".stamps"
|
||||
if optkey == '-l':
|
||||
filelist_filename = optval
|
||||
if optkey == '-v':
|
||||
verbose = 1
|
||||
if optkey == '-m':
|
||||
opt_m = 1
|
||||
if optkey == '-r':
|
||||
old_filename = optval
|
||||
if optkey == '-L':
|
||||
locales_dir = optval
|
||||
if optkey == '-a':
|
||||
opt_a = 1
|
||||
if optkey == '-f':
|
||||
opt_f = 1
|
||||
|
||||
if ( not remaining_args ):
|
||||
usage()
|
||||
|
||||
pkg_dir=remaining_args[0]
|
||||
|
||||
packages = opkg.Packages()
|
||||
|
||||
old_pkg_hash = {}
|
||||
if packages_filename and not old_filename and os.path.exists(packages_filename):
|
||||
old_filename = packages_filename
|
||||
|
||||
pkgsStamps = {}
|
||||
if old_filename:
|
||||
if (verbose):
|
||||
sys.stderr.write("Reading package list from " + old_filename + "\n")
|
||||
old_packages = opkg.Packages()
|
||||
old_packages.read_packages_file(old_filename, opt_f)
|
||||
for k in list(old_packages.packages.keys()):
|
||||
p = old_packages.packages[k]
|
||||
old_pkg_hash[p.filename] = p
|
||||
try:
|
||||
f = open(stamplist_filename, "r")
|
||||
for l in f:
|
||||
l = l.strip()
|
||||
s, f = l.split(" ", 1)
|
||||
pkgsStamps[f] = int(s)
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
if (verbose):
|
||||
sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, ))
|
||||
|
||||
files=[]
|
||||
opkg_extensions=['.ipk','.opk','.deb']
|
||||
for dirpath, dirnames, filenames in os.walk(pkg_dir):
|
||||
for f in filenames:
|
||||
ext = os.path.splitext(f)[1]
|
||||
if ext in opkg_extensions:
|
||||
files.append(os.path.join(dirpath, f))
|
||||
|
||||
files.sort()
|
||||
for abspath in files:
|
||||
try:
|
||||
filename = os.path.relpath(abspath, pkg_dir)
|
||||
pkg = None
|
||||
fnameStat = os.stat(abspath)
|
||||
if filename in old_pkg_hash:
|
||||
if filename in pkgsStamps and int(fnameStat.st_ctime) == pkgsStamps[filename]:
|
||||
if (verbose):
|
||||
sys.stderr.write("Found %s in Packages\n" % (filename,))
|
||||
pkg = old_pkg_hash[filename]
|
||||
else:
|
||||
sys.stderr.write("Found %s in Packages, but ctime differs - re-reading\n" % (filename,))
|
||||
|
||||
if not pkg:
|
||||
if (verbose):
|
||||
sys.stderr.write("Reading info for package %s\n" % (filename,))
|
||||
pkg = opkg.Package(abspath, relpath=pkg_dir, all_fields=opt_f)
|
||||
|
||||
if opt_a:
|
||||
pkg_key = ("%s:%s:%s" % (pkg.package, pkg.architecture, pkg.version))
|
||||
else:
|
||||
pkg_key = ("%s:%s" % (pkg.package, pkg.architecture))
|
||||
|
||||
if (pkg_key in packages.packages):
|
||||
old_filename = packages.packages[pkg_key].filename
|
||||
else:
|
||||
old_filename = ""
|
||||
s = packages.add_package(pkg, opt_a)
|
||||
pkgsStamps[filename] = fnameStat.st_ctime
|
||||
if s == 0:
|
||||
if old_filename:
|
||||
# old package was displaced by newer
|
||||
if opt_m:
|
||||
to_morgue(old_filename)
|
||||
if opt_s:
|
||||
print(("%s/%s" % (pkg_dir, old_filename)))
|
||||
else:
|
||||
if opt_m:
|
||||
to_morgue(filename)
|
||||
if opt_s:
|
||||
print(filename)
|
||||
except OSError as e:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (filename, e))
|
||||
continue
|
||||
except IOError as e:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (filename, e))
|
||||
continue
|
||||
|
||||
pkgsStampsFile = open(stamplist_filename, "w")
|
||||
for f in list(pkgsStamps.keys()):
|
||||
pkgsStampsFile.write("%d %s\n" % (pkgsStamps[f], f))
|
||||
pkgsStampsFile.close()
|
||||
|
||||
if opt_s:
|
||||
sys.exit(0)
|
||||
|
||||
if verbose:
|
||||
sys.stderr.write("Generating Packages file\n")
|
||||
if packages_filename:
|
||||
tmp_packages_filename = ("%s.%d" % (packages_filename, os.getpid()))
|
||||
pkgsFile = open(tmp_packages_filename, "w")
|
||||
names = list(packages.packages.keys())
|
||||
names.sort()
|
||||
for name in names:
|
||||
try:
|
||||
pkg = packages.packages[name]
|
||||
if locales_dir and pkg.depends:
|
||||
depends = pkg.depends.split(',')
|
||||
locale = None
|
||||
for d in depends:
|
||||
m = re.match('.*virtual-locale-([a-zA-Z]+).*', d)
|
||||
mp = re.match('locale-base-([a-zA-Z]+)([-+])?.*', pkg.package)
|
||||
if m:
|
||||
locale = m.group(1)
|
||||
if mp:
|
||||
locale = mp.group(1)
|
||||
if locale:
|
||||
to_locale(pkg.filename, locale)
|
||||
continue
|
||||
if (verbose):
|
||||
sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
|
||||
if packages_filename:
|
||||
pkgsFile.write(str(pkg))
|
||||
else:
|
||||
print(pkg)
|
||||
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
|
||||
|
||||
if packages_filename:
|
||||
pkgsFile.close()
|
||||
gzip_filename = ("%s.gz" % packages_filename)
|
||||
tmp_gzip_filename = ("%s.%d" % (gzip_filename, os.getpid()))
|
||||
gzip_cmd = "gzip -9c < %s > %s" % (tmp_packages_filename, tmp_gzip_filename)
|
||||
subprocess.call(gzip_cmd, shell=True)
|
||||
os.rename(tmp_packages_filename, packages_filename)
|
||||
os.rename(tmp_gzip_filename, gzip_filename)
|
||||
|
||||
if filelist_filename:
|
||||
def to_morgue(filename, pkg_dir, verbose):
|
||||
""" Move files to morgue folder """
|
||||
morgue_dir = pkg_dir + "/morgue"
|
||||
if verbose:
|
||||
sys.stderr.write("Generate Packages.filelist file\n")
|
||||
files = {}
|
||||
sys.stderr.write("Moving " + filename + " to morgue\n")
|
||||
if not os.path.exists(morgue_dir):
|
||||
os.mkdir(morgue_dir)
|
||||
if os.path.exists(pkg_dir + "/" + filename):
|
||||
os.rename(pkg_dir + "/" + filename, morgue_dir + "/" + filename)
|
||||
if os.path.exists(pkg_dir + "/" + filename + ".asc"):
|
||||
os.rename(pkg_dir + "/" + filename + ".asc", morgue_dir + "/" + filename + ".asc")
|
||||
|
||||
def to_locale(filename, locale, pkg_dir, locales_dir, verbose):
|
||||
""" Move file to locale_dir"""
|
||||
locale_dir = pkg_dir + '/' + locales_dir + '/' + locale + "/"
|
||||
if verbose:
|
||||
sys.stderr.write("Moving " + filename + " to " + locale_dir + "\n")
|
||||
if not os.path.exists(locale_dir):
|
||||
os.mkdir(locale_dir)
|
||||
os.rename(pkg_dir + "/" + filename, locale_dir + "/" + filename)
|
||||
if os.path.exists(pkg_dir + "/" + filename + ".asc"):
|
||||
os.rename(pkg_dir + "/" + filename + ".asc", locale_dir + "/" + filename + ".asc")
|
||||
|
||||
def main():
|
||||
""" Script entry point """
|
||||
verbose = 0
|
||||
locales_dir = None
|
||||
old_filename = None
|
||||
packages_filename = None
|
||||
filelist_filename = None
|
||||
stamplist_filename = "Packages.stamps"
|
||||
opt_s = 0
|
||||
opt_m = 0
|
||||
opt_a = 0
|
||||
opt_f = 0
|
||||
(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:af")
|
||||
for (optkey, optval) in opts:
|
||||
if optkey == '-h':
|
||||
usage()
|
||||
if optkey == '-s':
|
||||
opt_s = 1
|
||||
if optkey == '-p':
|
||||
packages_filename = optval
|
||||
stamplist_filename = optval + ".stamps"
|
||||
if optkey == '-l':
|
||||
filelist_filename = optval
|
||||
if optkey == '-v':
|
||||
verbose = 1
|
||||
if optkey == '-m':
|
||||
opt_m = 1
|
||||
if optkey == '-r':
|
||||
old_filename = optval
|
||||
if optkey == '-L':
|
||||
locales_dir = optval
|
||||
if optkey == '-a':
|
||||
opt_a = 1
|
||||
if optkey == '-f':
|
||||
opt_f = 1
|
||||
|
||||
if not remaining_args:
|
||||
usage()
|
||||
|
||||
pkg_dir = remaining_args[0]
|
||||
|
||||
packages = opkg.Packages()
|
||||
|
||||
old_pkg_hash = {}
|
||||
if packages_filename and not old_filename and os.path.exists(packages_filename):
|
||||
old_filename = packages_filename
|
||||
|
||||
pkgs_stamps = {}
|
||||
if old_filename:
|
||||
if verbose:
|
||||
sys.stderr.write("Reading package list from " + old_filename + "\n")
|
||||
old_packages = opkg.Packages()
|
||||
old_packages.read_packages_file(old_filename, opt_f)
|
||||
for k in list(old_packages.packages.keys()):
|
||||
pkg = old_packages.packages[k]
|
||||
old_pkg_hash[pkg.filename] = pkg
|
||||
try:
|
||||
with open(stamplist_filename, "r") as stamplist_filename_hdl:
|
||||
for line in stamplist_filename_hdl:
|
||||
line = line.strip()
|
||||
stamp, filename = line.split(" ", 1)
|
||||
pkgs_stamps[filename] = int(stamp)
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
if verbose:
|
||||
sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, ))
|
||||
|
||||
files = []
|
||||
opkg_extensions = ['.ipk', '.opk', '.deb']
|
||||
for dirpath, _, filenames in os.walk(pkg_dir):
|
||||
for filename in filenames:
|
||||
ext = os.path.splitext(filename)[1]
|
||||
if ext in opkg_extensions:
|
||||
files.append(os.path.join(dirpath, filename))
|
||||
|
||||
files.sort()
|
||||
for abspath in files:
|
||||
try:
|
||||
filename = os.path.relpath(abspath, pkg_dir)
|
||||
pkg = None
|
||||
stat = os.stat(abspath)
|
||||
if filename in old_pkg_hash:
|
||||
if filename in pkgs_stamps and int(stat.st_ctime) == pkgs_stamps[filename]:
|
||||
if verbose:
|
||||
sys.stderr.write("Found %s in Packages\n" % (filename,))
|
||||
pkg = old_pkg_hash[filename]
|
||||
else:
|
||||
sys.stderr.write("Found %s in Packages, but ctime differs - re-reading\n"
|
||||
% (filename,))
|
||||
|
||||
if not pkg:
|
||||
if verbose:
|
||||
sys.stderr.write("Reading info for package %s\n" % (filename,))
|
||||
pkg = opkg.Package(abspath, relpath=pkg_dir, all_fields=opt_f)
|
||||
|
||||
if opt_a:
|
||||
pkg_key = ("%s:%s:%s" % (pkg.package, pkg.architecture, pkg.version))
|
||||
else:
|
||||
pkg_key = ("%s:%s" % (pkg.package, pkg.architecture))
|
||||
|
||||
if pkg_key in packages.packages:
|
||||
old_filename = packages.packages[pkg_key].filename
|
||||
else:
|
||||
old_filename = ""
|
||||
ret = packages.add_package(pkg, opt_a)
|
||||
pkgs_stamps[filename] = stat.st_ctime
|
||||
if ret == 0:
|
||||
if old_filename:
|
||||
# old package was displaced by newer
|
||||
if opt_m:
|
||||
to_morgue(old_filename, pkg_dir, verbose)
|
||||
if opt_s:
|
||||
print(("%s/%s" % (pkg_dir, old_filename)))
|
||||
else:
|
||||
if opt_m:
|
||||
to_morgue(filename, pkg_dir, verbose)
|
||||
if opt_s:
|
||||
print(filename)
|
||||
except OSError as ex:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (filename, ex))
|
||||
continue
|
||||
except IOError as ex:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (filename, ex))
|
||||
continue
|
||||
|
||||
pkgs_stamps_file = open(stamplist_filename, "w")
|
||||
for filename in list(pkgs_stamps.keys()):
|
||||
pkgs_stamps_file.write("%d %s\n" % (pkgs_stamps[filename], filename))
|
||||
pkgs_stamps_file.close()
|
||||
|
||||
if opt_s:
|
||||
sys.exit(0)
|
||||
|
||||
if verbose:
|
||||
sys.stderr.write("Generating Packages file\n")
|
||||
if packages_filename:
|
||||
tmp_packages_filename = ("%s.%d" % (packages_filename, os.getpid()))
|
||||
pkgs_file = open(tmp_packages_filename, "w")
|
||||
names = list(packages.packages.keys())
|
||||
names.sort()
|
||||
for name in names:
|
||||
try:
|
||||
pkg = packages.packages[name]
|
||||
if locales_dir and pkg.depends:
|
||||
depends = pkg.depends.split(',')
|
||||
locale = None
|
||||
for depend in depends:
|
||||
match = re.match('.*virtual-locale-([a-zA-Z]+).*', depend)
|
||||
match_by_pkg = re.match('locale-base-([a-zA-Z]+)([-+])?.*', pkg.package)
|
||||
if match:
|
||||
locale = match.group(1)
|
||||
if match_by_pkg:
|
||||
locale = match_by_pkg.group(1)
|
||||
if locale:
|
||||
to_locale(pkg.filename, locale, pkg_dir, locales_dir, verbose)
|
||||
continue
|
||||
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))
|
||||
sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
|
||||
if packages_filename:
|
||||
pkgs_file.write(str(pkg))
|
||||
else:
|
||||
print(pkg)
|
||||
except OSError as ex:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, ex))
|
||||
continue
|
||||
except IOError as e:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e))
|
||||
except IOError as ex:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, ex))
|
||||
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)
|
||||
if packages_filename:
|
||||
pkgs_file.close()
|
||||
gzip_filename = ("%s.gz" % packages_filename)
|
||||
tmp_gzip_filename = ("%s.%d" % (gzip_filename, os.getpid()))
|
||||
gzip_cmd = "gzip -9c < %s > %s" % (tmp_packages_filename, tmp_gzip_filename)
|
||||
subprocess.call(gzip_cmd, shell=True)
|
||||
os.rename(tmp_packages_filename, packages_filename)
|
||||
os.rename(tmp_gzip_filename, gzip_filename)
|
||||
|
||||
if 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]))
|
||||
file_list = packages[name].get_file_list_dir(pkg_dir)
|
||||
# sys.stderr.write("Filelist for package '%s': '%s'\n" % (name, fnlist))
|
||||
except OSError as ex:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, ex))
|
||||
continue
|
||||
except IOError as ex:
|
||||
sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, ex))
|
||||
continue
|
||||
for filepath in file_list:
|
||||
(_, filename) = os.path.split(filepath)
|
||||
if not filename:
|
||||
continue
|
||||
if filename not in files:
|
||||
files[filename] = name+':'+filepath
|
||||
else:
|
||||
files[filename] = files[filename] + ',' + name+':'+filepath
|
||||
|
||||
tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid()))
|
||||
with open(tmp_filelist_filename, "w") as tmp_filelist_filename_hdl:
|
||||
names = list(files.keys())
|
||||
names.sort()
|
||||
for name in names:
|
||||
tmp_filelist_filename_hdl.write("%s %s\n" % (name, files[name]))
|
||||
if posixpath.exists(filelist_filename):
|
||||
os.unlink(filelist_filename)
|
||||
os.rename(tmp_filelist_filename, filelist_filename)
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
|
||||
Reference in New Issue
Block a user