Drop ipkg-utils

git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4864 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
Richard Purdie 2008-07-17 21:35:54 +00:00
parent d12df5427a
commit 382427b65d
7 changed files with 0 additions and 597 deletions

View File

@ -1,17 +0,0 @@
require ipkg-utils_${PV}.bb
RDEPENDS = ""
PR = "r15"
inherit native
# Avoid circular dependencies from package_ipk.bbclass
PACKAGES = ""
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ipkg-utils"
INSTALL += "arfile.py"
do_stage() {
for i in ${INSTALL}; do
install -m 0755 $i ${STAGING_BINDIR}
done
}

View File

@ -1,70 +0,0 @@
---
Makefile | 2 ++
ipkg-list-fields | 13 +++++++++++++
ipkg.py | 8 +++++++-
3 files changed, 22 insertions(+), 1 deletion(-)
Index: ipkg-utils/Makefile
===================================================================
--- ipkg-utils.orig/Makefile 2007-06-13 22:45:47.000000000 +0100
+++ ipkg-utils/Makefile 2007-06-13 22:46:50.000000000 +0100
@@ -15,6 +15,8 @@ install: ${UTILS}
python setup.py install
chmod agu+rx ipkg-make-index
cp -f ipkg-make-index $(PREFIX)/bin
+ chmod agu+rx ipkg-list-fields
+ cp -f ipkg-list-fields $(PREFIX)/bin
binary: build
mkdir -p ipkg-build-binary/usr/bin
Index: ipkg-utils/ipkg-list-fields
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ipkg-utils/ipkg-list-fields 2007-06-13 22:43:32.000000000 +0100
@@ -0,0 +1,13 @@
+#!/usr/bin/python
+
+import sys, ipkg
+
+def usage():
+ sys.stderr.write("%s ipk\n" % (sys.argv[0],))
+ sys.exit(-1)
+
+if (len(sys.argv) < 2):
+ usage()
+
+print ipkg.Package(sys.argv[1])
+
Index: ipkg-utils/ipkg.py
===================================================================
--- ipkg-utils.orig/ipkg.py 2007-06-13 22:44:50.000000000 +0100
+++ ipkg-utils/ipkg.py 2007-06-13 22:39:44.000000000 +0100
@@ -139,6 +139,9 @@ class Package:
self.installed_size = None
self.filename = None
self.isdeb = 0
+ self.homepage = None
+ self.oe = None
+ self.priority = None
self.fn = fn
if fn:
@@ -211,7 +214,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':
@@ -402,6 +405,9 @@ class Package:
if self.filename: out = out + "Filename: %s\n" % (self.filename)
if self.source: out = out + "Source: %s\n" % (self.source)
if self.description: out = out + "Description: %s\n" % (self.description)
+ if self.oe: out = out + "OE: %s\n" % (self.oe)
+ if self.homepage: out = out + "HomePage: %s\n" % (self.homepage)
+ if self.priority: out = out + "Priority: %s\n" % (self.priority)
out = out + "\n"
return out

View File

@ -1,97 +0,0 @@
---
ipkg-make-index | 31 +++++++++++++++++++++++++++----
1 file changed, 27 insertions(+), 4 deletions(-)
Index: ipkg-utils/ipkg-make-index
===================================================================
--- ipkg-utils.orig/ipkg-make-index 2007-05-26 23:45:56.000000000 +0100
+++ ipkg-utils/ipkg-make-index 2007-05-26 23:47:25.000000000 +0100
@@ -40,6 +40,7 @@ def to_locale(filename, locale):
old_filename = None
packages_filename = None
filelist_filename = "Packages.filelist"
+stamplist_filename = "Packages.stamps"
opt_s = 0
opt_m = 0
(opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:")
@@ -50,6 +51,7 @@ for (optkey, optval) in opts:
opt_s = 1
if optkey == '-p':
packages_filename = optval
+ stamplist_filename = optval + ".stamps"
if optkey == '-l':
filelist_filename = optval
if optkey == '-v':
@@ -72,6 +74,7 @@ old_pkg_hash = {}
if packages_filename and not old_filename and os.path.exists(packages_filename):
old_filename = packages_filename
+pkgsStamps = {}
if old_filename:
if (verbose):
sys.stderr.write("Reading package list from " + old_filename + "\n")
@@ -80,6 +83,14 @@ if old_filename:
for k in old_packages.packages.keys():
p = old_packages.packages[k]
old_pkg_hash[p.filename] = p
+ try:
+ f = open(stamplist_filename, "r")
+ for l in f:
+ l = l.strip()
+ s, f = l.split(" ", 1)
+ pkgsStamps[f] = int(s)
+ except IOError:
+ pass
if (verbose):
sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, ))
@@ -87,11 +98,17 @@ files=glob(pkg_dir + '/*.ipk') + glob(pk
files.sort()
for filename in files:
basename = os.path.basename(filename)
+ pkg = None
+ fnameStat = os.stat(filename)
if old_pkg_hash.has_key(basename):
- if (verbose):
+ if pkgsStamps.has_key(basename) and fnameStat.st_mtime == pkgsStamps[basename]:
+ if (verbose):
sys.stderr.write("Found %s in Packages\n" % (filename,))
- pkg = old_pkg_hash[basename]
- else:
+ pkg = old_pkg_hash[basename]
+ else:
+ sys.stderr.write("Found %s in Packages, but mtime differs - re-reading\n" % (filename,))
+
+ if not pkg:
if (verbose):
sys.stderr.write("Reading info for package %s\n" % (filename,))
pkg = ipkg.Package(filename)
@@ -101,6 +118,7 @@ for filename in files:
else:
old_filename = ""
s = packages.add_package(pkg)
+ pkgsStamps[basename] = fnameStat.st_mtime
if s == 0:
if old_filename:
# old package was displaced by newer
@@ -114,6 +132,11 @@ for filename in files:
if opt_s:
print filename
+pkgsStampsFile = open(stamplist_filename, "w")
+for f in pkgsStamps.keys():
+ pkgsStampsFile.write("%d %s\n" % (pkgsStamps[f], f))
+pkgsStampsFile.close()
+
if opt_s:
sys.exit(0)
@@ -154,7 +177,7 @@ if packages_filename:
os.rename(tmp_packages_filename, packages_filename)
os.rename(tmp_gzip_filename, gzip_filename)
-if verbose:
+if verbose:
sys.stderr.write("Generate Packages.filelist file\n")
files = {}
names = packages.packages.keys()

View File

@ -1,51 +0,0 @@
Only in ipkg-utils: ipkg-py-sane-vercompare.patch
diff -ur ipkg-utils.org/ipkg.py ipkg-utils/ipkg.py
--- ipkg-utils.org/ipkg.py 2005-01-08 18:08:52.000000000 +0000
+++ ipkg-utils/ipkg.py 2007-04-04 11:52:46.000000000 +0000
@@ -48,9 +48,9 @@
self.epoch = epoch
self.version = version
- def _versioncompare(self, ref):
- selfversion = self.version
- refversion = ref.version
+ def _versioncompare(self, selfversion, refversion):
+ if not selfversion: selfversion = ""
+ if not refversion: refversion = ""
while 1:
## first look for non-numeric version component
selfm = re.match('([^0-9]*)(.*)', selfversion)
@@ -89,7 +89,18 @@
elif (self.epoch < ref.epoch):
return -1
else:
- return self._versioncompare(ref)
+ self_ver_comps = re.match(r"(.+?)(-r.+)?$", self.version)
+ ref_ver_comps = re.match(r"(.+?)(-r.+)?$", ref.version)
+ #print (self_ver_comps.group(1), self_ver_comps.group(2))
+ #print (ref_ver_comps.group(1), ref_ver_comps.group(2))
+ r = self._versioncompare(self_ver_comps.group(1), ref_ver_comps.group(1))
+ if r == 0:
+ r = self._versioncompare(self_ver_comps.group(2), ref_ver_comps.group(2))
+ #print "compare: %s vs %s = %d" % (self, ref, r)
+ return r
+
+ def __str__(self):
+ return str(self.epoch) + ":" + self.version
def parse_version(versionstr):
epoch = 0
@@ -445,6 +456,13 @@
return self.packages[key]
if __name__ == "__main__":
+
+ assert Version(0, "1.2.2-r1").compare(Version(0, "1.2.3-r0")) == -1
+ assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2+cvs20070308-r0")) == -1
+ assert Version(0, "1.2.2+cvs20070308").compare(Version(0, "1.2.2-r0")) == 1
+ assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2-r0")) == 0
+ assert Version(0, "1.2.2-r5").compare(Version(0, "1.2.2-r0")) == 1
+
package = Package()
package.set_package("FooBar")

View File

@ -1,310 +0,0 @@
---
arfile.py | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ipkg.py | 106 ++++++++++++++++++++++++++---------------------------
setup.py | 2 -
3 files changed, 177 insertions(+), 55 deletions(-)
Index: ipkg-utils/arfile.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ipkg-utils/arfile.py 2007-05-26 23:46:59.000000000 +0100
@@ -0,0 +1,125 @@
+"""
+arfile - A module to parse GNU ar archives.
+
+Copyright (c) 2006-7 Paul Sokolovsky
+This file is released under the terms
+of GNU General Public License v2 or later.
+"""
+import sys
+import os
+import tarfile
+
+
+class FileSection:
+ "A class which allows to treat portion of file as separate file object."
+
+ def __init__(self, f, offset, size):
+ self.f = f
+ self.offset = offset
+ self.size = size
+ self.seek(0, 0)
+
+ def seek(self, offset, whence = 0):
+# print "seek(%x, %d)" % (offset, whence)
+ if whence == 0:
+ return self.f.seek(offset + self.offset, whence)
+ elif whence == 1:
+ return self.f.seek(offset, whence)
+ elif whence == 2:
+ return self.f.seek(self.offset + self.size + offset, 0)
+ else:
+ assert False
+
+ def tell(self):
+# print "tell()"
+ return self.f.tell() - self.offset
+
+ def read(self, size = -1):
+# print "read(%d)" % size
+ return self.f.read(size)
+
+class ArFile:
+
+ def __init__(self, f):
+ self.f = f
+ self.directory = {}
+ self.directoryRead = False
+
+ signature = self.f.readline()
+ assert signature == "!<arch>\n"
+ self.directoryOffset = self.f.tell()
+
+ def open(self, fname):
+ if self.directory.has_key(fname):
+ return FileSection(self.f, self.directory[fname][-1], int(self.directory[fname][5]))
+
+ if self.directoryRead:
+ raise IOError, (2, "AR member not found: " + fname)
+
+ f = self._scan(fname)
+ if f == None:
+ raise IOError, (2, "AR member not found: " + fname)
+ return f
+
+
+ def _scan(self, fname):
+ self.f.seek(self.directoryOffset, 0)
+
+ while True:
+ l = self.f.readline()
+ if not l:
+ self.directoryRead = True
+ return None
+
+ if l == "\n":
+ l = self.f.readline()
+ if not l: break
+ l = l.replace('`', '')
+ descriptor = l.split()
+# print descriptor
+ size = int(descriptor[5])
+ memberName = descriptor[0][:-1]
+ self.directory[memberName] = descriptor + [self.f.tell()]
+# print "read:", memberName
+ if memberName == fname:
+ # Record directory offset to start from next time
+ self.directoryOffset = self.f.tell() + size
+ return FileSection(self.f, self.f.tell(), size)
+
+ # Skip data and loop
+ data = self.f.seek(size, 1)
+# print hex(f.tell())
+
+
+if __name__ == "__main__":
+ if None:
+ f = open(sys.argv[1], "rb")
+
+ ar = ArFile(f)
+ tarStream = ar.open("data.tar.gz")
+ print "--------"
+ tarStream = ar.open("data.tar.gz")
+ print "--------"
+ tarStream = ar.open("control.tar.gz")
+ print "--------"
+ tarStream = ar.open("control.tar.gz2")
+
+ sys.exit(0)
+
+
+ dir = "."
+ if len(sys.argv) > 1:
+ dir = sys.argv[1]
+ for f in os.listdir(dir):
+ if not f.endswith(".ipk"): continue
+
+ print "=== %s ===" % f
+ f = open(dir + "/" + f, "rb")
+
+ ar = ArFile(f)
+ tarStream = ar.open("control.tar.gz")
+ tarf = tarfile.open("control.tar.gz", "r", tarStream)
+ #tarf.list()
+
+ f2 = tarf.extractfile("control")
+ print f2.read()
Index: ipkg-utils/setup.py
===================================================================
--- ipkg-utils.orig/setup.py 2007-05-26 23:45:55.000000000 +0100
+++ ipkg-utils/setup.py 2007-05-26 23:46:59.000000000 +0100
@@ -16,6 +16,6 @@ distutils.core.setup( name = 'ipkg-utils
platforms = 'POSIX',
keywords = 'ipkg familiar',
url = 'http://www.handhelds.org/sources.html/',
- py_modules = [ 'ipkg' ],
+ py_modules = [ 'ipkg', 'arfile' ],
scripts = ['ipkg-compare-indexes', 'ipkg-make-index', 'ipkg-update-index', 'ipkg-build', 'ipkg-unbuild', 'ipkg-upload']
)
Index: ipkg-utils/ipkg.py
===================================================================
--- ipkg-utils.orig/ipkg.py 2007-05-26 23:46:55.000000000 +0100
+++ ipkg-utils/ipkg.py 2007-05-26 23:45:20.000000000 +0100
@@ -41,6 +41,8 @@ import re
import string
import commands
from stat import ST_SIZE
+import arfile
+import tarfile
class Version:
"""A class for holding parsed package version information."""
@@ -131,78 +133,61 @@ class Package:
self.section = None
self.filename_header = None
self.file_list = []
- self.md5 = None
+ # md5 is lazy attribute, computed on demand
+ #self.md5 = None
self.size = None
self.installed_size = None
self.filename = None
self.isdeb = 0
+ self.fn = fn
if fn:
# see if it is deb format
- f = open(fn, "r")
+ f = open(fn, "rb")
magic = f.read(4)
- f.close()
+ f.seek(0, 0)
if (magic == "!<ar"):
self.isdeb = 1
- # compute the MD5.
- f = open(fn, "r")
- sum = md5.new()
- while 1:
- data = f.read(1024)
- if not data: break
- sum.update(data)
- f.close()
- if sys.version[:1] > '2':
- # when using Python 2.0 or newer
- self.md5 = sum.hexdigest()
- else:
- self.md5 = string.join(map((lambda x:"%02x" % ord(x)),sum.digest()),'')
- stat = os.stat(fn)
- self.size = stat[ST_SIZE]
+
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,))
- if self.isdeb:
- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r")
- else:
- control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r")
- line = control.readline()
- while 1:
- if not line: break
- line = string.rstrip(line)
- lineparts = re.match(r'([\w-]*?):\s*(.*)', line)
- if lineparts:
- name = string.lower(lineparts.group(1))
- value = lineparts.group(2)
- while 1:
- line = control.readline()
- if not line: break
- if line[0] != ' ': break
- line = string.rstrip(line)
- value = value + '\n' + line
- # don't allow package to override its own filename
- if name == "filename":
- self.filename_header = value
- else:
- if self.__dict__.has_key(name):
- self.__dict__[name] = value
- else:
- line = control.readline()
+
+ ar = arfile.ArFile(f)
+ tarStream = ar.open("control.tar.gz")
+ tarf = tarfile.open("control.tar.gz", "r", tarStream)
+
+ try:
+ control = tarf.extractfile("control")
+ except KeyError:
+ control = tarf.extractfile("./control")
+ self.read_control(control)
control.close()
- if self.isdeb:
- data = os.popen("ar p "+fn+" data.tar.gz | tar tfz -","r")
- else:
- data = os.popen("tar xfzO "+fn+" '*data.tar.gz' | tar tfz -","r")
- while 1:
- line = data.readline()
- if not line: break
- self.file_list.append(string.rstrip(line))
- data.close()
self.scratch_dir = None
self.file_dir = None
self.meta_dir = None
+ def __getattr__(self, name):
+ if name == "md5":
+ self._computeFileMD5()
+ return self.md5
+ else:
+ raise AttributeError, name
+
+ def _computeFileMD5(self):
+ # compute the MD5.
+ f = open(self.fn, "rb")
+ sum = md5.new()
+ while 1:
+ data = f.read(1024)
+ if not data: break
+ sum.update(data)
+ f.close()
+ self.md5 = sum.hexdigest()
+
def read_control(self, control):
import os
@@ -221,9 +203,15 @@ class Package:
value = value + '\n' + line
if name == 'size':
self.size = int(value)
+ elif name == 'md5sum':
+ self.md5 = value
elif self.__dict__.has_key(name):
self.__dict__[name] = value
- if line[0] == '\n':
+ else:
+ #print "Lost field %s, %s" % (name,value)
+ pass
+
+ if line and line[0] == '\n':
return # consumes one blank line at end of package descriptoin
else:
line = control.readline()
@@ -314,6 +302,16 @@ class Package:
return self.section
def get_file_list(self):
+ if not self.fn:
+ return []
+ f = open(self.fn, "rb")
+ ar = arfile.ArFile(f)
+ tarStream = ar.open("data.tar.gz")
+ tarf = tarfile.open("data.tar.gz", "r", tarStream)
+ self.file_list = tarf.getnames()
+ self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list)
+
+ f.close()
return self.file_list
def write_package(self, dirname):

View File

@ -1,20 +0,0 @@
---
ipkg.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: ipkg-utils/ipkg.py
===================================================================
--- ipkg-utils.orig/ipkg.py 2007-05-26 23:49:05.000000000 +0100
+++ ipkg-utils/ipkg.py 2007-05-26 23:49:23.000000000 +0100
@@ -152,9 +152,9 @@ class Package:
self.filename = os.path.basename(fn)
## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
if self.isdeb:
- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - '*control'","r")
+ control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r")
else:
- control = os.popen("tar xfzO "+fn+" '*control.tar.gz' | tar xfzO - '*control'","r")
+ control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r")
line = control.readline()
while 1:
if not line: break

View File

@ -1,32 +0,0 @@
DESCRIPTION = "Itsy Package Manager utilities"
SECTION = "base"
PRIORITY = "optional"
LICENSE = "GPL"
CONFLICTS = "ipkg-link"
RDEPENDS = "python"
SRCDATE = "20050404"
PR = "r17"
SRC_URI = "${HANDHELDS_CVS};module=ipkg-utils \
file://ipkg-utils-fix.patch;patch=1 \
file://ipkg-py-sane-vercompare.patch;patch=1 \
file://ipkg-py-tarfile.patch;patch=1 \
file://ipkg-make-index-track-stamps.patch;patch=1 \
file://fields_tweaks.patch;patch=1 "
S = "${WORKDIR}/ipkg-utils"
INSTALL = "ipkg-build ipkg-deb-unbuild ipkg-unbuild ipkg-compare-versions ipkg-upload ipkg-make-index ipkg-link ipkg.py ipkg-list-fields"
do_compile() {
oe_runmake ipkg-compare-versions
}
do_install() {
install -d ${D}${bindir}
for i in ${INSTALL}
do
install -m 0755 $i ${D}${bindir}
done
}