mirror of
https://git.yoctoproject.org/git/opkg-utils
synced 2026-05-07 00:15:53 +02:00
opkg.py/opkg-make-index: Add option to include all fields
If the -f option is enabled, opkg-make-index will include user-defined fields in the package index rather than discarding them. This change is motivated by the fact that opkg now has support for user-defined fields in the package index. Signed-off-by: Jeffrey Pautler <jeffrey.pautler@ni.com> Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
This commit is contained in:
committed by
Alejandro del Castillo
parent
6cd5925cf7
commit
13f6281d24
@@ -11,7 +11,7 @@ import re
|
||||
verbose = 0
|
||||
|
||||
def usage():
|
||||
sys.stderr.write("%s [-h] [-s] [-m] [-a] [-l Packages.filelist] [-p Packages] [-r Packages.old] [-L localesdir] [-v] packagesdir\n" % (sys.argv[0],))
|
||||
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):
|
||||
@@ -43,7 +43,8 @@ stamplist_filename = "Packages.stamps"
|
||||
opt_s = 0
|
||||
opt_m = 0
|
||||
opt_a = 0
|
||||
(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:a")
|
||||
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()
|
||||
@@ -64,6 +65,8 @@ for (optkey, optval) in opts:
|
||||
locales_dir = optval
|
||||
if optkey == '-a':
|
||||
opt_a = 1
|
||||
if optkey == '-f':
|
||||
opt_f = 1
|
||||
|
||||
if ( not remaining_args ):
|
||||
usage()
|
||||
@@ -81,7 +84,7 @@ 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)
|
||||
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
|
||||
@@ -122,7 +125,7 @@ for abspath in files:
|
||||
if not pkg:
|
||||
if (verbose):
|
||||
sys.stderr.write("Reading info for package %s\n" % (filename,))
|
||||
pkg = opkg.Package(abspath, relpath=pkg_dir)
|
||||
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))
|
||||
|
||||
28
opkg.py
28
opkg.py
@@ -45,6 +45,7 @@ from stat import ST_SIZE
|
||||
import arfile
|
||||
import tarfile
|
||||
import textwrap
|
||||
import collections
|
||||
|
||||
class Version(object):
|
||||
"""A class for holding parsed package version information."""
|
||||
@@ -123,7 +124,7 @@ class Package(object):
|
||||
# relpath: If this argument is set, the file path is given relative to this
|
||||
# path when a string representation of the Package object is created. If
|
||||
# this argument is not set, the basename of the file path is given.
|
||||
def __init__(self, fn=None, relpath=None):
|
||||
def __init__(self, fn=None, relpath=None, all_fields=None):
|
||||
self.package = None
|
||||
self.version = 'none'
|
||||
self.parsed_version = None
|
||||
@@ -153,6 +154,7 @@ class Package(object):
|
||||
self.fn = fn
|
||||
self.license = None
|
||||
|
||||
self.user_defined_fields = collections.OrderedDict()
|
||||
if fn:
|
||||
# see if it is deb format
|
||||
f = open(fn, "rb")
|
||||
@@ -176,7 +178,7 @@ class Package(object):
|
||||
except KeyError:
|
||||
control = tarf.extractfile("./control")
|
||||
try:
|
||||
self.read_control(control)
|
||||
self.read_control(control, all_fields)
|
||||
except TypeError as e:
|
||||
sys.stderr.write("Cannot read control file '%s' - %s\n" % (fn, e))
|
||||
control.close()
|
||||
@@ -215,7 +217,7 @@ class Package(object):
|
||||
self.size = stat[ST_SIZE]
|
||||
return int(self.size)
|
||||
|
||||
def read_control(self, control):
|
||||
def read_control(self, control, all_fields=None):
|
||||
import os
|
||||
|
||||
line = control.readline()
|
||||
@@ -227,19 +229,22 @@ class Package(object):
|
||||
line = line.rstrip()
|
||||
lineparts = re.match(r'([\w-]*?):\s*(.*)', line)
|
||||
if lineparts:
|
||||
name = lineparts.group(1).lower()
|
||||
name = lineparts.group(1)
|
||||
name_lowercase = name.lower()
|
||||
value = lineparts.group(2)
|
||||
while 1:
|
||||
line = control.readline().rstrip()
|
||||
if not line: break
|
||||
if line[0] != ' ': break
|
||||
value = value + '\n' + line
|
||||
if name == 'size':
|
||||
if name_lowercase == 'size':
|
||||
self.size = int(value)
|
||||
elif name == 'md5sum':
|
||||
elif name_lowercase == 'md5sum':
|
||||
self.md5 = value
|
||||
elif name in self.__dict__:
|
||||
self.__dict__[name] = value
|
||||
elif name_lowercase in self.__dict__:
|
||||
self.__dict__[name_lowercase] = value
|
||||
elif all_fields:
|
||||
self.user_defined_fields[name] = value
|
||||
else:
|
||||
print("Lost field %s, %s" % (name,value))
|
||||
pass
|
||||
@@ -486,6 +491,9 @@ class Package(object):
|
||||
if self.license: out = out + "License: %s\n" % (self.license)
|
||||
if self.priority: out = out + "Priority: %s\n" % (self.priority)
|
||||
if self.tags: out = out + "Tags: %s\n" % (self.tags)
|
||||
if self.user_defined_fields:
|
||||
for k, v in self.user_defined_fields.items():
|
||||
out = out + "%s: %s\n" % (k, v)
|
||||
out = out + "\n"
|
||||
|
||||
return out
|
||||
@@ -519,12 +527,12 @@ class Packages(object):
|
||||
else:
|
||||
return 1
|
||||
|
||||
def read_packages_file(self, fn):
|
||||
def read_packages_file(self, fn, all_fields=None):
|
||||
f = open(fn, "r")
|
||||
while True:
|
||||
pkg = Package()
|
||||
try:
|
||||
pkg.read_control(f)
|
||||
pkg.read_control(f, all_fields)
|
||||
except TypeError as e:
|
||||
sys.stderr.write("Cannot read control file '%s' - %s\n" % (fn, e))
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user