summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro del Castillo <alejandro.delcastillo@ni.com>2016-05-27 16:26:42 -0500
committerAlejandro del Castillo <alejandro.delcastillo@ni.com>2016-06-01 17:17:44 -0500
commit9e2381d9c78bda97b9863dc3c72fce5a14dfb5a7 (patch)
tree5d88cc607137fb5bebe68a01124cc86b88117c07
parentb6392d97e74d8e600bfe0184baf289aaccd33381 (diff)
downloadopkg-utils-9e2381d9c78bda97b9863dc3c72fce5a14dfb5a7.tar.gz
opkg-utils-9e2381d9c78bda97b9863dc3c72fce5a14dfb5a7.tar.bz2
opkg-utils-9e2381d9c78bda97b9863dc3c72fce5a14dfb5a7.zip
migrate to python 3
General fixes * Add __future__ imports * Use print function instead of print statement * Use new style classes * Iterate over list, instead of over object.keys() * Use six.iteritems instead of iteritems() opkg.py: * Add conditional to decode string if needed in Package:read_control arfile.py * Add seekable method to FileSection class (needed by tarfile) Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
-rw-r--r--arfile.py10
-rwxr-xr-xmakePackage2
-rwxr-xr-xopkg-compare-indexes2
-rwxr-xr-xopkg-graph-deps39
-rwxr-xr-xopkg-list-fields2
-rwxr-xr-xopkg-make-index2
-rwxr-xr-xopkg-show-deps2
-rwxr-xr-xopkg-unbuild2
-rwxr-xr-xopkg-update-index1
-rw-r--r--opkg.py17
10 files changed, 52 insertions, 27 deletions
diff --git a/arfile.py b/arfile.py
index 88ace46..4bab526 100644
--- a/arfile.py
+++ b/arfile.py
@@ -5,12 +5,15 @@ Copyright (c) 2006-7 Paul Sokolovsky
This file is released under the terms
of GNU General Public License v2 or later.
"""
+from __future__ import absolute_import
+from __future__ import print_function
+from builtins import object
import sys
import os
import tarfile
-class FileSection:
+class FileSection(object):
"A class which allows to treat portion of file as separate file object."
def __init__(self, f, offset, size):
@@ -30,6 +33,9 @@ class FileSection:
else:
assert False
+ def seekable(self):
+ return True
+
def tell(self):
# print("tell()")
return self.f.tell() - self.offset
@@ -38,7 +44,7 @@ class FileSection:
# print("read(%d)" % size)
return self.f.read(size)
-class ArFile:
+class ArFile(object):
def __init__(self, f, fn):
self.f = f
diff --git a/makePackage b/makePackage
index ec76338..4bdfc56 100755
--- a/makePackage
+++ b/makePackage
@@ -5,6 +5,8 @@
# Insert the filename, size, and md5 lines before the description.
# Call it like this:
# find . -name \*.opk | xargs -n 1 makePackage > Packages
+from __future__ import absolute_import
+from __future__ import print_function
import sys
import opkg
diff --git a/opkg-compare-indexes b/opkg-compare-indexes
index 7bb3c69..b60d20a 100755
--- a/opkg-compare-indexes
+++ b/opkg-compare-indexes
@@ -1,4 +1,6 @@
#!/usr/bin/env python
+from __future__ import absolute_import
+from __future__ import print_function
import sys, os
from glob import glob
diff --git a/opkg-graph-deps b/opkg-graph-deps
index d7f4fd2..6653fd5 100755
--- a/opkg-graph-deps
+++ b/opkg-graph-deps
@@ -1,18 +1,21 @@
#!/usr/bin/env python
+from __future__ import absolute_import
+from __future__ import print_function
import sys
import os
import getopt
import pydot
import opkg
+import six
def usage(more=False):
- print >>sys.stderr, ( 'Usage: opkg-graph-deps '
+ print(( 'Usage: opkg-graph-deps '
'[-h] [-d] [-o feed.dot] '
'[-u <Base_feed_URL>] '
- '<Paths_to_Packages_files>' )
+ '<Paths_to_Packages_files>' ), file=sys.stderr)
if more:
- print >>sys.stderr, '\n'.join( [
+ print('\n'.join( [
'',
'Generates a dot formatted dependency graph of an IPK feed.',
'',
@@ -56,7 +59,7 @@ def usage(more=False):
' the alias != (to).',
' ipkBrokenDep: Set to "1" if (to) is missing from the feed.',
'',
- ] )
+ ] ), file=sys.stderr)
exit(1)
# optional args
@@ -76,19 +79,19 @@ for (optkey, optval) in opts:
feed_url = optval
if not index_files:
- print >>sys.stderr, 'Must specify a path to at least one Packages file'
+ print('Must specify a path to at least one Packages file', file=sys.stderr)
usage()
def fatal_error(msg):
- print >>sys.stderr, ('ERROR: ' + str(msg))
+ print(('ERROR: ' + str(msg)), file=sys.stderr)
exit(1)
def warn(msg):
- print >>sys.stderr, str(msg)
+ print(str(msg), file=sys.stderr)
def debug(msg):
if enable_debug:
- print >>sys.stderr, ('DEBUG: ' + str(msg))
+ print(('DEBUG: ' + str(msg)), file=sys.stderr)
def split_dep_list(lst):
'''
@@ -190,7 +193,7 @@ for indexFilePath in index_files:
packages.read_packages_file(indexFilePath)
# add each package
- for pkgKey in packages.keys():
+ for pkgKey in list(packages.keys()):
pkg = packages[pkgKey]
# sanity check: verify important attributes are defined for
@@ -228,7 +231,7 @@ for indexFilePath in index_files:
# provides the alias.
# These packages are not added to the graph because their implementations
# are already there.
-for pkgKey, pkg in real_pkg_map.iteritems():
+for pkgKey, pkg in six.iteritems(real_pkg_map):
for alias in split_dep_list(pkg.provides):
if alias not in active_pkg_map:
# add it
@@ -260,7 +263,7 @@ for pkgKey, pkg in real_pkg_map.iteritems():
virt_pkg_map[alias].append(pkg)
# Print alternatives for virtual packages
-for pkgKey, pkgList in virt_pkg_map.iteritems():
+for pkgKey, pkgList in six.iteritems(virt_pkg_map):
if len(pkgList) > 1:
pkgNameList = ','.join( [x.package for x in pkgList] )
debug("%s alternate implementations of package %s: %s" % (len(pkgList), pkgKey, pkgNameList))
@@ -271,7 +274,7 @@ for pkgKey, pkgList in virt_pkg_map.iteritems():
# Create stub packages in missing_pkg_map and active_pkg_map for broken
# dependencies, and add them to the graph.
-for pkgKey, pkg in real_pkg_map.iteritems():
+for pkgKey, pkg in six.iteritems(real_pkg_map):
for depName in split_dep_list(pkg.depends):
if not depName in active_pkg_map:
warn("Broken dependency: %s --> %s (missing)" % (
@@ -288,7 +291,7 @@ for pkgKey, pkg in real_pkg_map.iteritems():
# process dependencies
# add edges to graph
-for pkgKey, pkg in real_pkg_map.iteritems():
+for pkgKey, pkg in six.iteritems(real_pkg_map):
for depName in split_dep_list(pkg.depends):
depPkg = active_pkg_map[depName]
@@ -297,10 +300,10 @@ for pkgKey, pkg in real_pkg_map.iteritems():
broken=(depPkg.package in missing_pkg_map) )
# Results
-print "%s total packages are referenced in the feed" % len(active_pkg_map)
-print " %s real packages (%s collisions)" % ( len(real_pkg_map), real_pkg_replace_count )
-print " %s virtual packages" % len(virt_pkg_map)
-print " %s missing packages" % len(missing_pkg_map)
+print("%s total packages are referenced in the feed" % len(active_pkg_map))
+print(" %s real packages (%s collisions)" % ( len(real_pkg_map), real_pkg_replace_count ))
+print(" %s virtual packages" % len(virt_pkg_map))
+print(" %s missing packages" % len(missing_pkg_map))
# sanity check
if len(active_pkg_map) != (len(real_pkg_map) + len(virt_pkg_map) + len(missing_pkg_map)):
@@ -308,4 +311,4 @@ if len(active_pkg_map) != (len(real_pkg_map) + len(virt_pkg_map) + len(missing_p
# Write the graph
graph.write(path=dot_filename)
-print "Graphed at %s" % dot_filename
+print("Graphed at %s" % dot_filename)
diff --git a/opkg-list-fields b/opkg-list-fields
index 1fb7fd1..c14a90f 100755
--- a/opkg-list-fields
+++ b/opkg-list-fields
@@ -1,4 +1,6 @@
#!/usr/bin/env python
+from __future__ import absolute_import
+from __future__ import print_function
import sys, opkg
diff --git a/opkg-make-index b/opkg-make-index
index 2fdf95c..7897918 100755
--- a/opkg-make-index
+++ b/opkg-make-index
@@ -1,4 +1,6 @@
#!/usr/bin/env python
+from __future__ import absolute_import
+from __future__ import print_function
import sys, os, posixpath
import subprocess
diff --git a/opkg-show-deps b/opkg-show-deps
index 4694579..153f21e 100755
--- a/opkg-show-deps
+++ b/opkg-show-deps
@@ -1,4 +1,6 @@
#!/usr/bin/env python
+from __future__ import absolute_import
+from __future__ import print_function
import sys, os, posixpath
from glob import glob
diff --git a/opkg-unbuild b/opkg-unbuild
index 35a387f..4f36bec 100755
--- a/opkg-unbuild
+++ b/opkg-unbuild
@@ -1,4 +1,6 @@
#!/usr/bin/env python
+from __future__ import absolute_import
+from __future__ import print_function
import sys, os, re
diff --git a/opkg-update-index b/opkg-update-index
index 353ea69..341c1c2 100755
--- a/opkg-update-index
+++ b/opkg-update-index
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+from __future__ import absolute_import
import sys, os
from glob import glob
diff --git a/opkg.py b/opkg.py
index ae0fbcd..fe6b9e0 100644
--- a/opkg.py
+++ b/opkg.py
@@ -31,6 +31,8 @@
# people to say "./control.tar.gz" or "./control" when they package files.
# It would be much better to require ./control or disallow ./control (either)
# rather than letting people pick. Some freedoms aren't worth their cost.
+from __future__ import absolute_import
+from __future__ import print_function
import tempfile
import os
@@ -44,7 +46,7 @@ import arfile
import tarfile
import textwrap
-class Version:
+class Version(object):
"""A class for holding parsed package version information."""
def __init__(self, epoch, version):
self.epoch = epoch
@@ -113,7 +115,7 @@ def parse_version(versionstr):
epoch = int(epochstr)
return Version(epoch, versionstr)
-class Package:
+class Package(object):
"""A class for creating objects to manipulate (e.g. create) opkg
packages."""
@@ -165,7 +167,6 @@ class Package:
ar = arfile.ArFile(f, fn)
tarStream = ar.open("control.tar.gz")
tarf = tarfile.open("control.tar.gz", "r", tarStream)
-
try:
control = tarf.extractfile("control")
except KeyError:
@@ -175,7 +176,6 @@ class Package:
except TypeError as e:
sys.stderr.write("Cannot read control file '%s' - %s\n" % (fn, e))
control.close()
-
self.scratch_dir = None
self.file_dir = None
self.meta_dir = None
@@ -217,8 +217,11 @@ class Package:
line = control.readline()
while 1:
if not line: break
+ # Decode if stream has byte strings
+ if not isinstance(line, str):
+ line = line.decode()
line = line.rstrip()
- lineparts = re.match(r'([\w-]*?):\s*(.*)', str(line))
+ lineparts = re.match(r'([\w-]*?):\s*(.*)', line)
if lineparts:
name = lineparts.group(1).lower()
value = lineparts.group(2)
@@ -378,7 +381,7 @@ class Package:
tarStream = ar.open("data.tar.gz")
tarf = tarfile.open("data.tar.gz", "r", tarStream)
self.file_list = tarf.getnames()
- self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list)
+ self.file_list = [["./", ""][a.startswith("./")] + a for a in self.file_list]
f.close()
return self.file_list
@@ -490,7 +493,7 @@ class Package:
# are being destroyed? -- a7r
pass
-class Packages:
+class Packages(object):
"""A currently unimplemented wrapper around the opkg utility."""
def __init__(self):
self.packages = {}