opkg: Fix common linter warnings

This patch fixes common linter warnings

Signed-off-by: Robert Lehmann <robert.lehmann@sitec-systems.de>
Signed-off-by: Alex Stewart <astewart.49c6@gmail.com>
This commit is contained in:
Robert Lehmann
2024-07-10 10:36:59 +02:00
committed by Alex Stewart
parent 858312ba2c
commit d179a334f7

165
opkg.py
View File

@@ -38,14 +38,12 @@ from __future__ import print_function
import tempfile
import os
import sys
import glob
import hashlib
import re
import subprocess
from stat import ST_SIZE
import arfile
import tarfile
import textwrap
import collections
@@ -64,6 +62,7 @@ def order(x):
class Version(object):
"""A class for holding parsed package version information."""
def __init__(self, epoch, version):
self.epoch = epoch
self.version = version
@@ -77,8 +76,10 @@ class Version(object):
One slight modification, the original version can return any value, whereas this one is limited to -1, 0, +1
"""
if not selfversion: selfversion = ""
if not refversion: refversion = ""
if not selfversion:
selfversion = ""
if not refversion:
refversion = ""
value = list(selfversion)
ref = list(refversion)
@@ -125,17 +126,15 @@ class Version(object):
else:
self_ver_comps = re.match(r"(.+?)(-r.+)?$", self.version)
ref_ver_comps = re.match(r"(.+?)(-r.+)?$", ref.version)
#print((self_ver_comps.group(1), self_ver_comps.group(2)))
#print((ref_ver_comps.group(1), ref_ver_comps.group(2)))
r = self._versioncompare(self_ver_comps.group(1), ref_ver_comps.group(1))
if r == 0:
r = self._versioncompare(self_ver_comps.group(2), ref_ver_comps.group(2))
#print("compare: %s vs %s = %d" % (self, ref, r))
return r
def __str__(self):
return str(self.epoch) + ":" + self.version
def parse_version(versionstr):
epoch = 0
# check for epoch
@@ -145,6 +144,7 @@ def parse_version(versionstr):
epoch = int(epochstr)
return Version(epoch, versionstr)
class Package(object):
"""A class for creating objects to manipulate (e.g. create) opkg
packages."""
@@ -170,9 +170,6 @@ class Package(object):
self.section = None
self.filename_header = None
self.file_list = []
# md5 and size is lazy attribute, computed on demand
#self.md5 = None
#self.size = None
self.installed_size = None
self.filename = None
self.file_ext_opk = "ipk"
@@ -193,8 +190,6 @@ class Package(object):
else:
self.filename = os.path.basename(fn)
## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
if tarfile.is_tarfile(fn):
tar = tarfile.open(fn, "r", f)
tarStream = tar.extractfile("./control.tar.gz")
@@ -235,9 +230,10 @@ class Package(object):
f = open(self.fn, "rb")
sum = hashlib.md5()
while True:
data = f.read(1024)
if not data: break
sum.update(data)
data = f.read(1024)
if not data:
break
sum.update(data)
f.close()
self.md5 = sum.hexdigest()
@@ -249,26 +245,26 @@ class Package(object):
f = open(self.fn, "rb")
sum = hashlib.sha256()
while True:
data = f.read(1024)
if not data: break
sum.update(data)
data = f.read(1024)
if not data:
break
sum.update(data)
f.close()
self.sha256 = sum.hexdigest()
def _get_file_size(self):
if not self.fn:
self.size = 0;
self.size = 0
else:
stat = os.stat(self.fn)
self.size = stat[ST_SIZE]
return int(self.size)
def read_control(self, control, all_fields=None):
import os
line = control.readline()
while 1:
if not line: break
if not line:
break
# Decode if stream has byte strings
if not isinstance(line, str):
line = line.decode()
@@ -280,8 +276,11 @@ class Package(object):
value = lineparts.group(2)
while 1:
line = control.readline().rstrip()
if not line: break
if line[0] != ' ': break
if not line:
break
if line[0] != ' ':
break
value = value + '\n' + line
if name_lowercase == 'size':
self.size = int(value)
@@ -298,15 +297,14 @@ class Package(object):
pass
if line and line[0] == '\n':
return # consumes one blank line at end of package descriptoin
return # consumes one blank line at end of package description
else:
line = control.readline()
pass
return
return
def _setup_scratch_area(self):
self.scratch_dir = "%s/%sopkg" % (tempfile.gettempdir(),
tempfile.gettempprefix())
self.scratch_dir = "%s/%sopkg" % (tempfile.gettempdir(), tempfile.gettempprefix())
self.file_dir = "%s/files" % (self.scratch_dir)
self.meta_dir = "%s/meta" % (self.scratch_dir)
@@ -429,7 +427,6 @@ class Package(object):
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))
@@ -460,11 +457,10 @@ class Package(object):
file.write(str(self))
file.close()
cmd = "cd %s ; tar cvz --format=gnu -f %s/control.tar.gz control" % (self.meta_dir,
self.scratch_dir)
cmd = "cd %s ; tar cvz --format=gnu -f %s/control.tar.gz control" % (self.meta_dir, self.scratch_dir)
cmd_out, cmd_in, cmd_err = os.popen3(cmd)
while cmd_err.readline() != "":
pass
@@ -475,25 +471,20 @@ class Package(object):
bits = "control.tar.gz"
if self.file_list:
cmd = "cd %s ; tar cvz --format=gnu -f %s/data.tar.gz" % (self.file_dir,
self.scratch_dir)
cmd = "cd %s ; tar cvz --format=gnu -f %s/data.tar.gz" % (self.file_dir, self.scratch_dir)
cmd_out, cmd_in, cmd_err = os.popen3(cmd)
cmd_out, cmd_in, cmd_err = os.popen3(cmd)
while cmd_err.readline() != "":
pass
while cmd_err.readline() != "":
pass
cmd_out.close()
cmd_in.close()
cmd_err.close()
cmd_out.close()
cmd_in.close()
cmd_err.close()
bits = bits + " data.tar.gz"
bits = bits + " data.tar.gz"
file = "%s_%s_%s.%s" % (self.package, self.version, self.architecture, self.get_package_extension())
cmd = "cd %s ; tar cvz --format=gnu -f %s/%s %s" % (self.scratch_dir,
dirname,
file,
bits)
cmd = "cd %s ; tar cvz --format=gnu -f %s/%s %s" % (self.scratch_dir, dirname, file, bits)
cmd_out, cmd_in, cmd_err = os.popen3(cmd)
@@ -522,31 +513,54 @@ class Package(object):
# XXX - Some checks need to be made, and some exceptions
# need to be thrown. -- a7r
if self.package: out = out + "Package: %s\n" % (self.package)
if self.version: out = out + "Version: %s\n" % (self.version)
if self.depends: out = out + "Depends: %s\n" % (self.depends)
if self.provides: out = out + "Provides: %s\n" % (self.provides)
if self.replaces: out = out + "Replaces: %s\n" % (self.replaces)
if self.conflicts: out = out + "Conflicts: %s\n" % (self.conflicts)
if self.suggests: out = out + "Suggests: %s\n" % (self.suggests)
if self.recommends: out = out + "Recommends: %s\n" % (self.recommends)
if self.section: out = out + "Section: %s\n" % (self.section)
if self.architecture: out = out + "Architecture: %s\n" % (self.architecture)
if self.maintainer: out = out + "Maintainer: %s\n" % (self.maintainer)
if self.package:
out = out + "Package: %s\n" % (self.package)
if self.version:
out = out + "Version: %s\n" % (self.version)
if self.depends:
out = out + "Depends: %s\n" % (self.depends)
if self.provides:
out = out + "Provides: %s\n" % (self.provides)
if self.replaces:
out = out + "Replaces: %s\n" % (self.replaces)
if self.conflicts:
out = out + "Conflicts: %s\n" % (self.conflicts)
if self.suggests:
out = out + "Suggests: %s\n" % (self.suggests)
if self.recommends:
out = out + "Recommends: %s\n" % (self.recommends)
if self.section:
out = out + "Section: %s\n" % (self.section)
if self.architecture:
out = out + "Architecture: %s\n" % (self.architecture)
if self.maintainer:
out = out + "Maintainer: %s\n" % (self.maintainer)
if 'md5' in checksum:
if self.md5: out = out + "MD5Sum: %s\n" % (self.md5)
if self.md5:
out = out + "MD5Sum: %s\n" % (self.md5)
if 'sha256' in checksum:
if self.sha256: out = out + "SHA256sum: %s\n" % (self.sha256)
if self.size: out = out + "Size: %d\n" % int(self.size)
if self.installed_size: out = out + "InstalledSize: %d\n" % int(self.installed_size)
if self.filename: out = out + "Filename: %s\n" % (self.filename)
if self.source: out = out + "Source: %s\n" % (self.source)
if self.description: out = out + "Description: %s\n" % (self.description)
if self.oe: out = out + "OE: %s\n" % (self.oe)
if self.homepage: out = out + "HomePage: %s\n" % (self.homepage)
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.sha256:
out = out + "SHA256sum: %s\n" % (self.sha256)
if self.size:
out = out + "Size: %d\n" % int(self.size)
if self.installed_size:
out = out + "InstalledSize: %d\n" % int(self.installed_size)
if self.filename:
out = out + "Filename: %s\n" % (self.filename)
if self.source:
out = out + "Source: %s\n" % (self.source)
if self.description:
out = out + "Description: %s\n" % (self.description)
if self.oe:
out = out + "OE: %s\n" % (self.oe)
if self.homepage:
out = out + "HomePage: %s\n" % (self.homepage)
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)
@@ -559,8 +573,10 @@ class Package(object):
# are being destroyed? -- a7r
pass
class Packages(object):
"""A currently unimplemented wrapper around the opkg utility."""
def __init__(self):
self.packages = {}
return
@@ -576,7 +592,7 @@ class Packages(object):
if (name not in self.packages):
self.packages[name] = pkg
if pkg.compare_version(self.packages[name]) >= 0:
self.packages[name] = pkg
return 0
@@ -596,7 +612,7 @@ class Packages(object):
self.add_package(pkg)
else:
break
f.close()
f.close()
return
def write_packages_file(self, fn):
@@ -605,7 +621,7 @@ class Packages(object):
names.sort()
for name in names:
f.write(self.packages[name].__str__())
return
return
def keys(self):
return list(self.packages.keys())
@@ -613,8 +629,8 @@ class Packages(object):
def __getitem__(self, key):
return self.packages[key]
if __name__ == "__main__":
def main():
assert Version(0, "1.2.2-r1").compare(Version(0, "1.2.3-r0")) == -1
assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2+cvs20070308-r0")) == -1
assert Version(0, "1.2.2+cvs20070308").compare(Version(0, "1.2.2-r0")) == 1
@@ -647,3 +663,6 @@ if __name__ == "__main__":
package.write_package("/tmp")
if __name__ == "__main__":
main()