From: Robert Schwebel <r.schwebel@pengutronix.de>
To: ptxdist@pengutronix.de
Cc: Robert Schwebel <r.schwebel@pengutronix.de>
Subject: [ptxdist] [PATCH 2/4] host-opkg-utils: version bump
Date: Tue, 14 Jan 2014 08:19:47 +0100 [thread overview]
Message-ID: <1389683989-4494-2-git-send-email-r.schwebel@pengutronix.de> (raw)
In-Reply-To: <1389683989-4494-1-git-send-email-r.schwebel@pengutronix.de>
In the meantime, opkg and opkg-utils are maintained again.
The new repository is here:
http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/
As of Mo 13. Jan 20:48:06 CET 2014, the last change was:
0f6a67bc150c0396dd7eeb477a0b9a1ce58a2118 CONTRIBUTING: New file
The old patches 0001, 0003, 0004 and 0007 are already in upstream.
The old patches 0002, 0005 and 0006 are now ported as
0035-opkg-make-ar-deterministic.patch
0036-opkg-build-use-CROSS_COMPILE-ar.patch
0037-Fill-out-Installed-Size.patch
Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
---
...e-versions-Adapted-to-the-latest-opkg-ups.patch | 90 +++++++
...tils-use-env-python-instead-of-fixed-path.patch | 67 ------
.../0002-opkg-make-ar-deterministic.patch | 50 ----
...ndex-don-t-error-out-when-some-package-di.patch | 78 ++++++
.../0003-opkg-build-don-t-use-bashism.patch | 22 --
...ndex-convert-mtime-to-int-before-comparin.patch | 33 +++
.../0004-opkg-Added-sha256-support.patch | 89 -------
...-knowledge-about-License-field-in-ipk-hea.patch | 43 ++++
.../0005-arfile.py-handle-six-digit-UIDs.patch | 32 +++
.../0005-opkg-build-use-CROSS_COMPILE-ar.patch | 28 ---
.../0006-Fill-out-Installed-Size.patch | 36 ---
...via-the-PATH-rather-than-hardcoding-usr-b.patch | 65 +++++
.../0007-opkg-build-force-tar-gnu-format.patch | 39 ---
....py-use-hashlib-instead-of-old-md5-module.patch | 33 +++
...ile.py-report-which-file-has-wrong-format.patch | 100 ++++++++
...de-read-lines-as-ascii-string-before-gett.patch | 24 ++
...0-2to3-use-subprocess-instead-of-commands.patch | 97 ++++++++
.../opkg-utils-r4747/0011-2to3-print-fixes.patch | 266 +++++++++++++++++++++
.../0012-2to3-dictionary-fixes.patch | 235 ++++++++++++++++++
.../0013-2to3-exception-handling-fixes.patch | 59 +++++
...0014-opkg-make-index-show-OSError-IOError.patch | 58 +++++
...-string-funtcions-directly-on-string-vari.patch | 96 ++++++++
...ch-TypeError-when-reading-control-file-to.patch | 42 ++++
.../opkg-utils-r4747/0017-arfile-fix-test.patch | 23 ++
...ndex-don-t-use-stdout-for-Packages-output.patch | 86 +++++++
....py-cast-lines-from-controlfile-as-string.patch | 22 ++
...puteFileMD5-only-when-we-have-fn-otherwis.patch | 40 ++++
...-write_package-when-called-from-main-test.patch | 31 +++
...g.py-use-textwrap-for-description-writing.patch | 36 +++
...rove-test-so-it-prints-temporary-control-.patch | 37 +++
...pkg-make-index-generate-complete-filelist.patch | 124 ++++++++++
..._file_list_dir-fix-empty-output-from-find.patch | 41 ++++
...kg-make-index-disable-filelist-by-default.patch | 24 ++
...t-shown-in-usage-and-implemented-but-was-.patch | 24 ++
...l-to-subprocess.check_output-which-isn-t-.patch | 27 +++
...-check_output-defintion-so-it-works-on-py.patch | 45 ++++
...030-opkg-make-index-fix-mis-indented-else.patch | 22 ++
...y-opkg-build-fix-creation-of-tar-archives.patch | 79 ++++++
...32-opkg-build-Remove-bashism-in-sh-script.patch | 25 ++
.../opkg-utils-r4747/0033-AUTHORS-New-file.patch | 19 ++
.../0034-CONTRIBUTING-New-file.patch | 138 +++++++++++
.../0035-opkg-make-ar-deterministic.patch | 50 ++++
.../0036-opkg-build-use-CROSS_COMPILE-ar.patch | 28 +++
.../0037-Fill-out-Installed-Size.patch | 37 +++
patches/opkg-utils-r4747/series | 46 +++-
45 files changed, 2347 insertions(+), 339 deletions(-)
create mode 100644 patches/opkg-utils-r4747/0001-opkg-compare-versions-Adapted-to-the-latest-opkg-ups.patch
delete mode 100644 patches/opkg-utils-r4747/0001-opkg-utils-use-env-python-instead-of-fixed-path.patch
delete mode 100644 patches/opkg-utils-r4747/0002-opkg-make-ar-deterministic.patch
create mode 100644 patches/opkg-utils-r4747/0002-opkg-make-index-don-t-error-out-when-some-package-di.patch
delete mode 100644 patches/opkg-utils-r4747/0003-opkg-build-don-t-use-bashism.patch
create mode 100644 patches/opkg-utils-r4747/0003-opkg-make-index-convert-mtime-to-int-before-comparin.patch
delete mode 100644 patches/opkg-utils-r4747/0004-opkg-Added-sha256-support.patch
create mode 100644 patches/opkg-utils-r4747/0004-opkg.py-Add-knowledge-about-License-field-in-ipk-hea.patch
create mode 100644 patches/opkg-utils-r4747/0005-arfile.py-handle-six-digit-UIDs.patch
delete mode 100644 patches/opkg-utils-r4747/0005-opkg-build-use-CROSS_COMPILE-ar.patch
delete mode 100644 patches/opkg-utils-r4747/0006-Fill-out-Installed-Size.patch
create mode 100644 patches/opkg-utils-r4747/0006-Use-python-via-the-PATH-rather-than-hardcoding-usr-b.patch
delete mode 100644 patches/opkg-utils-r4747/0007-opkg-build-force-tar-gnu-format.patch
create mode 100644 patches/opkg-utils-r4747/0007-opkg.py-use-hashlib-instead-of-old-md5-module.patch
create mode 100644 patches/opkg-utils-r4747/0008-opkg.py-arfile.py-report-which-file-has-wrong-format.patch
create mode 100644 patches/opkg-utils-r4747/0009-arfile-decode-read-lines-as-ascii-string-before-gett.patch
create mode 100644 patches/opkg-utils-r4747/0010-2to3-use-subprocess-instead-of-commands.patch
create mode 100644 patches/opkg-utils-r4747/0011-2to3-print-fixes.patch
create mode 100644 patches/opkg-utils-r4747/0012-2to3-dictionary-fixes.patch
create mode 100644 patches/opkg-utils-r4747/0013-2to3-exception-handling-fixes.patch
create mode 100644 patches/opkg-utils-r4747/0014-opkg-make-index-show-OSError-IOError.patch
create mode 100644 patches/opkg-utils-r4747/0015-opkg.py-use-string-funtcions-directly-on-string-vari.patch
create mode 100644 patches/opkg-utils-r4747/0016-opkg.py-catch-TypeError-when-reading-control-file-to.patch
create mode 100644 patches/opkg-utils-r4747/0017-arfile-fix-test.patch
create mode 100644 patches/opkg-utils-r4747/0018-opkg-make-index-don-t-use-stdout-for-Packages-output.patch
create mode 100644 patches/opkg-utils-r4747/0019-opkg.py-cast-lines-from-controlfile-as-string.patch
create mode 100644 patches/opkg-utils-r4747/0020-opkg.py-computeFileMD5-only-when-we-have-fn-otherwis.patch
create mode 100644 patches/opkg-utils-r4747/0021-opkg.py-fix-write_package-when-called-from-main-test.patch
create mode 100644 patches/opkg-utils-r4747/0022-opkg.py-use-textwrap-for-description-writing.patch
create mode 100644 patches/opkg-utils-r4747/0023-opkg.py-improve-test-so-it-prints-temporary-control-.patch
create mode 100644 patches/opkg-utils-r4747/0024-opkg-make-index-generate-complete-filelist.patch
create mode 100644 patches/opkg-utils-r4747/0025-opkg.py-get_file_list_dir-fix-empty-output-from-find.patch
create mode 100644 patches/opkg-utils-r4747/0026-opkg-make-index-disable-filelist-by-default.patch
create mode 100644 patches/opkg-utils-r4747/0027-Option-C-ist-shown-in-usage-and-implemented-but-was-.patch
create mode 100644 patches/opkg-utils-r4747/0028-Changed-call-to-subprocess.check_output-which-isn-t-.patch
create mode 100644 patches/opkg-utils-r4747/0029-opkg.py-Add-check_output-defintion-so-it-works-on-py.patch
create mode 100644 patches/opkg-utils-r4747/0030-opkg-make-index-fix-mis-indented-else.patch
create mode 100644 patches/opkg-utils-r4747/0031-opkg.py-opkg-build-fix-creation-of-tar-archives.patch
create mode 100644 patches/opkg-utils-r4747/0032-opkg-build-Remove-bashism-in-sh-script.patch
create mode 100644 patches/opkg-utils-r4747/0033-AUTHORS-New-file.patch
create mode 100644 patches/opkg-utils-r4747/0034-CONTRIBUTING-New-file.patch
create mode 100644 patches/opkg-utils-r4747/0035-opkg-make-ar-deterministic.patch
create mode 100644 patches/opkg-utils-r4747/0036-opkg-build-use-CROSS_COMPILE-ar.patch
create mode 100644 patches/opkg-utils-r4747/0037-Fill-out-Installed-Size.patch
diff --git a/patches/opkg-utils-r4747/0001-opkg-compare-versions-Adapted-to-the-latest-opkg-ups.patch b/patches/opkg-utils-r4747/0001-opkg-compare-versions-Adapted-to-the-latest-opkg-ups.patch
new file mode 100644
index 0000000..95c3128
--- /dev/null
+++ b/patches/opkg-utils-r4747/0001-opkg-compare-versions-Adapted-to-the-latest-opkg-ups.patch
@@ -0,0 +1,90 @@
+From: Lianhao Lu <lianhao.lu@intel.com>
+Date: Tue, 10 Apr 2012 21:44:14 +0800
+Subject: [PATCH] opkg-compare-versions: Adapted to the latest opkg upstream.
+
+Adapted to the latest opkg upstream implemenation for comparing
+versions.
+
+This is part of the bug fixing [YOCTO #2233].
+
+Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ opkg-compare-versions.c | 59 ++++++++++++++++++++++---------------------------
+ 1 file changed, 27 insertions(+), 32 deletions(-)
+
+diff --git a/opkg-compare-versions.c b/opkg-compare-versions.c
+index d5133fa..62851fa 100644
+--- a/opkg-compare-versions.c
++++ b/opkg-compare-versions.c
+@@ -31,43 +31,38 @@ struct versionrevision {
+ const char *revision;
+ };
+
+-static int verrevcmp(const char *val, const char *ref)
+-{
+- int vc, rc;
+- long vl, rl;
+- const char *vp, *rp;
+- const char *vsep, *rsep;
+-
++/* assume ascii; warning: evaluates x multiple times! */
++#define order(x) ((x) == '~' ? -1 \
++ : isdigit((x)) ? 0 \
++ : !(x) ? 0 \
++ : isalpha((x)) ? (x) \
++ : (x) + 256)
++
++static int
++verrevcmp(const char *val, const char *ref) {
+ if (!val) val= "";
+ if (!ref) ref= "";
+- for (;;) {
+- vp= val; while (*vp && !isdigit(*vp)) vp++;
+- rp= ref; while (*rp && !isdigit(*rp)) rp++;
+- for (;;) {
+- vc= val == vp ? 0 : *val++;
+- rc= ref == rp ? 0 : *ref++;
+- if (!rc && !vc) break;
+- if (vc && !isalpha(vc)) vc += 256; /* assumes ASCII character set */
+- if (rc && !isalpha(rc)) rc += 256;
++
++ while (*val || *ref) {
++ int first_diff= 0;
++
++ while ( (*val && !isdigit(*val)) || (*ref && !isdigit(*ref)) ) {
++ int vc= order(*val), rc= order(*ref);
+ if (vc != rc) return vc - rc;
++ val++; ref++;
+ }
+- val= vp;
+- ref= rp;
+- vl=0; if (isdigit(*vp)) vl= strtol(val,(char**)&val,10);
+- rl=0; if (isdigit(*rp)) rl= strtol(ref,(char**)&ref,10);
+- if (vl != rl) return vl - rl;
+-
+- vc = *val;
+- rc = *ref;
+- vsep = strchr(".-", vc);
+- rsep = strchr(".-", rc);
+- if (vsep && !rsep) return -1;
+- if (!vsep && rsep) return +1;
+-
+- if (!*val && !*ref) return 0;
+- if (!*val) return -1;
+- if (!*ref) return +1;
++
++ while ( *val == '0' ) val++;
++ while ( *ref == '0' ) ref++;
++ while (isdigit(*val) && isdigit(*ref)) {
++ if (!first_diff) first_diff= *val - *ref;
++ val++; ref++;
++ }
++ if (isdigit(*val)) return 1;
++ if (isdigit(*ref)) return -1;
++ if (first_diff) return first_diff;
+ }
++ return 0;
+ }
+
+ int versioncompare(const struct versionrevision *version,
diff --git a/patches/opkg-utils-r4747/0001-opkg-utils-use-env-python-instead-of-fixed-path.patch b/patches/opkg-utils-r4747/0001-opkg-utils-use-env-python-instead-of-fixed-path.patch
deleted file mode 100644
index 7f2fe24..0000000
--- a/patches/opkg-utils-r4747/0001-opkg-utils-use-env-python-instead-of-fixed-path.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From: George McCollister <george.mccollister@gmail.com>
-Date: Fri, 13 May 2011 10:00:47 -0500
-Subject: [PATCH] opkg-utils: use env python instead of fixed path
-
-I moved this patch over from ipkg-utils. I believe this is needed so we
-use the copy of python built and installed by HOST_PYTHON instead of the
-copy provided by the disto.
-
-Signed-off-by: George McCollister <george.mccollister@gmail.com>
----
- opkg-list-fields | 2 +-
- opkg-make-index | 2 +-
- opkg-show-deps | 2 +-
- opkg-unbuild | 2 +-
- opkg-update-index | 2 +-
- 5 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/opkg-list-fields b/opkg-list-fields
-index d263b90..da78d53 100755
---- a/opkg-list-fields
-+++ b/opkg-list-fields
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python
-
- import sys, opkg
-
-diff --git a/opkg-make-index b/opkg-make-index
-index ae829e6..6ebba5f 100755
---- a/opkg-make-index
-+++ b/opkg-make-index
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python
-
- import sys, os, posixpath
- from glob import glob
-diff --git a/opkg-show-deps b/opkg-show-deps
-index a6681f4..9de1aac 100755
---- a/opkg-show-deps
-+++ b/opkg-show-deps
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python
-
- import sys, os, posixpath
- from glob import glob
-diff --git a/opkg-unbuild b/opkg-unbuild
-index eff604b..b5c5227 100755
---- a/opkg-unbuild
-+++ b/opkg-unbuild
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python
-
- import sys, os, re
-
-diff --git a/opkg-update-index b/opkg-update-index
-index 807f8f4..3864fa5 100755
---- a/opkg-update-index
-+++ b/opkg-update-index
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python2.1
-+#!/usr/bin/env python
-
- import sys, os
- from glob import glob
diff --git a/patches/opkg-utils-r4747/0002-opkg-make-ar-deterministic.patch b/patches/opkg-utils-r4747/0002-opkg-make-ar-deterministic.patch
deleted file mode 100644
index 9f4067a..0000000
--- a/patches/opkg-utils-r4747/0002-opkg-make-ar-deterministic.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From: Michael Olbrich <m.olbrich@pengutronix.de>
-Date: Tue, 24 May 2011 07:56:53 +0200
-Subject: [PATCH] opkg: make ar deterministic
-
-Based on a patch from Darren Hutchinson <dhutchinson@google.com>
-
-From the original description:
-
-I had a strange problem when I tried to create an image.
-The last part of the error message was:
-
-File
-"<path to ptxdist>/projects/<project name>/ \
-platform-<project name>/sysroot-host/lib/python2.6/site-packages/arfile.py",
-line 79, in _scan
- size = int(descriptor[5])
-ValueError: invalid literal for int() with base 10: '`'
-
-The problem eventually turned out to be that arfile.py has trouble parsing AR
-files created with a UID >99999 - it relies on the (ascii) AR header fields
-using one digit less than their allocated sizes so it can the padding
-space to split() them.
-
-The original patch added the option 'D' to ar to set the UID and GID to
-zero. This option is not available in older versions of ar. chown to 0:0
-instead. This is possible because the everything is run in fakeroot.
-
-Not for upstream!
-
-Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
----
- opkg-build | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/opkg-build b/opkg-build
-index 012afd3..1c323c3 100755
---- a/opkg-build
-+++ b/opkg-build
-@@ -247,7 +247,10 @@ fi
-
- rm -f $pkg_file
- if [ "$outer" = "ar" ] ; then
-- ( cd $tmp_dir && ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
-+ # chown the content to "0:0". files. This is needed as high UID values (>
-+ # 99999) cause problems when parsing ar file headers
-+ ( cd $tmp_dir && chown 0:0 ./debian-binary ./data.tar.gz ./control.tar.gz &&
-+ ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
- else
- ( cd $tmp_dir && tar -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
- fi
diff --git a/patches/opkg-utils-r4747/0002-opkg-make-index-don-t-error-out-when-some-package-di.patch b/patches/opkg-utils-r4747/0002-opkg-make-index-don-t-error-out-when-some-package-di.patch
new file mode 100644
index 0000000..2f1f5c9
--- /dev/null
+++ b/patches/opkg-utils-r4747/0002-opkg-make-index-don-t-error-out-when-some-package-di.patch
@@ -0,0 +1,78 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 29 Mar 2012 10:41:02 +0200
+Subject: [PATCH] opkg-make-index: don't error out when some package disappears
+
+* If we're building an image and some package rebuilds while this is
+ happening some package can be removed/added to the ipk deploy
+ directory. The image will not depend on this package so we can
+ safely ignore these cases rather than error out.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index ae829e6..2f1ae17 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -96,6 +96,7 @@ if (verbose):
+ files=glob(pkg_dir + '/*.opk') + glob(pkg_dir + '/*.deb') + glob(pkg_dir + '/*.ipk')
+ files.sort()
+ for filename in files:
++ try:
+ basename = os.path.basename(filename)
+ pkg = None
+ fnameStat = os.stat(filename)
+@@ -130,6 +131,12 @@ for filename in files:
+ to_morgue(basename)
+ if opt_s:
+ print filename
++ except OSError:
++ sys.stderr.write("Package %s disappeared on us!\n" % (filename))
++ continue
++ except IOError:
++ sys.stderr.write("Package %s disappeared on us!\n" % (filename))
++ continue
+
+ pkgsStampsFile = open(stamplist_filename, "w")
+ for f in pkgsStamps.keys():
+@@ -148,6 +155,7 @@ if packages_filename:
+ names = packages.packages.keys()
+ names.sort()
+ for name in names:
++ try:
+ pkg = packages.packages[name]
+ if locales_dir and pkg.depends:
+ depends = string.split(pkg.depends, ',')
+@@ -165,6 +173,13 @@ for name in names:
+ if (verbose):
+ sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
+ print pkg
++ except OSError:
++ sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ continue
++ except IOError:
++ sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ continue
++
+ if packages_filename:
+ sys.stdout.close()
+ sys.stdout = old_stdout
+@@ -182,7 +197,15 @@ files = {}
+ names = packages.packages.keys()
+ names.sort()
+ for name in names:
+- for fn in packages[name].get_file_list():
++ try:
++ fnlist = packages[name].get_file_list()
++ except OSError, e:
++ sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ continue
++ except IOError, e:
++ sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ continue
++ for fn in fnlist:
+ (h,t) = os.path.split(fn)
+ if not t: continue
+ if not files.has_key(t): files[t] = name+':'+fn
diff --git a/patches/opkg-utils-r4747/0003-opkg-build-don-t-use-bashism.patch b/patches/opkg-utils-r4747/0003-opkg-build-don-t-use-bashism.patch
deleted file mode 100644
index 027fb49..0000000
--- a/patches/opkg-utils-r4747/0003-opkg-build-don-t-use-bashism.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From: Michael Olbrich <m.olbrich@pengutronix.de>
-Date: Tue, 24 May 2011 08:15:20 +0200
-Subject: [PATCH] opkg-build: don't use bashism
-
-Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
----
- opkg-build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/opkg-build b/opkg-build
-index 1c323c3..f9251ea 100755
---- a/opkg-build
-+++ b/opkg-build
-@@ -239,7 +239,7 @@ rm $tmp_dir/tarX
-
- echo "2.0" > $tmp_dir/debian-binary
-
--if (( $opkext == 1)); then
-+if [ $opkext -eq 1 ]; then
- pkg_file=$dest_dir/${pkg}_${version}_${arch}.opk
- else
- pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
diff --git a/patches/opkg-utils-r4747/0003-opkg-make-index-convert-mtime-to-int-before-comparin.patch b/patches/opkg-utils-r4747/0003-opkg-make-index-convert-mtime-to-int-before-comparin.patch
new file mode 100644
index 0000000..364e2f0
--- /dev/null
+++ b/patches/opkg-utils-r4747/0003-opkg-make-index-convert-mtime-to-int-before-comparin.patch
@@ -0,0 +1,33 @@
+From: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
+Date: Thu, 29 Mar 2012 10:44:16 +0200
+Subject: [PATCH] opkg-make-index: convert mtime to int before comparing it
+
+* The st_mtime attribute (which is a float) is compared against a value
+ from the timestamp database, which was stored as an integer there.
+
+* When working on a filesystem with precise timestamps the comparision
+ will fail nearly everytime hence.
+
+* Although it might be possible to enhance the database to store the
+ fractional part too, this will complicate things more than we would
+ gain by this change.
+
+Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 2f1ae17..dc98c63 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -101,7 +101,7 @@ for filename in files:
+ pkg = None
+ fnameStat = os.stat(filename)
+ if old_pkg_hash.has_key(basename):
+- if pkgsStamps.has_key(basename) and fnameStat.st_mtime == pkgsStamps[basename]:
++ if pkgsStamps.has_key(basename) and int(fnameStat.st_mtime) == pkgsStamps[basename]:
+ if (verbose):
+ sys.stderr.write("Found %s in Packages\n" % (filename,))
+ pkg = old_pkg_hash[basename]
diff --git a/patches/opkg-utils-r4747/0004-opkg-Added-sha256-support.patch b/patches/opkg-utils-r4747/0004-opkg-Added-sha256-support.patch
deleted file mode 100644
index ed1ce15..0000000
--- a/patches/opkg-utils-r4747/0004-opkg-Added-sha256-support.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From: George McCollister <george.mccollister@gmail.com>
-Date: Mon, 11 Jul 2011 12:32:37 -0500
-Subject: [PATCH] opkg: Added sha256 support.
-
-MD5 and SHA256 hashes are generated for each package now.
-
-Signed-off-by: George McCollister <george.mccollister@gmail.com>
----
- opkg.py | 24 +++++++++++++++++++++---
- 1 file changed, 21 insertions(+), 3 deletions(-)
-
-diff --git a/opkg.py b/opkg.py
-index 3fda9b5..b000082 100644
---- a/opkg.py
-+++ b/opkg.py
-@@ -36,7 +36,7 @@ import tempfile
- import os
- import sys
- import glob
--import md5
-+import hashlib
- import re
- import string
- import commands
-@@ -133,8 +133,9 @@ class Package:
- self.section = None
- self.filename_header = None
- self.file_list = []
-- # md5 and size is lazy attribute, computed on demand
-+ # md5, sha256 and size are lazy attribute, computed on demand
- #self.md5 = None
-+ #self.sha256 = None
- #self.size = None
- self.installed_size = None
- self.filename = None
-@@ -179,6 +180,9 @@ class Package:
- if name == "md5":
- self._computeFileMD5()
- return self.md5
-+ elif name == "sha256":
-+ self._computeFileSHA256()
-+ return self.sha256
- elif name == 'size':
- return self._get_file_size()
- else:
-@@ -187,7 +191,7 @@ class Package:
- def _computeFileMD5(self):
- # compute the MD5.
- f = open(self.fn, "rb")
-- sum = md5.new()
-+ sum = hashlib.md5()
- while 1:
- data = f.read(1024)
- if not data: break
-@@ -195,6 +199,17 @@ class Package:
- f.close()
- self.md5 = sum.hexdigest()
-
-+ def _computeFileSHA256(self):
-+ # compute the SHA256.
-+ f = open(self.fn, "rb")
-+ sum = hashlib.sha256()
-+ while 1:
-+ 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;
-@@ -223,6 +238,8 @@ class Package:
- self.size = int(value)
- elif name == 'md5sum':
- self.md5 = value
-+ elif name == 'sha256sum':
-+ self.sha256 = value
- elif self.__dict__.has_key(name):
- self.__dict__[name] = value
- else:
-@@ -418,6 +435,7 @@ class Package:
- if self.architecture: out = out + "Architecture: %s\n" % (self.architecture)
- if self.maintainer: out = out + "Maintainer: %s\n" % (self.maintainer)
- if self.md5: out = out + "MD5Sum: %s\n" % (self.md5)
-+ 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)
diff --git a/patches/opkg-utils-r4747/0004-opkg.py-Add-knowledge-about-License-field-in-ipk-hea.patch b/patches/opkg-utils-r4747/0004-opkg.py-Add-knowledge-about-License-field-in-ipk-hea.patch
new file mode 100644
index 0000000..248a992
--- /dev/null
+++ b/patches/opkg-utils-r4747/0004-opkg.py-Add-knowledge-about-License-field-in-ipk-hea.patch
@@ -0,0 +1,43 @@
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Mar 2012 10:45:44 +0200
+Subject: [PATCH] opkg.py: Add knowledge about License field in ipk headers
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/opkg.py b/opkg.py
+index 3fda9b5..8ddc8b8 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -145,6 +145,7 @@ class Package:
+ self.priority = None
+ self.tags = None
+ self.fn = fn
++ self.license = None
+
+ if fn:
+ # see if it is deb format
+@@ -319,6 +320,12 @@ class Package:
+ def get_section(self, section):
+ return self.section
+
++ def set_license(self, license):
++ self.license = license
++
++ def get_license(self, license):
++ return self.license
++
+ def get_file_list(self):
+ if not self.fn:
+ return []
+@@ -425,6 +432,7 @@ class Package:
+ 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)
+ out = out + "\n"
diff --git a/patches/opkg-utils-r4747/0005-arfile.py-handle-six-digit-UIDs.patch b/patches/opkg-utils-r4747/0005-arfile.py-handle-six-digit-UIDs.patch
new file mode 100644
index 0000000..d826647
--- /dev/null
+++ b/patches/opkg-utils-r4747/0005-arfile.py-handle-six-digit-UIDs.patch
@@ -0,0 +1,32 @@
+From: Scott Anderson <o2e@saaworld.com>
+Date: Thu, 29 Mar 2012 10:46:34 +0200
+Subject: [PATCH] arfile.py: handle six digit UIDs
+
+* Essentially, the problem is that arfile.py is splitting the ar header with
+ white-space instead of fixed-width fields, so two fields would get treated
+ as a single field. This makes things better than before as it now honors
+ the fixed field widths.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/arfile.py b/arfile.py
+index 22548af..8291a2d 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -75,7 +75,12 @@ class ArFile:
+ l = self.f.readline()
+ if not l: break
+ l = l.replace('`', '')
+- descriptor = l.split()
++ # Field lengths from /usr/include/ar.h:
++ ar_field_lens = [ 16, 12, 6, 6, 8, 10, 2 ]
++ descriptor = []
++ for field_len in ar_field_lens:
++ descriptor.append(l[:field_len].strip())
++ l = l[field_len:]
+ # print descriptor
+ size = int(descriptor[5])
+ memberName = descriptor[0][:-1]
diff --git a/patches/opkg-utils-r4747/0005-opkg-build-use-CROSS_COMPILE-ar.patch b/patches/opkg-utils-r4747/0005-opkg-build-use-CROSS_COMPILE-ar.patch
deleted file mode 100644
index ad6ee5b..0000000
--- a/patches/opkg-utils-r4747/0005-opkg-build-use-CROSS_COMPILE-ar.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From: =?UTF-8?q?Andreas=20Bie=C3=9Fmann?= <andreas@biessmann.de>
-Date: Fri, 20 Jan 2012 09:03:55 +0100
-Subject: [PATCH] opkg-build: use ${CROSS_COMPILE}ar
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some host systems do not provide proper ar, make it possible to switch
-to cross-ar here.
-
-Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
----
- opkg-build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/opkg-build b/opkg-build
-index f9251ea..425faea 100755
---- a/opkg-build
-+++ b/opkg-build
-@@ -250,7 +250,7 @@ if [ "$outer" = "ar" ] ; then
- # chown the content to "0:0". files. This is needed as high UID values (>
- # 99999) cause problems when parsing ar file headers
- ( cd $tmp_dir && chown 0:0 ./debian-binary ./data.tar.gz ./control.tar.gz &&
-- ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
-+ ${CROSS_COMPILE}ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
- else
- ( cd $tmp_dir && tar -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
- fi
diff --git a/patches/opkg-utils-r4747/0006-Fill-out-Installed-Size.patch b/patches/opkg-utils-r4747/0006-Fill-out-Installed-Size.patch
deleted file mode 100644
index c2b2f64..0000000
--- a/patches/opkg-utils-r4747/0006-Fill-out-Installed-Size.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From: George McCollister <george.mccollister@gmail.com>
-Date: Fri, 23 Mar 2012 13:13:41 -0500
-Subject: [PATCH] Fill out Installed-Size
-
-Fill out Installed-Size so opkg can check to make sure there is enough
-space to install the package before attempting to do so.
-
-Signed-off-by: George McCollister <george.mccollister@gmail.com>
----
- opkg.py | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/opkg.py b/opkg.py
-index b000082..2531871 100644
---- a/opkg.py
-+++ b/opkg.py
-@@ -162,6 +162,10 @@ class Package:
- ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
-
- ar = arfile.ArFile(f)
-+ tarStream = ar.open("data.tar.gz")
-+ tarf = tarfile.open("data.tar.gz", "r", tarStream)
-+ self.installed_size = sum([f.size for f in tarf.getmembers()])
-+
- tarStream = ar.open("control.tar.gz")
- tarf = tarfile.open("control.tar.gz", "r", tarStream)
-
-@@ -437,7 +441,7 @@ class Package:
- if self.md5: out = out + "MD5Sum: %s\n" % (self.md5)
- 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.installed_size: out = out + "Installed-Size: %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)
diff --git a/patches/opkg-utils-r4747/0006-Use-python-via-the-PATH-rather-than-hardcoding-usr-b.patch b/patches/opkg-utils-r4747/0006-Use-python-via-the-PATH-rather-than-hardcoding-usr-b.patch
new file mode 100644
index 0000000..7bbffd9
--- /dev/null
+++ b/patches/opkg-utils-r4747/0006-Use-python-via-the-PATH-rather-than-hardcoding-usr-b.patch
@@ -0,0 +1,65 @@
+From: Christopher Larson <kergoth@gmail.com>
+Date: Thu, 29 Mar 2012 10:47:49 +0200
+Subject: [PATCH] Use python via the PATH, rather than hardcoding
+ /usr/bin/python
+
+Signed-off-by: Christopher Larson <kergoth@gmail.com>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-list-fields | 2 +-
+ opkg-make-index | 2 +-
+ opkg-show-deps | 2 +-
+ opkg-unbuild | 2 +-
+ opkg-update-index | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/opkg-list-fields b/opkg-list-fields
+index d263b90..da78d53 100755
+--- a/opkg-list-fields
++++ b/opkg-list-fields
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python
+
+ import sys, opkg
+
+diff --git a/opkg-make-index b/opkg-make-index
+index dc98c63..b65dc6e 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python
+
+ import sys, os, posixpath
+ from glob import glob
+diff --git a/opkg-show-deps b/opkg-show-deps
+index a6681f4..9de1aac 100755
+--- a/opkg-show-deps
++++ b/opkg-show-deps
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python
+
+ import sys, os, posixpath
+ from glob import glob
+diff --git a/opkg-unbuild b/opkg-unbuild
+index eff604b..b5c5227 100755
+--- a/opkg-unbuild
++++ b/opkg-unbuild
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python
+
+ import sys, os, re
+
+diff --git a/opkg-update-index b/opkg-update-index
+index 807f8f4..3864fa5 100755
+--- a/opkg-update-index
++++ b/opkg-update-index
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.1
++#!/usr/bin/env python
+
+ import sys, os
+ from glob import glob
diff --git a/patches/opkg-utils-r4747/0007-opkg-build-force-tar-gnu-format.patch b/patches/opkg-utils-r4747/0007-opkg-build-force-tar-gnu-format.patch
deleted file mode 100644
index a297f2d..0000000
--- a/patches/opkg-utils-r4747/0007-opkg-build-force-tar-gnu-format.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From: Michael Olbrich <m.olbrich@pengutronix.de>
-Date: Tue, 11 Dec 2012 11:29:25 +0100
-Subject: [PATCH] opkg-build: force tar gnu format
-
-Since openSUSE 12.2 the installed tar uses posix instead of gnu encoding by
-default. This format is not fully supported by opkg and results in ipk
-packages not installable at the target.
-
-Based on a patch from OpenWrt.
-
-Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
----
- opkg-build | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/opkg-build b/opkg-build
-index 425faea..dc53982 100755
---- a/opkg-build
-+++ b/opkg-build
-@@ -233,8 +233,8 @@ tmp_dir=$dest_dir/IPKG_BUILD.$$
- mkdir $tmp_dir
-
- echo $CONTROL > $tmp_dir/tarX
--( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -czf $tmp_dir/data.tar.gz . )
--( cd $pkg_dir/$CONTROL && tar $ogargs -czf $tmp_dir/control.tar.gz . )
-+( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX --format=gnu -czf $tmp_dir/data.tar.gz . )
-+( cd $pkg_dir/$CONTROL && tar $ogargs --format=gnu -czf $tmp_dir/control.tar.gz . )
- rm $tmp_dir/tarX
-
- echo "2.0" > $tmp_dir/debian-binary
-@@ -252,7 +252,7 @@ if [ "$outer" = "ar" ] ; then
- ( cd $tmp_dir && chown 0:0 ./debian-binary ./data.tar.gz ./control.tar.gz &&
- ${CROSS_COMPILE}ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
- else
-- ( cd $tmp_dir && tar -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
-+ ( cd $tmp_dir && tar --format=gnu -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
- fi
-
- rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
diff --git a/patches/opkg-utils-r4747/0007-opkg.py-use-hashlib-instead-of-old-md5-module.patch b/patches/opkg-utils-r4747/0007-opkg.py-use-hashlib-instead-of-old-md5-module.patch
new file mode 100644
index 0000000..1706cc3
--- /dev/null
+++ b/patches/opkg-utils-r4747/0007-opkg.py-use-hashlib-instead-of-old-md5-module.patch
@@ -0,0 +1,33 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 12:44:01 +0200
+Subject: [PATCH] opkg.py: use hashlib instead of old md5 module
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/opkg.py b/opkg.py
+index 8ddc8b8..56e774d 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -36,7 +36,7 @@ import tempfile
+ import os
+ import sys
+ import glob
+-import md5
++import hashlib
+ import re
+ import string
+ import commands
+@@ -188,8 +188,8 @@ class Package:
+ def _computeFileMD5(self):
+ # compute the MD5.
+ f = open(self.fn, "rb")
+- sum = md5.new()
+- while 1:
++ sum = hashlib.md5()
++ while True:
+ data = f.read(1024)
+ if not data: break
+ sum.update(data)
diff --git a/patches/opkg-utils-r4747/0008-opkg.py-arfile.py-report-which-file-has-wrong-format.patch b/patches/opkg-utils-r4747/0008-opkg.py-arfile.py-report-which-file-has-wrong-format.patch
new file mode 100644
index 0000000..340230e
--- /dev/null
+++ b/patches/opkg-utils-r4747/0008-opkg.py-arfile.py-report-which-file-has-wrong-format.patch
@@ -0,0 +1,100 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 12:44:26 +0200
+Subject: [PATCH] opkg.py, arfile.py: report which file has wrong format and
+ use the same test
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 16 +++++++++-------
+ opkg.py | 11 ++---------
+ 2 files changed, 11 insertions(+), 16 deletions(-)
+
+diff --git a/arfile.py b/arfile.py
+index 8291a2d..7a695c6 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -40,13 +40,13 @@ class FileSection:
+
+ class ArFile:
+
+- def __init__(self, f):
++ def __init__(self, f, fn):
+ self.f = f
+ self.directory = {}
+ self.directoryRead = False
+
+ signature = self.f.readline()
+- assert signature == "!<arch>\n"
++ assert signature == "!<arch>\n" or signature == b"!<arch>\n", "Old ipk format (non-deb) is unsupported, file: %s, magic: %s, expected %s" % (fn, signature, "!<arch>")
+ self.directoryOffset = self.f.tell()
+
+ def open(self, fname):
+@@ -100,9 +100,10 @@ class ArFile:
+
+ if __name__ == "__main__":
+ if None:
+- f = open(sys.argv[1], "rb")
++ fn = sys.argv[1]
++ f = open(fn, "rb")
+
+- ar = ArFile(f)
++ ar = ArFile(f, fn)
+ tarStream = ar.open("data.tar.gz")
+ print "--------"
+ tarStream = ar.open("data.tar.gz")
+@@ -120,10 +121,11 @@ if __name__ == "__main__":
+ for f in os.listdir(dir):
+ if not f.endswith(".opk") and not f.endswith(".ipk"): continue
+
+- print "=== %s ===" % f
+- f = open(dir + "/" + f, "rb")
++ print("=== %s ===" % f)
++ fn = "%s/%s" % (dir, f)
++ f = open(fn, "rb")
+
+- ar = ArFile(f)
++ ar = ArFile(f, fn)
+ tarStream = ar.open("control.tar.gz")
+ tarf = tarfile.open("control.tar.gz", "r", tarStream)
+ #tarf.list()
+diff --git a/opkg.py b/opkg.py
+index 56e774d..31b847c 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -138,7 +138,6 @@ class Package:
+ #self.size = None
+ self.installed_size = None
+ self.filename = None
+- self.isdeb = 0
+ self.file_ext_opk = "ipk"
+ self.homepage = None
+ self.oe = None
+@@ -150,18 +149,12 @@ class Package:
+ if fn:
+ # see if it is deb format
+ f = open(fn, "rb")
+- magic = f.read(4)
+- f.seek(0, 0)
+- if (magic == "!<ar"):
+- self.isdeb = 1
+-
+
+ self.filename = os.path.basename(fn)
+- assert self.isdeb == 1, "Old ipk format (non-deb) is unsupported"
+
+ ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
+
+- ar = arfile.ArFile(f)
++ ar = arfile.ArFile(f, fn)
+ tarStream = ar.open("control.tar.gz")
+ tarf = tarfile.open("control.tar.gz", "r", tarStream)
+
+@@ -330,7 +323,7 @@ class Package:
+ if not self.fn:
+ return []
+ f = open(self.fn, "rb")
+- ar = arfile.ArFile(f)
++ ar = arfile.ArFile(f, self.fn)
+ tarStream = ar.open("data.tar.gz")
+ tarf = tarfile.open("data.tar.gz", "r", tarStream)
+ self.file_list = tarf.getnames()
diff --git a/patches/opkg-utils-r4747/0009-arfile-decode-read-lines-as-ascii-string-before-gett.patch b/patches/opkg-utils-r4747/0009-arfile-decode-read-lines-as-ascii-string-before-gett.patch
new file mode 100644
index 0000000..ed81b83
--- /dev/null
+++ b/patches/opkg-utils-r4747/0009-arfile-decode-read-lines-as-ascii-string-before-gett.patch
@@ -0,0 +1,24 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 13:24:10 +0200
+Subject: [PATCH] arfile: decode read lines as ascii string before getting
+ fields from it
+
+* python3 returns them as byte sequence
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arfile.py b/arfile.py
+index 7a695c6..92ffee0 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -74,6 +74,7 @@ class ArFile:
+ if l == "\n":
+ l = self.f.readline()
+ if not l: break
++ l = l.decode('ascii')
+ l = l.replace('`', '')
+ # Field lengths from /usr/include/ar.h:
+ ar_field_lens = [ 16, 12, 6, 6, 8, 10, 2 ]
diff --git a/patches/opkg-utils-r4747/0010-2to3-use-subprocess-instead-of-commands.patch b/patches/opkg-utils-r4747/0010-2to3-use-subprocess-instead-of-commands.patch
new file mode 100644
index 0000000..df5d08a
--- /dev/null
+++ b/patches/opkg-utils-r4747/0010-2to3-use-subprocess-instead-of-commands.patch
@@ -0,0 +1,97 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 13:28:01 +0200
+Subject: [PATCH] 2to3: use subprocess instead of commands
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-compare-indexes | 6 +++---
+ opkg-make-index | 5 ++---
+ opkg-show-deps | 1 -
+ opkg-update-index | 1 -
+ opkg.py | 2 +-
+ 5 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/opkg-compare-indexes b/opkg-compare-indexes
+index 6c68125..2610987 100755
+--- a/opkg-compare-indexes
++++ b/opkg-compare-indexes
+@@ -2,7 +2,7 @@
+
+ import sys, os
+ from glob import glob
+-import commands
++import subprocess
+ import opkg
+
+ pkg_dir1 = sys.argv[1]
+@@ -40,8 +40,8 @@ for name in names:
+ if pkg1 and pkg2 and pkg1.version != pkg2.version:
+ print "CHANGED: %s from version %s to %s (%s)" % (pkg1.package, pkg1.version, pkg2.version, pkg2.maintainer)
+ cmd = "opkg-diff %s %s > %s " % ((pkg_dir1 + pkg1.filename), (pkg_dir2 + pkg2.filename), (pkg1.package + '.diff'))
+- print cmd
+- commands.getstatusoutput(cmd)
++ print(cmd)
++ subprocess.call(cmd)
+ if not pkg1:
+ print "NEW: %s version %s (%s)"% (pkg2.package, pkg2.version, pkg2.maintainer)
+ if not pkg2:
+diff --git a/opkg-make-index b/opkg-make-index
+index b65dc6e..7923f1e 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -2,7 +2,7 @@
+
+ import sys, os, posixpath
+ from glob import glob
+-import commands
++import subprocess
+ import opkg
+ import getopt
+ import string
+@@ -186,8 +186,7 @@ if packages_filename:
+ 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)
+- (rc, outtext) = commands.getstatusoutput(gzip_cmd)
+- print outtext
++ rc = subprocess.check_output(gzip_cmd, shell=True)
+ os.rename(tmp_packages_filename, packages_filename)
+ os.rename(tmp_gzip_filename, gzip_filename)
+
+diff --git a/opkg-show-deps b/opkg-show-deps
+index 9de1aac..5ab5b4f 100755
+--- a/opkg-show-deps
++++ b/opkg-show-deps
+@@ -2,7 +2,6 @@
+
+ import sys, os, posixpath
+ from glob import glob
+-import commands
+ import opkg
+ import getopt
+ import string
+diff --git a/opkg-update-index b/opkg-update-index
+index 3864fa5..d9c9b43 100755
+--- a/opkg-update-index
++++ b/opkg-update-index
+@@ -2,7 +2,6 @@
+
+ import sys, os
+ from glob import glob
+-import commands
+ import opkg
+
+ pkg_dir=sys.argv[1]
+diff --git a/opkg.py b/opkg.py
+index 31b847c..f37a68d 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -39,7 +39,7 @@ import glob
+ import hashlib
+ import re
+ import string
+-import commands
++import subprocess
+ from stat import ST_SIZE
+ import arfile
+ import tarfile
diff --git a/patches/opkg-utils-r4747/0011-2to3-print-fixes.patch b/patches/opkg-utils-r4747/0011-2to3-print-fixes.patch
new file mode 100644
index 0000000..86a4be9
--- /dev/null
+++ b/patches/opkg-utils-r4747/0011-2to3-print-fixes.patch
@@ -0,0 +1,266 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 14:45:24 +0200
+Subject: [PATCH] 2to3: print fixes
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 20 ++++++++++----------
+ makePackage | 2 +-
+ opkg-compare-indexes | 6 +++---
+ opkg-list-fields | 2 +-
+ opkg-make-index | 8 ++++----
+ opkg-show-deps | 2 +-
+ opkg-unbuild | 2 +-
+ opkg.py | 24 ++++++++++++------------
+ 8 files changed, 33 insertions(+), 33 deletions(-)
+
+diff --git a/arfile.py b/arfile.py
+index 92ffee0..320c9ca 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -20,7 +20,7 @@ class FileSection:
+ self.seek(0, 0)
+
+ def seek(self, offset, whence = 0):
+-# print "seek(%x, %d)" % (offset, whence)
++# print("seek(%x, %d)" % (offset, whence))
+ if whence == 0:
+ return self.f.seek(offset + self.offset, whence)
+ elif whence == 1:
+@@ -31,11 +31,11 @@ class FileSection:
+ assert False
+
+ def tell(self):
+-# print "tell()"
++# print("tell()")
+ return self.f.tell() - self.offset
+
+ def read(self, size = -1):
+-# print "read(%d)" % size
++# print("read(%d)" % size)
+ return self.f.read(size)
+
+ class ArFile:
+@@ -82,11 +82,11 @@ class ArFile:
+ for field_len in ar_field_lens:
+ descriptor.append(l[:field_len].strip())
+ l = l[field_len:]
+-# print descriptor
++# print(descriptor)
+ size = int(descriptor[5])
+ memberName = descriptor[0][:-1]
+ self.directory[memberName] = descriptor + [self.f.tell()]
+-# print "read:", memberName
++# print(("read:", memberName))
+ if memberName == fname:
+ # Record directory offset to start from next time
+ self.directoryOffset = self.f.tell() + size
+@@ -96,7 +96,7 @@ class ArFile:
+ if size % 2:
+ size = size + 1
+ data = self.f.seek(size, 1)
+-# print hex(f.tell())
++# print(hex(self.f.tell()))
+
+
+ if __name__ == "__main__":
+@@ -106,11 +106,11 @@ if __name__ == "__main__":
+
+ ar = ArFile(f, fn)
+ tarStream = ar.open("data.tar.gz")
+- print "--------"
++ print("--------")
+ tarStream = ar.open("data.tar.gz")
+- print "--------"
++ print("--------")
+ tarStream = ar.open("control.tar.gz")
+- print "--------"
++ print("--------")
+ tarStream = ar.open("control.tar.gz2")
+
+ sys.exit(0)
+@@ -132,4 +132,4 @@ if __name__ == "__main__":
+ #tarf.list()
+
+ f2 = tarf.extractfile("control")
+- print f2.read()
++ print(f2.read())
+diff --git a/makePackage b/makePackage
+index 082a81f..ec76338 100755
+--- a/makePackage
++++ b/makePackage
+@@ -11,4 +11,4 @@ import opkg
+
+ fn = sys.argv[1]
+ pkg = opkg.Package(fn)
+-print pkg
++print(pkg)
+diff --git a/opkg-compare-indexes b/opkg-compare-indexes
+index 2610987..e0933ce 100755
+--- a/opkg-compare-indexes
++++ b/opkg-compare-indexes
+@@ -38,12 +38,12 @@ for name in names:
+ if pkgs2.packages.has_key(name):
+ pkg2 = pkgs2.packages[name]
+ if pkg1 and pkg2 and pkg1.version != pkg2.version:
+- print "CHANGED: %s from version %s to %s (%s)" % (pkg1.package, pkg1.version, pkg2.version, pkg2.maintainer)
++ print("CHANGED: %s from version %s to %s (%s)" % (pkg1.package, pkg1.version, pkg2.version, pkg2.maintainer))
+ cmd = "opkg-diff %s %s > %s " % ((pkg_dir1 + pkg1.filename), (pkg_dir2 + pkg2.filename), (pkg1.package + '.diff'))
+ print(cmd)
+ subprocess.call(cmd)
+ if not pkg1:
+- print "NEW: %s version %s (%s)"% (pkg2.package, pkg2.version, pkg2.maintainer)
++ print("NEW: %s version %s (%s)"% (pkg2.package, pkg2.version, pkg2.maintainer))
+ if not pkg2:
+- print "DELETE: %s version %s (%s)"% (pkg1.package, pkg1.version, pkg1.maintainer)
++ print("DELETE: %s version %s (%s)"% (pkg1.package, pkg1.version, pkg1.maintainer))
+
+diff --git a/opkg-list-fields b/opkg-list-fields
+index da78d53..1fb7fd1 100755
+--- a/opkg-list-fields
++++ b/opkg-list-fields
+@@ -9,5 +9,5 @@ def usage():
+ if (len(sys.argv) < 2):
+ usage()
+
+-print opkg.Package(sys.argv[1])
++print(opkg.Package(sys.argv[1]))
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 7923f1e..c3a292b 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -125,12 +125,12 @@ for filename in files:
+ if opt_m:
+ to_morgue(old_filename)
+ if opt_s:
+- print pkg_dir + "/" + old_filename
++ print(("%s/%s" % (pkg_dir, old_filename)))
+ else:
+ if opt_m:
+ to_morgue(basename)
+ if opt_s:
+- print filename
++ print(filename)
+ except OSError:
+ sys.stderr.write("Package %s disappeared on us!\n" % (filename))
+ continue
+@@ -172,7 +172,7 @@ for name in names:
+ continue
+ if (verbose):
+ sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
+- print pkg
++ print(pkg)
+ except OSError:
+ sys.stderr.write("Package %s disappeared on us!\n" % (name))
+ continue
+@@ -216,7 +216,7 @@ if filelist_filename:
+ names = files.keys()
+ names.sort()
+ for name in names:
+- print name,files[name]
++ print((name,files[name]))
+ sys.stdout.close()
+ if posixpath.exists(filelist_filename):
+ os.unlink(filelist_filename)
+diff --git a/opkg-show-deps b/opkg-show-deps
+index 5ab5b4f..524d247 100755
+--- a/opkg-show-deps
++++ b/opkg-show-deps
+@@ -83,5 +83,5 @@ for root in remaining_args:
+ recurse(p)
+
+ for pkg in required.keys():
+- print pkg
++ print(pkg)
+
+diff --git a/opkg-unbuild b/opkg-unbuild
+index b5c5227..35a387f 100755
+--- a/opkg-unbuild
++++ b/opkg-unbuild
+@@ -3,7 +3,7 @@
+ import sys, os, re
+
+ if (len(sys.argv) == 0):
+- print 'usage: %s: package.opk' % sys.argv[0]
++ print('usage: %s: package.opk' % sys.argv[0])
+ sys.exit(1)
+
+ for filename in sys.argv[1:]:
+diff --git a/opkg.py b/opkg.py
+index f37a68d..54060c3 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -56,10 +56,10 @@ class Version:
+ while 1:
+ ## first look for non-numeric version component
+ selfm = re.match('([^0-9]*)(.*)', selfversion)
+- #print 'selfm', selfm.groups()
++ #print(('selfm', selfm.groups()))
+ (selfalpha, selfversion) = selfm.groups()
+ refm = re.match('([^0-9]*)(.*)', refversion)
+- #print 'refm', refm.groups()
++ #print(('refm', refm.groups())
+ (refalpha, refversion) = refm.groups()
+ if (selfalpha > refalpha):
+ return 1
+@@ -68,8 +68,8 @@ class Version:
+ ## now look for numeric version component
+ (selfnum, selfversion) = re.match('([0-9]*)(.*)', selfversion).groups()
+ (refnum, refversion) = re.match('([0-9]*)(.*)', refversion).groups()
+- #print 'selfnum', selfnum, selfversion
+- #print 'refnum', refnum, refversion
++ #print(('selfnum', selfnum, selfversion)
++ #print(('refnum', refnum, refversion)
+ if (selfnum != ''):
+ selfnum = int(selfnum)
+ else:
+@@ -93,12 +93,12 @@ class Version:
+ 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))
++ #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)
++ #print("compare: %s vs %s = %d" % (self, ref, r))
+ return r
+
+ def __str__(self):
+@@ -220,7 +220,7 @@ class Package:
+ elif self.__dict__.has_key(name):
+ self.__dict__[name] = value
+ else:
+- print "Lost field %s, %s" % (name,value)
++ print("Lost field %s, %s" % (name,value))
+ pass
+
+ if line and line[0] == '\n':
+@@ -391,9 +391,9 @@ class Package:
+ def compare_version(self, ref):
+ """Compare package versions of self and ref"""
+ if not self.version:
+- print 'No version for package %s' % self.package
++ print('No version for package %s' % self.package)
+ if not ref.version:
+- print 'No version for package %s' % ref.package
++ print('No version for package %s' % ref.package)
+ if not self.parsed_version:
+ self.parsed_version = parse_version(self.version)
+ if not ref.parsed_version:
+@@ -499,9 +499,9 @@ if __name__ == "__main__":
+ package.set_depends("libc")
+ package.set_description("A test of the APIs.")
+
+- print "<"
++ print("<")
+ sys.stdout.write(package)
+- print ">"
++ print(">")
+
+ package.write_package("/tmp")
+
diff --git a/patches/opkg-utils-r4747/0012-2to3-dictionary-fixes.patch b/patches/opkg-utils-r4747/0012-2to3-dictionary-fixes.patch
new file mode 100644
index 0000000..8dc1d8f
--- /dev/null
+++ b/patches/opkg-utils-r4747/0012-2to3-dictionary-fixes.patch
@@ -0,0 +1,235 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 14:42:00 +0200
+Subject: [PATCH] 2to3: dictionary fixes
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 2 +-
+ opkg-compare-indexes | 10 +++++-----
+ opkg-make-index | 18 +++++++++---------
+ opkg-show-deps | 12 ++++++------
+ opkg-update-index | 2 +-
+ opkg.py | 8 ++++----
+ 6 files changed, 26 insertions(+), 26 deletions(-)
+
+diff --git a/arfile.py b/arfile.py
+index 320c9ca..9149387 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -50,7 +50,7 @@ class ArFile:
+ self.directoryOffset = self.f.tell()
+
+ def open(self, fname):
+- if self.directory.has_key(fname):
++ if fname in self.directory:
+ return FileSection(self.f, self.directory[fname][-1], int(self.directory[fname][5]))
+
+ if self.directoryRead:
+diff --git a/opkg-compare-indexes b/opkg-compare-indexes
+index e0933ce..0c119e3 100755
+--- a/opkg-compare-indexes
++++ b/opkg-compare-indexes
+@@ -18,8 +18,8 @@ pkgs1.read_packages_file(pkg_dir1 + '/Packages')
+ pkgs2 = opkg.Packages()
+ pkgs2.read_packages_file(pkg_dir2 + '/Packages')
+
+-names1 = pkgs1.packages.keys()
+-names2 = pkgs2.packages.keys()
++names1 = list(pkgs1.packages.keys())
++names2 = list(pkgs2.packages.keys())
+
+ ## union of the two names lists
+ pkgs = {}
+@@ -28,14 +28,14 @@ for name in names1:
+ for name in names2:
+ pkgs[name] = pkgs2.packages[name]
+
+-names = pkgs.keys()
++names = list(pkgs.keys())
+ names.sort()
+ for name in names:
+ pkg1 = None
+ pkg2 = None
+- if pkgs1.packages.has_key(name):
++ if name in pkgs1.packages:
+ pkg1 = pkgs1.packages[name]
+- if pkgs2.packages.has_key(name):
++ if name in pkgs2.packages:
+ pkg2 = pkgs2.packages[name]
+ if pkg1 and pkg2 and pkg1.version != pkg2.version:
+ print("CHANGED: %s from version %s to %s (%s)" % (pkg1.package, pkg1.version, pkg2.version, pkg2.maintainer))
+diff --git a/opkg-make-index b/opkg-make-index
+index c3a292b..2fc8a69 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -79,7 +79,7 @@ if old_filename:
+ sys.stderr.write("Reading package list from " + old_filename + "\n")
+ old_packages = opkg.Packages()
+ old_packages.read_packages_file(old_filename)
+- for k in old_packages.packages.keys():
++ for k in list(old_packages.packages.keys()):
+ p = old_packages.packages[k]
+ old_pkg_hash[p.filename] = p
+ try:
+@@ -100,8 +100,8 @@ for filename in files:
+ basename = os.path.basename(filename)
+ pkg = None
+ fnameStat = os.stat(filename)
+- if old_pkg_hash.has_key(basename):
+- if pkgsStamps.has_key(basename) and int(fnameStat.st_mtime) == pkgsStamps[basename]:
++ if basename in old_pkg_hash:
++ if basename in pkgsStamps and int(fnameStat.st_mtime) == pkgsStamps[basename]:
+ if (verbose):
+ sys.stderr.write("Found %s in Packages\n" % (filename,))
+ pkg = old_pkg_hash[basename]
+@@ -113,7 +113,7 @@ for filename in files:
+ sys.stderr.write("Reading info for package %s\n" % (filename,))
+ pkg = opkg.Package(filename)
+ pkg_key = ("%s:%s" % (pkg.package, pkg.architecture))
+- if (packages.packages.has_key(pkg_key)):
++ if (pkg_key in packages.packages):
+ old_filename = packages.packages[pkg_key].filename
+ else:
+ old_filename = ""
+@@ -139,7 +139,7 @@ for filename in files:
+ continue
+
+ pkgsStampsFile = open(stamplist_filename, "w")
+-for f in pkgsStamps.keys():
++for f in list(pkgsStamps.keys()):
+ pkgsStampsFile.write("%d %s\n" % (pkgsStamps[f], f))
+ pkgsStampsFile.close()
+
+@@ -152,7 +152,7 @@ if packages_filename:
+ old_stdout = sys.stdout
+ tmp_packages_filename = ("%s.%d" % (packages_filename, os.getpid()))
+ sys.stdout = open(tmp_packages_filename, "w")
+-names = packages.packages.keys()
++names = list(packages.packages.keys())
+ names.sort()
+ for name in names:
+ try:
+@@ -193,7 +193,7 @@ if packages_filename:
+ if verbose:
+ sys.stderr.write("Generate Packages.filelist file\n")
+ files = {}
+-names = packages.packages.keys()
++names = list(packages.packages.keys())
+ names.sort()
+ for name in names:
+ try:
+@@ -207,13 +207,13 @@ for name in names:
+ for fn in fnlist:
+ (h,t) = os.path.split(fn)
+ if not t: continue
+- if not files.has_key(t): files[t] = name+':'+fn
++ 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()))
+ sys.stdout = open(tmp_filelist_filename, "w")
+- names = files.keys()
++ names = list(files.keys())
+ names.sort()
+ for name in names:
+ print((name,files[name]))
+diff --git a/opkg-show-deps b/opkg-show-deps
+index 524d247..3f5899d 100755
+--- a/opkg-show-deps
++++ b/opkg-show-deps
+@@ -40,21 +40,21 @@ def split_list(str):
+ r.append(ii)
+ return r
+
+-for i in packages.packages.keys():
++for i in list(packages.packages.keys()):
+ p = packages.packages[i]
+- if not provider_hash.has_key(p.package):
++ if p.package not in provider_hash:
+ provider_hash[p.package] = []
+ provider_hash[p.package].append(p)
+ if p.provides:
+ provides = string.split(p.provides, ",")
+ for prov in provides:
+ prov = string.strip(prov)
+- if not provider_hash.has_key(prov):
++ if prov not in provider_hash:
+ provider_hash[prov] = []
+ provider_hash[prov].append(p)
+
+ def find_package(name):
+- if provider_hash.has_key(name):
++ if name in provider_hash:
+ return provider_hash[name]
+ return None
+
+@@ -68,7 +68,7 @@ def recurse(pkg):
+ newpkgs = find_package(dep)
+ if newpkgs:
+ for newpkg in newpkgs:
+- if required.has_key(newpkg.package):
++ if newpkg.package in required:
+ return
+ recurse(newpkgs[0])
+ else:
+@@ -82,6 +82,6 @@ for root in remaining_args:
+ for p in pkgs:
+ recurse(p)
+
+-for pkg in required.keys():
++for pkg in list(required.keys()):
+ print(pkg)
+
+diff --git a/opkg-update-index b/opkg-update-index
+index d9c9b43..1b05875 100755
+--- a/opkg-update-index
++++ b/opkg-update-index
+@@ -15,7 +15,7 @@ packages = opkg.Packages()
+
+ packages.read_packages_file(pkg_dir + '/Packages')
+
+-names = packages.packages.keys()
++names = list(packages.packages.keys())
+
+ packages.add_package(opkg.Package(pkg_filename))
+
+diff --git a/opkg.py b/opkg.py
+index 54060c3..75ad3d3 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -217,7 +217,7 @@ class Package:
+ self.size = int(value)
+ elif name == 'md5sum':
+ self.md5 = value
+- elif self.__dict__.has_key(name):
++ elif name in self.__dict__:
+ self.__dict__[name] = value
+ else:
+ print("Lost field %s, %s" % (name,value))
+@@ -447,7 +447,7 @@ class Packages:
+ package = pkg.package
+ arch = pkg.architecture
+ name = ("%s:%s" % (package, arch))
+- if (not self.packages.has_key(name)):
++ if (name not in self.packages):
+ self.packages[name] = pkg
+
+ if pkg.compare_version(self.packages[name]) >= 0:
+@@ -470,14 +470,14 @@ class Packages:
+
+ def write_packages_file(self, fn):
+ f = open(fn, "w")
+- names = self.packages.keys()
++ names = list(self.packages.keys())
+ names.sort()
+ for name in names:
+ f.write(self.packages[name].__repr__())
+ return
+
+ def keys(self):
+- return self.packages.keys()
++ return list(self.packages.keys())
+
+ def __getitem__(self, key):
+ return self.packages[key]
diff --git a/patches/opkg-utils-r4747/0013-2to3-exception-handling-fixes.patch b/patches/opkg-utils-r4747/0013-2to3-exception-handling-fixes.patch
new file mode 100644
index 0000000..638c6ca
--- /dev/null
+++ b/patches/opkg-utils-r4747/0013-2to3-exception-handling-fixes.patch
@@ -0,0 +1,59 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 14:50:56 +0200
+Subject: [PATCH] 2to3: exception handling fixes
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 4 ++--
+ opkg-make-index | 4 ++--
+ opkg.py | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/arfile.py b/arfile.py
+index 9149387..3f797a8 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -54,11 +54,11 @@ class ArFile:
+ return FileSection(self.f, self.directory[fname][-1], int(self.directory[fname][5]))
+
+ if self.directoryRead:
+- raise IOError, (2, "AR member not found: " + fname)
++ raise IOError("AR member not found: " + fname)
+
+ f = self._scan(fname)
+ if f == None:
+- raise IOError, (2, "AR member not found: " + fname)
++ raise IOError("AR member not found: " + fname)
+ return f
+
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 2fc8a69..997f286 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -198,10 +198,10 @@ names.sort()
+ for name in names:
+ try:
+ fnlist = packages[name].get_file_list()
+- except OSError, e:
++ except OSError as e:
+ sys.stderr.write("Package %s disappeared on us!\n" % (name))
+ continue
+- except IOError, e:
++ except IOError as e:
+ sys.stderr.write("Package %s disappeared on us!\n" % (name))
+ continue
+ for fn in fnlist:
+diff --git a/opkg.py b/opkg.py
+index 75ad3d3..ae31794 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -176,7 +176,7 @@ class Package:
+ elif name == 'size':
+ return self._get_file_size()
+ else:
+- raise AttributeError, name
++ raise AttributeError(name)
+
+ def _computeFileMD5(self):
+ # compute the MD5.
diff --git a/patches/opkg-utils-r4747/0014-opkg-make-index-show-OSError-IOError.patch b/patches/opkg-utils-r4747/0014-opkg-make-index-show-OSError-IOError.patch
new file mode 100644
index 0000000..fe0b154
--- /dev/null
+++ b/patches/opkg-utils-r4747/0014-opkg-make-index-show-OSError-IOError.patch
@@ -0,0 +1,58 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 13:56:50 +0200
+Subject: [PATCH] opkg-make-index: show OSError/IOError
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 997f286..e0844a7 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -131,11 +131,11 @@ for filename in files:
+ to_morgue(basename)
+ if opt_s:
+ print(filename)
+- except OSError:
+- sys.stderr.write("Package %s disappeared on us!\n" % (filename))
++ except OSError as e:
++ sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (filename, e))
+ continue
+- except IOError:
+- sys.stderr.write("Package %s disappeared on us!\n" % (filename))
++ except IOError as e:
++ sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (filename, e))
+ continue
+
+ pkgsStampsFile = open(stamplist_filename, "w")
+@@ -173,11 +173,11 @@ for name in names:
+ if (verbose):
+ sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
+ print(pkg)
+- except OSError:
+- sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ except OSError as e:
++ sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e))
+ continue
+- except IOError:
+- sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ except IOError as e:
++ sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e))
+ continue
+
+ if packages_filename:
+@@ -199,10 +199,10 @@ for name in names:
+ try:
+ fnlist = packages[name].get_file_list()
+ except OSError as e:
+- sys.stderr.write("Package %s disappeared on us!\n" % (name))
++ 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" % (name))
++ sys.stderr.write("Package %s disappeared on us!\n(%s)\n" % (name, e))
+ continue
+ for fn in fnlist:
+ (h,t) = os.path.split(fn)
diff --git a/patches/opkg-utils-r4747/0015-opkg.py-use-string-funtcions-directly-on-string-vari.patch b/patches/opkg-utils-r4747/0015-opkg.py-use-string-funtcions-directly-on-string-vari.patch
new file mode 100644
index 0000000..782f6d8
--- /dev/null
+++ b/patches/opkg-utils-r4747/0015-opkg.py-use-string-funtcions-directly-on-string-vari.patch
@@ -0,0 +1,96 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 13:44:14 +0200
+Subject: [PATCH] opkg.py: use string funtcions directly on string variable
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 3 +--
+ opkg-show-deps | 11 +++++------
+ opkg.py | 5 ++---
+ 3 files changed, 8 insertions(+), 11 deletions(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index e0844a7..898a2f6 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -5,7 +5,6 @@ from glob import glob
+ import subprocess
+ import opkg
+ import getopt
+-import string
+ import re
+
+ verbose = 0
+@@ -158,7 +157,7 @@ for name in names:
+ try:
+ pkg = packages.packages[name]
+ if locales_dir and pkg.depends:
+- depends = string.split(pkg.depends, ',')
++ depends = pkg.depends.split(',')
+ locale = None
+ for d in depends:
+ m = re.match('.*virtual-locale-([a-zA-Z]+).*', d)
+diff --git a/opkg-show-deps b/opkg-show-deps
+index 3f5899d..d188aad 100755
+--- a/opkg-show-deps
++++ b/opkg-show-deps
+@@ -4,7 +4,6 @@ import sys, os, posixpath
+ from glob import glob
+ import opkg
+ import getopt
+-import string
+ import re
+
+ verbose = 0
+@@ -32,11 +31,11 @@ provider_hash = {}
+
+ def split_list(str):
+ r = []
+- l = string.split(str, ",")
++ l = str.split(",")
+ for i in l:
+- ll = string.split(i, "|")
++ ll = i.split("|")
+ for ii in ll:
+- ii = string.strip(ii)
++ ii = ii.strip()
+ r.append(ii)
+ return r
+
+@@ -46,9 +45,9 @@ for i in list(packages.packages.keys()):
+ provider_hash[p.package] = []
+ provider_hash[p.package].append(p)
+ if p.provides:
+- provides = string.split(p.provides, ",")
++ provides = p.provides.split(",")
+ for prov in provides:
+- prov = string.strip(prov)
++ prov = prov.strip()
+ if prov not in provider_hash:
+ provider_hash[prov] = []
+ provider_hash[prov].append(p)
+diff --git a/opkg.py b/opkg.py
+index ae31794..856e057 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -38,7 +38,6 @@ import sys
+ import glob
+ import hashlib
+ import re
+-import string
+ import subprocess
+ from stat import ST_SIZE
+ import arfile
+@@ -203,10 +202,10 @@ class Package:
+ line = control.readline()
+ while 1:
+ if not line: break
+- line = string.rstrip(line)
++ line = line.rstrip()
+ lineparts = re.match(r'([\w-]*?):\s*(.*)', line)
+ if lineparts:
+- name = string.lower(lineparts.group(1))
++ name = lineparts.group(1).lower()
+ value = lineparts.group(2)
+ while 1:
+ line = control.readline()
diff --git a/patches/opkg-utils-r4747/0016-opkg.py-catch-TypeError-when-reading-control-file-to.patch b/patches/opkg-utils-r4747/0016-opkg.py-catch-TypeError-when-reading-control-file-to.patch
new file mode 100644
index 0000000..68ddae8
--- /dev/null
+++ b/patches/opkg-utils-r4747/0016-opkg.py-catch-TypeError-when-reading-control-file-to.patch
@@ -0,0 +1,42 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 14:34:46 +0200
+Subject: [PATCH] opkg.py: catch TypeError when reading control file, to show
+ which one is failing
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/opkg.py b/opkg.py
+index 856e057..299e84e 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -161,7 +161,10 @@ class Package:
+ control = tarf.extractfile("control")
+ except KeyError:
+ control = tarf.extractfile("./control")
+- self.read_control(control)
++ try:
++ self.read_control(control)
++ except TypeError as e:
++ sys.stderr.write("Cannot read control file '%s' - %s\n" % (fn, e))
+ control.close()
+
+ self.scratch_dir = None
+@@ -457,9 +460,13 @@ class Packages:
+
+ def read_packages_file(self, fn):
+ f = open(fn, "r")
+- while 1:
++ while True:
+ pkg = Package()
+- pkg.read_control(f)
++ try:
++ pkg.read_control(f)
++ except TypeError as e:
++ sys.stderr.write("Cannot read control file '%s' - %s\n" % (fn, e))
++ continue
+ if pkg.get_package():
+ self.add_package(pkg)
+ else:
diff --git a/patches/opkg-utils-r4747/0017-arfile-fix-test.patch b/patches/opkg-utils-r4747/0017-arfile-fix-test.patch
new file mode 100644
index 0000000..5aad82c
--- /dev/null
+++ b/patches/opkg-utils-r4747/0017-arfile-fix-test.patch
@@ -0,0 +1,23 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 16:38:06 +0200
+Subject: [PATCH] arfile: fix test
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ arfile.py | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/arfile.py b/arfile.py
+index 3f797a8..88ace46 100644
+--- a/arfile.py
++++ b/arfile.py
+@@ -131,5 +131,8 @@ if __name__ == "__main__":
+ tarf = tarfile.open("control.tar.gz", "r", tarStream)
+ #tarf.list()
+
+- f2 = tarf.extractfile("control")
++ try:
++ f2 = tarf.extractfile("control")
++ except KeyError:
++ f2 = tarf.extractfile("./control")
+ print(f2.read())
diff --git a/patches/opkg-utils-r4747/0018-opkg-make-index-don-t-use-stdout-for-Packages-output.patch b/patches/opkg-utils-r4747/0018-opkg-make-index-don-t-use-stdout-for-Packages-output.patch
new file mode 100644
index 0000000..c606af7
--- /dev/null
+++ b/patches/opkg-utils-r4747/0018-opkg-make-index-don-t-use-stdout-for-Packages-output.patch
@@ -0,0 +1,86 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 16:40:49 +0200
+Subject: [PATCH] opkg-make-index: don't use stdout for Packages output and use
+ __str__ instead of __repr__
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 17 +++++++++--------
+ opkg.py | 4 ++--
+ 2 files changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 898a2f6..02c425f 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -148,9 +148,8 @@ if opt_s:
+ if verbose:
+ sys.stderr.write("Generating Packages file\n")
+ if packages_filename:
+- old_stdout = sys.stdout
+ tmp_packages_filename = ("%s.%d" % (packages_filename, os.getpid()))
+- sys.stdout = open(tmp_packages_filename, "w")
++ pkgsFile = open(tmp_packages_filename, "w")
+ names = list(packages.packages.keys())
+ names.sort()
+ for name in names:
+@@ -171,7 +170,10 @@ for name in names:
+ continue
+ if (verbose):
+ sys.stderr.write("Writing info for package %s\n" % (pkg.package,))
+- print(pkg)
++ 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
+@@ -180,8 +182,7 @@ for name in names:
+ continue
+
+ if packages_filename:
+- sys.stdout.close()
+- sys.stdout = old_stdout
++ 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)
+@@ -211,12 +212,12 @@ for name in names:
+
+ if filelist_filename:
+ tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid()))
+- sys.stdout = open(tmp_filelist_filename, "w")
++ f = open(tmp_filelist_filename, "w")
+ names = list(files.keys())
+ names.sort()
+ for name in names:
+- print((name,files[name]))
+- sys.stdout.close()
++ 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 299e84e..84583be 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -402,7 +402,7 @@ class Package:
+ ref.parsed_version = parse_version(ref.version)
+ return self.parsed_version.compare(ref.parsed_version)
+
+- def __repr__(self):
++ def __str__(self):
+ out = ""
+
+ # XXX - Some checks need to be made, and some exceptions
+@@ -506,7 +506,7 @@ if __name__ == "__main__":
+ package.set_description("A test of the APIs.")
+
+ print("<")
+- sys.stdout.write(package)
++ sys.stdout.write(str(package))
+ print(">")
+
+ package.write_package("/tmp")
diff --git a/patches/opkg-utils-r4747/0019-opkg.py-cast-lines-from-controlfile-as-string.patch b/patches/opkg-utils-r4747/0019-opkg.py-cast-lines-from-controlfile-as-string.patch
new file mode 100644
index 0000000..e2ee060
--- /dev/null
+++ b/patches/opkg-utils-r4747/0019-opkg.py-cast-lines-from-controlfile-as-string.patch
@@ -0,0 +1,22 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 16:43:04 +0200
+Subject: [PATCH] opkg.py: cast lines from controlfile as string
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg.py b/opkg.py
+index 84583be..6c39616 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -206,7 +206,7 @@ class Package:
+ while 1:
+ if not line: break
+ line = line.rstrip()
+- lineparts = re.match(r'([\w-]*?):\s*(.*)', line)
++ lineparts = re.match(r'([\w-]*?):\s*(.*)', str(line))
+ if lineparts:
+ name = lineparts.group(1).lower()
+ value = lineparts.group(2)
diff --git a/patches/opkg-utils-r4747/0020-opkg.py-computeFileMD5-only-when-we-have-fn-otherwis.patch b/patches/opkg-utils-r4747/0020-opkg.py-computeFileMD5-only-when-we-have-fn-otherwis.patch
new file mode 100644
index 0000000..d2963ee
--- /dev/null
+++ b/patches/opkg-utils-r4747/0020-opkg.py-computeFileMD5-only-when-we-have-fn-otherwis.patch
@@ -0,0 +1,40 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 22:43:30 +0200
+Subject: [PATCH] opkg.py: computeFileMD5 only when we have fn, otherwise fails
+ to read None file
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/opkg.py b/opkg.py
+index 6c39616..9daff9e 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -182,14 +182,17 @@ class Package:
+
+ def _computeFileMD5(self):
+ # compute the MD5.
+- f = open(self.fn, "rb")
+- sum = hashlib.md5()
+- while True:
+- data = f.read(1024)
+- if not data: break
+- sum.update(data)
+- f.close()
+- self.md5 = sum.hexdigest()
++ if not self.fn:
++ self.md5 = 'Unknown'
++ else:
++ f = open(self.fn, "rb")
++ sum = hashlib.md5()
++ while True:
++ data = f.read(1024)
++ if not data: break
++ sum.update(data)
++ f.close()
++ self.md5 = sum.hexdigest()
+
+ def _get_file_size(self):
+ if not self.fn:
diff --git a/patches/opkg-utils-r4747/0021-opkg.py-fix-write_package-when-called-from-main-test.patch b/patches/opkg-utils-r4747/0021-opkg.py-fix-write_package-when-called-from-main-test.patch
new file mode 100644
index 0000000..029ccc4
--- /dev/null
+++ b/patches/opkg-utils-r4747/0021-opkg.py-fix-write_package-when-called-from-main-test.patch
@@ -0,0 +1,31 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 22:47:50 +0200
+Subject: [PATCH] opkg.py: fix write_package when called from main test
+
+* there is no self.meta_dir before self._setup_scratch_area
+* control file needs to be closed before packing it with tar, otherwise it could be empty
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/opkg.py b/opkg.py
+index 9daff9e..ad3a695 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -344,11 +344,11 @@ class Package:
+ return self.file_ext_opk
+
+ def write_package(self, dirname):
+- buf = self.render_control()
++ self._setup_scratch_area()
+ file = open("%s/control" % self.meta_dir, 'w')
+- file.write(buf)
++ file.write(str(self))
++ file.close()
+
+- self._setup_scratch_area()
+ cmd = "cd %s ; tar cvfz %s/control.tar.gz control" % (self.meta_dir,
+ self.scratch_dir)
+
diff --git a/patches/opkg-utils-r4747/0022-opkg.py-use-textwrap-for-description-writing.patch b/patches/opkg-utils-r4747/0022-opkg.py-use-textwrap-for-description-writing.patch
new file mode 100644
index 0000000..68f8794
--- /dev/null
+++ b/patches/opkg-utils-r4747/0022-opkg.py-use-textwrap-for-description-writing.patch
@@ -0,0 +1,36 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 23:35:51 +0200
+Subject: [PATCH] opkg.py: use textwrap for description writing
+
+* description field in oe-core sometimes has extra line-feeds and is long
+* extra line-feeds breaks read_control, because empty line means next Package
+* long descriptions should be wrapped and properly indented, so they are parsed back properly
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/opkg.py b/opkg.py
+index ad3a695..2294160 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -42,6 +42,7 @@ import subprocess
+ from stat import ST_SIZE
+ import arfile
+ import tarfile
++import textwrap
+
+ class Version:
+ """A class for holding parsed package version information."""
+@@ -427,7 +428,9 @@ class Package:
+ 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.description:
++ printable_description = textwrap.dedent(self.description).strip()
++ out = out + "Description: %s\n" % textwrap.fill(printable_description, width=74, initial_indent=' ', subsequent_indent=' ')
+ 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)
diff --git a/patches/opkg-utils-r4747/0023-opkg.py-improve-test-so-it-prints-temporary-control-.patch b/patches/opkg-utils-r4747/0023-opkg.py-improve-test-so-it-prints-temporary-control-.patch
new file mode 100644
index 0000000..7bce397
--- /dev/null
+++ b/patches/opkg-utils-r4747/0023-opkg.py-improve-test-so-it-prints-temporary-control-.patch
@@ -0,0 +1,37 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 29 Mar 2012 23:36:56 +0200
+Subject: [PATCH] opkg.py: improve test so it prints temporary control file
+ with long description and then reads it back
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/opkg.py b/opkg.py
+index 2294160..27cbc2a 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -509,11 +509,21 @@ if __name__ == "__main__":
+ package.set_architecture("arm")
+ package.set_maintainer("Testing <testing@testing.testing>")
+ package.set_depends("libc")
+- package.set_description("A test of the APIs.")
++ package.set_description("A test of the APIs. And very long descriptions so often used in oe-core\nfoo\n\n\nbar")
+
+ print("<")
+ sys.stdout.write(str(package))
+ print(">")
++ f = open("/tmp/control", "w")
++ f.write(str(package))
++ f.close()
++
++ f = open("/tmp/control", "r")
++ package2 = Package()
++ package2.read_control(f)
++ print("<")
++ sys.stdout.write(str(package2))
++ print(">")
+
+ package.write_package("/tmp")
+
diff --git a/patches/opkg-utils-r4747/0024-opkg-make-index-generate-complete-filelist.patch b/patches/opkg-utils-r4747/0024-opkg-make-index-generate-complete-filelist.patch
new file mode 100644
index 0000000..32b8ea4
--- /dev/null
+++ b/patches/opkg-utils-r4747/0024-opkg-make-index-generate-complete-filelist.patch
@@ -0,0 +1,124 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 5 Apr 2012 11:03:02 +0200
+Subject: [PATCH] opkg-make-index: generate complete filelist
+
+* when '-l Packages.filelist' option is used together with '-r Packages.old',
+ then only 'new' packages are processed to create Packages.filelist
+ packages found in Packages.old doesn't have fn set so get_file_list()
+ was returning empty
+* now added get_file_list_dir() looks for filename in pkg_dir and if it
+ finds correct .ipk file it will use that to read its filelist, but it
+ also means that it will always unpack *all* Packages - very slow.
+* it would be nice to add new param for Packages.filelist.old and then
+ filter filelist for packages used from Packages.old and merge it
+ together with new Packages.filelist, but that's more difficult because
+ of files structure.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 64 ++++++++++++++++++++++++++++++---------------------------
+ opkg.py | 16 +++++++++++++++
+ 2 files changed, 50 insertions(+), 30 deletions(-)
+
+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)
diff --git a/patches/opkg-utils-r4747/0025-opkg.py-get_file_list_dir-fix-empty-output-from-find.patch b/patches/opkg-utils-r4747/0025-opkg.py-get_file_list_dir-fix-empty-output-from-find.patch
new file mode 100644
index 0000000..390e255
--- /dev/null
+++ b/patches/opkg-utils-r4747/0025-opkg.py-get_file_list_dir-fix-empty-output-from-find.patch
@@ -0,0 +1,41 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Thu, 5 Apr 2012 13:03:17 +0200
+Subject: [PATCH] opkg.py: get_file_list_dir: fix empty output from find if
+ package disappers
+
+* if .ipk disappers before parsing Packages.old then it's fine and it's not used at all
+* but if it disappers between parsing Packages.old and generating Packages.filelist then
+ it would fail to split() empty output
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg.py | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/opkg.py b/opkg.py
+index 707a882..84a8eb1 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -330,9 +330,10 @@ class Package:
+ 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
++ if rc != "":
++ 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:
+@@ -342,7 +343,7 @@ class Package:
+
+ def get_file_list(self):
+ if not self.fn:
+- sys.stderr.write("Package '%s' has empty fn returning empty filelist\n" % (self.package))
++ 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)
diff --git a/patches/opkg-utils-r4747/0026-opkg-make-index-disable-filelist-by-default.patch b/patches/opkg-utils-r4747/0026-opkg-make-index-disable-filelist-by-default.patch
new file mode 100644
index 0000000..76ba768
--- /dev/null
+++ b/patches/opkg-utils-r4747/0026-opkg-make-index-disable-filelist-by-default.patch
@@ -0,0 +1,24 @@
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Mon, 23 Apr 2012 10:36:25 +0200
+Subject: [PATCH] opkg-make-index: disable filelist by default
+
+* user has to specify filename with -l to enable it
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 4425107..22393e8 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -37,7 +37,7 @@ def to_locale(filename, locale):
+
+ old_filename = None
+ packages_filename = None
+-filelist_filename = "Packages.filelist"
++filelist_filename = None
+ stamplist_filename = "Packages.stamps"
+ opt_s = 0
+ opt_m = 0
diff --git a/patches/opkg-utils-r4747/0027-Option-C-ist-shown-in-usage-and-implemented-but-was-.patch b/patches/opkg-utils-r4747/0027-Option-C-ist-shown-in-usage-and-implemented-but-was-.patch
new file mode 100644
index 0000000..4a30fc7
--- /dev/null
+++ b/patches/opkg-utils-r4747/0027-Option-C-ist-shown-in-usage-and-implemented-but-was-.patch
@@ -0,0 +1,24 @@
+From: Ondics Githubler <githubler@ondics.de>
+Date: Tue, 29 May 2012 17:34:14 +0200
+Subject: [PATCH] Option "C" ist shown in usage() and implemented, but was
+ missing in getopts. Added "C".
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ opkg-build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-build b/opkg-build
+index 012afd3..485897a 100755
+--- a/opkg-build
++++ b/opkg-build
+@@ -160,7 +160,7 @@ outer=ar
+ noclean=0
+ opkext=0
+ usage="Usage: $0 [-c] [-C] [-O] [-o owner] [-g group] <pkg_directory> [<destination_directory>]"
+-while getopts "cg:ho:vO" opt; do
++while getopts "cCg:ho:vO" opt; do
+ case $opt in
+ o ) owner=$OPTARG
+ ogargs="--owner=$owner"
diff --git a/patches/opkg-utils-r4747/0028-Changed-call-to-subprocess.check_output-which-isn-t-.patch b/patches/opkg-utils-r4747/0028-Changed-call-to-subprocess.check_output-which-isn-t-.patch
new file mode 100644
index 0000000..b119dea
--- /dev/null
+++ b/patches/opkg-utils-r4747/0028-Changed-call-to-subprocess.check_output-which-isn-t-.patch
@@ -0,0 +1,27 @@
+From: Chris Diamand <chris@diamand.org>
+Date: Tue, 29 May 2012 17:34:15 +0200
+Subject: [PATCH] Changed call to subprocess.check_output which isn't
+ compatible with Python 2.6
+
+subprocess.check_output is not present in Python 2.6. Since the return value
+is not being used anyway, replace it with subprocess.call(), which is.
+
+Signed-off-by: Chris Diamand <chris@diamand.org>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ opkg-make-index | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 22393e8..1c3a8e1 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -186,7 +186,7 @@ if packages_filename:
+ 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)
+- rc = subprocess.check_output(gzip_cmd, shell=True)
++ subprocess.call(gzip_cmd, shell=True)
+ os.rename(tmp_packages_filename, packages_filename)
+ os.rename(tmp_gzip_filename, gzip_filename)
+
diff --git a/patches/opkg-utils-r4747/0029-opkg.py-Add-check_output-defintion-so-it-works-on-py.patch b/patches/opkg-utils-r4747/0029-opkg.py-Add-check_output-defintion-so-it-works-on-py.patch
new file mode 100644
index 0000000..8f33b06
--- /dev/null
+++ b/patches/opkg-utils-r4747/0029-opkg.py-Add-check_output-defintion-so-it-works-on-py.patch
@@ -0,0 +1,45 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 19 Jul 2012 16:55:12 +0100
+Subject: [PATCH] opkg.py: Add check_output defintion so it works on python 2.6
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ opkg.py | 22 +++++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/opkg.py b/opkg.py
+index 84a8eb1..45a6119 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -326,10 +326,30 @@ class Package:
+ return self.license
+
+ def get_file_list_dir(self, directory):
++ def check_output(*popenargs, **kwargs):
++ """Run command with arguments and return its output as a byte string.
++
++ Backported from Python 2.7 as it's implemented as pure python on stdlib.
++
++ >>> check_output(['/usr/bin/python', '--version'])
++ Python 2.6.2
++ """
++ process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
++ output, unused_err = process.communicate()
++ retcode = process.poll()
++ if retcode:
++ cmd = kwargs.get("args")
++ if cmd is None:
++ cmd = popenargs[0]
++ error = subprocess.CalledProcessError(retcode, cmd)
++ error.output = output
++ raise error
++ return output
++
+ if not self.fn:
+ try:
+ cmd = "find %s -name %s | head -n 1" % (directory, self.filename)
+- rc = subprocess.check_output(cmd, shell=True)
++ rc = check_output(cmd, shell=True)
+ if rc != "":
+ 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))
diff --git a/patches/opkg-utils-r4747/0030-opkg-make-index-fix-mis-indented-else.patch b/patches/opkg-utils-r4747/0030-opkg-make-index-fix-mis-indented-else.patch
new file mode 100644
index 0000000..68d167e
--- /dev/null
+++ b/patches/opkg-utils-r4747/0030-opkg-make-index-fix-mis-indented-else.patch
@@ -0,0 +1,22 @@
+From: Marc Olzheim <marc@iphion.nl>
+Date: Thu, 4 Oct 2012 11:01:10 +0200
+Subject: [PATCH] opkg-make-index: fix mis-indented else:
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ opkg-make-index | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-make-index b/opkg-make-index
+index 1c3a8e1..44fa64d 100755
+--- a/opkg-make-index
++++ b/opkg-make-index
+@@ -213,7 +213,7 @@ if filelist_filename:
+ (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
++ else: files[t] = files[t] + ',' + name+':'+fn
+
+ tmp_filelist_filename = ("%s.%d" % (filelist_filename, os.getpid()))
+ f = open(tmp_filelist_filename, "w")
diff --git a/patches/opkg-utils-r4747/0031-opkg.py-opkg-build-fix-creation-of-tar-archives.patch b/patches/opkg-utils-r4747/0031-opkg.py-opkg-build-fix-creation-of-tar-archives.patch
new file mode 100644
index 0000000..7954080
--- /dev/null
+++ b/patches/opkg-utils-r4747/0031-opkg.py-opkg-build-fix-creation-of-tar-archives.patch
@@ -0,0 +1,79 @@
+From: Steffen Sledz <sledz@dresearch-fe.de>
+Date: Wed, 24 Oct 2012 12:53:56 +0200
+Subject: [PATCH] opkg.py/opkg-build: fix creation of tar archives
+
+Since openSUSE 12.2 the installed tar uses posix instead of gnu encoding
+by default. This format is not fully supported by opkg and results in
+ipk packages not installable at the target.
+
+Collected errors:
+ * get_header_tar: Unknown typeflag: 0x78: Success.
+ * get_header_tar: Unknown typeflag: 0x78: Success.
+ * get_header_tar: Unknown typeflag: 0x78: Success.
+ * extract_archive: Don't know how to handle /var/lib/opkg/tmp/opkg-mg997m/chicken-bin-fGRvr4/PaxHeaders.17512/.: No such file or directory.
+ * get_header_tar: Unknown typeflag: 0x78: No such file or directory.
+ * get_header_tar: Unknown typeflag: 0x78: No such file or directory.
+ ...
+
+Signed-off-by: Steffen Sledz <sledz@dresearch-fe.de>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ opkg-build | 6 +++---
+ opkg.py | 6 +++---
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/opkg-build b/opkg-build
+index 485897a..f8c6151 100755
+--- a/opkg-build
++++ b/opkg-build
+@@ -233,8 +233,8 @@ tmp_dir=$dest_dir/IPKG_BUILD.$$
+ mkdir $tmp_dir
+
+ echo $CONTROL > $tmp_dir/tarX
+-( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -czf $tmp_dir/data.tar.gz . )
+-( cd $pkg_dir/$CONTROL && tar $ogargs -czf $tmp_dir/control.tar.gz . )
++( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -cz --format=gnu -f $tmp_dir/data.tar.gz . )
++( cd $pkg_dir/$CONTROL && tar $ogargs -cz --format=gnu -f $tmp_dir/control.tar.gz . )
+ rm $tmp_dir/tarX
+
+ echo "2.0" > $tmp_dir/debian-binary
+@@ -249,7 +249,7 @@ rm -f $pkg_file
+ if [ "$outer" = "ar" ] ; then
+ ( cd $tmp_dir && ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+ else
+- ( cd $tmp_dir && tar -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
++ ( cd $tmp_dir && tar -cz --format=gnu -f $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+ fi
+
+ rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
+diff --git a/opkg.py b/opkg.py
+index 45a6119..c839100 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -387,7 +387,7 @@ class Package:
+ file.write(str(self))
+ file.close()
+
+- cmd = "cd %s ; tar cvfz %s/control.tar.gz control" % (self.meta_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)
+@@ -402,7 +402,7 @@ class Package:
+ bits = "control.tar.gz"
+
+ if self.file_list:
+- cmd = "cd %s ; tar cvfz %s/data.tar.gz" % (self.file_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)
+@@ -417,7 +417,7 @@ class Package:
+ bits = bits + " data.tar.gz"
+
+ file = "%s_%s_%s.%s" % (self.package, self.version, self.architecture, self.get_package_extension())
+- cmd = "cd %s ; tar cvfz %s/%s %s" % (self.scratch_dir,
++ cmd = "cd %s ; tar cvz --format=gnu -f %s/%s %s" % (self.scratch_dir,
+ dirname,
+ file,
+ bits)
diff --git a/patches/opkg-utils-r4747/0032-opkg-build-Remove-bashism-in-sh-script.patch b/patches/opkg-utils-r4747/0032-opkg-build-Remove-bashism-in-sh-script.patch
new file mode 100644
index 0000000..66ab487
--- /dev/null
+++ b/patches/opkg-utils-r4747/0032-opkg-build-Remove-bashism-in-sh-script.patch
@@ -0,0 +1,25 @@
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Tue, 26 Mar 2013 13:56:22 +0000
+Subject: [PATCH] opkg-build: Remove bashism in sh script
+
+Otherwise this fills logs with output on systems with dash as /bin/sh,
+we might as well execute cleanly.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ opkg-build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-build b/opkg-build
+index f8c6151..90a7111 100755
+--- a/opkg-build
++++ b/opkg-build
+@@ -239,7 +239,7 @@ rm $tmp_dir/tarX
+
+ echo "2.0" > $tmp_dir/debian-binary
+
+-if (( $opkext == 1)); then
++if [ $opkext -eq 1 ]; then
+ pkg_file=$dest_dir/${pkg}_${version}_${arch}.opk
+ else
+ pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
diff --git a/patches/opkg-utils-r4747/0033-AUTHORS-New-file.patch b/patches/opkg-utils-r4747/0033-AUTHORS-New-file.patch
new file mode 100644
index 0000000..c372536
--- /dev/null
+++ b/patches/opkg-utils-r4747/0033-AUTHORS-New-file.patch
@@ -0,0 +1,19 @@
+From: Paul Barker <paul@paulbarker.me.uk>
+Date: Tue, 3 Dec 2013 13:19:19 +0000
+Subject: [PATCH] AUTHORS: New file
+
+Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
+---
+ AUTHORS | 3 +++
+ 1 file changed, 3 insertions(+)
+ create mode 100644 AUTHORS
+
+diff --git a/AUTHORS b/AUTHORS
+new file mode 100644
+index 0000000..01df80d
+--- /dev/null
++++ b/AUTHORS
+@@ -0,0 +1,3 @@
++Current maintainer: Paul Barker <paul@paulbarker.me.uk>
++
++For a list of additional authors and contributors, see the git commit log.
diff --git a/patches/opkg-utils-r4747/0034-CONTRIBUTING-New-file.patch b/patches/opkg-utils-r4747/0034-CONTRIBUTING-New-file.patch
new file mode 100644
index 0000000..1a861c3
--- /dev/null
+++ b/patches/opkg-utils-r4747/0034-CONTRIBUTING-New-file.patch
@@ -0,0 +1,138 @@
+From: Paul Barker <paul@paulbarker.me.uk>
+Date: Fri, 20 Dec 2013 17:19:03 +0000
+Subject: [PATCH] CONTRIBUTING: New file
+
+Added instructions for potential contributors.
+
+Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
+---
+ CONTRIBUTING | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 120 insertions(+)
+ create mode 100644 CONTRIBUTING
+
+diff --git a/CONTRIBUTING b/CONTRIBUTING
+new file mode 100644
+index 0000000..c76fb67
+--- /dev/null
++++ b/CONTRIBUTING
+@@ -0,0 +1,120 @@
++% Contributing to opkg-utils
++
++## Starting off
++
++To contribute to opkg-utils, you'll need a basic understanding of how to use
++git. You'll also need to make sure you can use `git send-email` - maybe try
++sending a few patches to your own email address first to check you've got it set
++up correctly.
++
++If you don't have the latest opkg-utils sources, you'll need to clone the
++official repository:
++
++ git clone git://git.yoctoproject.org/opkg-utils.git
++
++## Developing patches
++
++Now make and commit your changes (that bit is left as an exercize for the
++reader). Developing on a separate branch is a very good idea:
++
++ git checkout -b my-branch
++ git add ... # As appropriate
++ git commit -s # As appropriate
++
++Adding a "Signed-off-by" line (using the -s option to `git commit`) is very
++important and signifies acceptance of the Developer's Certificate of Origin (see
++appendix). We also accept "Cc", "Acked-by" and "Tested-by" lines as appropriate,
++as per the [submission guidelines for the Linux kernel][1]. We're not currently
++interested in "Reviewed-by", "Reported-by" or "Suggested-by" lines.
++
++The subject (first line of the commit message) for each patch should begin with
++the submodule, file or function that is modified, followed by a short (<50
++characters if possible) description of the change. That helps
++a lot to find anything related to a submodule or file by searching with a
++simple 'git log | grep [foo]'.
++
++The remainder of the commit message should explain in detail what was changed
++and why.
++
++Each patch should make a single logical change. If multiple files are changed to
++fix one bug or add one feature, that should be a single patch. If one file is
++changed to fix multiple bugs, that should be multiple patches.
++
++[1]: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches
++
++## Submitting patches for review
++
++Opkg-utils is primarily used by the OpenEmbedded build system but may also be
++used by other embedded Linux projects. For now, please submit all patches to
++both the Yocto Project mailing list (yocto@yoctoproject.org), the opkg mailing
++list (opkg-devel@googlegroups.com) and Cc the maintainer
++(paul@paulbarker.me.uk), adding a subject prefix of "opkg-utils PATCH" (this
++prefix is necessary as the Yocto Project mailing list receives patches for many
++projects). Also make sure that you use the -M option on the command line or the
++"diff.renames=copy" option in your config.
++
++That sounds like a lot to remember but if you run the following commands in your
++opkg-utils directory it will all be done automatically when you use
++`git format-patch` or `git send-email`:
++
++ git config format.to "opkg-devel@googlegroups.com"
++ git config --add format.to "yocto@yoctoproject.org"
++ git config format.cc "paul@paulbarker.me.uk"
++ git config format.subjectprefix "opkg-utils PATCH"
++ git config diff.renames copy
++
++To prepare your patches, assuming you took the advice before about developing on
++a separate branch:
++
++ git format-patch master
++
++You can add `--cover-letter` to that command if you want to include a
++descriptive email along with your patches.
++
++Once you've checked the generated patch files, run:
++
++ git send-email
++
++That should result in your patches being sent to the relevant mailing lists in
++the correct format. The patches should then be reviewed and you should receive
++feedback by email. If you haven't heard anything within 2 weeks, feel free to
++send us a reminder.
++
++If you need any further help or advice, just ask on the opkg-devel mailing list
++(opkg-devel@googlegroups.com).
++
++## Commit Access
++
++If you have commit access to the opkg-utils git repository, it is assumed that
++you know what you're doing. You can bypass the mailing list and push your
++changes directly to the public repository, just make sure that you test things
++properly and sign off your patches!
++
++Appendix: Developer's Certificate of Origin
++===========================================
++
++ Developer's Certificate of Origin 1.1
++
++ By making a contribution to this project, I certify that:
++
++ (a) The contribution was created in whole or in part by me and I
++ have the right to submit it under the open source license
++ indicated in the file; or
++
++ (b) The contribution is based upon previous work that, to the best
++ of my knowledge, is covered under an appropriate open source
++ license and I have the right under that license to submit that
++ work with modifications, whether created in whole or in part
++ by me, under the same open source license (unless I am
++ permitted to submit under a different license), as indicated
++ in the file; or
++
++ (c) The contribution was provided directly to me by some other
++ person who certified (a), (b) or (c) and I have not modified
++ it.
++
++ (d) I understand and agree that this project and the contribution
++ are public and that a record of the contribution (including all
++ personal information I submit with it, including my sign-off) is
++ maintained indefinitely and may be redistributed consistent with
++ this project or the open source license(s) involved.
diff --git a/patches/opkg-utils-r4747/0035-opkg-make-ar-deterministic.patch b/patches/opkg-utils-r4747/0035-opkg-make-ar-deterministic.patch
new file mode 100644
index 0000000..e8c7a34
--- /dev/null
+++ b/patches/opkg-utils-r4747/0035-opkg-make-ar-deterministic.patch
@@ -0,0 +1,50 @@
+From: Michael Olbrich <m.olbrich@pengutronix.de>
+Date: Tue, 24 May 2011 07:56:53 +0200
+Subject: [PATCH] opkg: make ar deterministic
+
+Based on a patch from Darren Hutchinson <dhutchinson@google.com>
+
+From the original description:
+
+I had a strange problem when I tried to create an image.
+The last part of the error message was:
+
+File
+"<path to ptxdist>/projects/<project name>/ \
+platform-<project name>/sysroot-host/lib/python2.6/site-packages/arfile.py",
+line 79, in _scan
+ size = int(descriptor[5])
+ValueError: invalid literal for int() with base 10: '`'
+
+The problem eventually turned out to be that arfile.py has trouble parsing AR
+files created with a UID >99999 - it relies on the (ascii) AR header fields
+using one digit less than their allocated sizes so it can the padding
+space to split() them.
+
+The original patch added the option 'D' to ar to set the UID and GID to
+zero. This option is not available in older versions of ar. chown to 0:0
+instead. This is possible because the everything is run in fakeroot.
+
+Not for upstream!
+
+Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
+---
+ opkg-build | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/opkg-build b/opkg-build
+index 90a7111..fb533a6 100755
+--- a/opkg-build
++++ b/opkg-build
+@@ -247,7 +247,10 @@ fi
+
+ rm -f $pkg_file
+ if [ "$outer" = "ar" ] ; then
+- ( cd $tmp_dir && ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
++ # chown the content to "0:0". files. This is needed as high UID values (>
++ # 99999) cause problems when parsing ar file headers
++ ( cd $tmp_dir && chown 0:0 ./debian-binary ./data.tar.gz ./control.tar.gz &&
++ ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+ else
+ ( cd $tmp_dir && tar -cz --format=gnu -f $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+ fi
diff --git a/patches/opkg-utils-r4747/0036-opkg-build-use-CROSS_COMPILE-ar.patch b/patches/opkg-utils-r4747/0036-opkg-build-use-CROSS_COMPILE-ar.patch
new file mode 100644
index 0000000..388e18b
--- /dev/null
+++ b/patches/opkg-utils-r4747/0036-opkg-build-use-CROSS_COMPILE-ar.patch
@@ -0,0 +1,28 @@
+From: =?UTF-8?q?Andreas=20Bie=C3=9Fmann?= <andreas@biessmann.de>
+Date: Fri, 20 Jan 2012 09:03:55 +0100
+Subject: [PATCH] opkg-build: use ${CROSS_COMPILE}ar
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Some host systems do not provide proper ar, make it possible to switch
+to cross-ar here.
+
+Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
+---
+ opkg-build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/opkg-build b/opkg-build
+index fb533a6..646787b 100755
+--- a/opkg-build
++++ b/opkg-build
+@@ -250,7 +250,7 @@ if [ "$outer" = "ar" ] ; then
+ # chown the content to "0:0". files. This is needed as high UID values (>
+ # 99999) cause problems when parsing ar file headers
+ ( cd $tmp_dir && chown 0:0 ./debian-binary ./data.tar.gz ./control.tar.gz &&
+- ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
++ ${CROSS_COMPILE}ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+ else
+ ( cd $tmp_dir && tar -cz --format=gnu -f $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+ fi
diff --git a/patches/opkg-utils-r4747/0037-Fill-out-Installed-Size.patch b/patches/opkg-utils-r4747/0037-Fill-out-Installed-Size.patch
new file mode 100644
index 0000000..2261dbd
--- /dev/null
+++ b/patches/opkg-utils-r4747/0037-Fill-out-Installed-Size.patch
@@ -0,0 +1,37 @@
+From: George McCollister <george.mccollister@gmail.com>
+Date: Fri, 23 Mar 2012 13:13:41 -0500
+Subject: [PATCH] Fill out Installed-Size
+
+Fill out Installed-Size so opkg can check to make sure there is enough
+space to install the package before attempting to do so.
+
+Signed-off-by: George McCollister <george.mccollister@gmail.com>
+---
+ opkg.py | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/opkg.py b/opkg.py
+index c839100..53cf54a 100644
+--- a/opkg.py
++++ b/opkg.py
+@@ -155,6 +155,11 @@ class Package:
+ ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
+
+ ar = arfile.ArFile(f, fn)
++
++ tarStream = ar.open("data.tar.gz")
++ tarf = tarfile.open("data.tar.gz", "r", tarStream)
++ self.installed_size = sum([f.size for f in tarf.getmembers()])
++
+ tarStream = ar.open("control.tar.gz")
+ tarf = tarfile.open("control.tar.gz", "r", tarStream)
+
+@@ -462,7 +467,7 @@ class Package:
+ if self.maintainer: out = out + "Maintainer: %s\n" % (self.maintainer)
+ if self.md5: out = out + "MD5Sum: %s\n" % (self.md5)
+ 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.installed_size: out = out + "Installed-Size: %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:
diff --git a/patches/opkg-utils-r4747/series b/patches/opkg-utils-r4747/series
index e9c4267..45a4799 100644
--- a/patches/opkg-utils-r4747/series
+++ b/patches/opkg-utils-r4747/series
@@ -1,10 +1,40 @@
# generated by git-ptx-patches
#tag:base --start-number 1
-0001-opkg-utils-use-env-python-instead-of-fixed-path.patch
-0002-opkg-make-ar-deterministic.patch
-0003-opkg-build-don-t-use-bashism.patch
-0004-opkg-Added-sha256-support.patch
-0005-opkg-build-use-CROSS_COMPILE-ar.patch
-0006-Fill-out-Installed-Size.patch
-0007-opkg-build-force-tar-gnu-format.patch
-# fd5b7b6773ea606e9581496ef7e369f4 - git-ptx-patches magic
+0001-opkg-compare-versions-Adapted-to-the-latest-opkg-ups.patch
+0002-opkg-make-index-don-t-error-out-when-some-package-di.patch
+0003-opkg-make-index-convert-mtime-to-int-before-comparin.patch
+0004-opkg.py-Add-knowledge-about-License-field-in-ipk-hea.patch
+0005-arfile.py-handle-six-digit-UIDs.patch
+0006-Use-python-via-the-PATH-rather-than-hardcoding-usr-b.patch
+0007-opkg.py-use-hashlib-instead-of-old-md5-module.patch
+0008-opkg.py-arfile.py-report-which-file-has-wrong-format.patch
+0009-arfile-decode-read-lines-as-ascii-string-before-gett.patch
+0010-2to3-use-subprocess-instead-of-commands.patch
+0011-2to3-print-fixes.patch
+0012-2to3-dictionary-fixes.patch
+0013-2to3-exception-handling-fixes.patch
+0014-opkg-make-index-show-OSError-IOError.patch
+0015-opkg.py-use-string-funtcions-directly-on-string-vari.patch
+0016-opkg.py-catch-TypeError-when-reading-control-file-to.patch
+0017-arfile-fix-test.patch
+0018-opkg-make-index-don-t-use-stdout-for-Packages-output.patch
+0019-opkg.py-cast-lines-from-controlfile-as-string.patch
+0020-opkg.py-computeFileMD5-only-when-we-have-fn-otherwis.patch
+0021-opkg.py-fix-write_package-when-called-from-main-test.patch
+0022-opkg.py-use-textwrap-for-description-writing.patch
+0023-opkg.py-improve-test-so-it-prints-temporary-control-.patch
+0024-opkg-make-index-generate-complete-filelist.patch
+0025-opkg.py-get_file_list_dir-fix-empty-output-from-find.patch
+0026-opkg-make-index-disable-filelist-by-default.patch
+0027-Option-C-ist-shown-in-usage-and-implemented-but-was-.patch
+0028-Changed-call-to-subprocess.check_output-which-isn-t-.patch
+0029-opkg.py-Add-check_output-defintion-so-it-works-on-py.patch
+0030-opkg-make-index-fix-mis-indented-else.patch
+0031-opkg.py-opkg-build-fix-creation-of-tar-archives.patch
+0032-opkg-build-Remove-bashism-in-sh-script.patch
+0033-AUTHORS-New-file.patch
+0034-CONTRIBUTING-New-file.patch
+0035-opkg-make-ar-deterministic.patch
+0036-opkg-build-use-CROSS_COMPILE-ar.patch
+0037-Fill-out-Installed-Size.patch
+# c3ac7caeaf558ed72be89dcb5578e592 - git-ptx-patches magic
--
1.8.5.2
--
ptxdist mailing list
ptxdist@pengutronix.de
next prev parent reply other threads:[~2014-01-14 7:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-14 7:19 [ptxdist] [PATCH 1/4] opkg: version bump 0.1.8 -> 0.2.0 Robert Schwebel
2014-01-14 7:19 ` Robert Schwebel [this message]
2014-01-14 7:19 ` [ptxdist] [PATCH 3/4] chrony: version bump 1.24-pre2 -> 1.29 Robert Schwebel
2014-01-14 7:19 ` [ptxdist] [PATCH 4/4] chrony: remove duplicate targetinstall for chrony_command Robert Schwebel
2014-01-23 16:50 ` Michael Olbrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1389683989-4494-2-git-send-email-r.schwebel@pengutronix.de \
--to=r.schwebel@pengutronix.de \
--cc=ptxdist@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox