summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'distindex/distfiles-indexer.py')
-rwxr-xr-xdistindex/distfiles-indexer.py187
1 files changed, 0 insertions, 187 deletions
diff --git a/distindex/distfiles-indexer.py b/distindex/distfiles-indexer.py
deleted file mode 100755
index 0aeaa36..0000000
--- a/distindex/distfiles-indexer.py
+++ /dev/null
@@ -1,187 +0,0 @@
-#!/usr/bin/env python2.4
-
-import tarfile
-import zipfile
-import os
-import sys
-import datetime
-
-try:
- # FIXME: this does not work
- import hashlib
- md5_cons = hashlib.md5
- sha1_cons = hashlib.sha1
-except:
- import md5
- import sha
- md5_cons = md5.new
- sha1_cons = sha.new
-
-
-def hash_file(fileobj, *hashobjects):
- """ RAM efficient hashing implementation for stream-based file objects. """
- data = fileobj.read(1024*1024)
- while data:
- for ho in hashobjects:
- ho.update(data)
- data = fileobj.read(1024*1024)
-
- return (ho.hexdigest() for ho in hashobjects)
-
-
-class ArchiveInfo:
- def __init__(self, filename, url, ebuild):
- self.filename = filename
- self.filesize = os.path.getsize(filename) # this can throw an exception
- self.mtime = os.path.getmtime(filename)
- self.basename = os.path.basename(filename)
- self.ebuild = ebuild
- self.url = url
-
-
- def write_info(self, outfiledir):
- outfilename = ""
- try:
- (fnum, outfilename) = self.make_outfile(outfiledir)
- self.out_fd = open(outfilename, "w")
- self.write_header()
- self.write_content()
- self.out_fd.close()
- return outfilename
- except:
- if outfilename:
- os.remove(outfilename)
- raise
-
- def write_header(self):
- self.out_fd.write("File-dist-name: %s\n" % (self.basename))
- self.out_fd.write("File-dist-size: %s\n" % (self.filesize))
- self.out_fd.write("File-dist-present: True\n")
- self.out_fd.write("File-dist-origin: %s\n" % (self.url))
- #self.out_fd.write("File-dist-ebuild: %s\n" % (self.ebuild))
- self.out_fd.write("File-dist-mtime: %s\n" %(self.mtime))
-
- distfile = open(self.filename)
- (md5, sha1) = hash_file(distfile, md5_cons(), sha1_cons())
- self.out_fd.write("File-dist-md5: %s\n" % (md5))
- self.out_fd.write("File-dist-sha1: %s\n" % (sha1))
- distfile.close()
-
- def make_outfile(self, tdir):
- import tempfile
- outfdname = tempfile.mkstemp(prefix=self.basename, dir=tdir)
- return outfdname
-
-class TarInfo(ArchiveInfo):
- def write_content(self):
- tar = tarfile.TarFile.open(self.filename, 'r')
-
- file_info = tar.next()
- filecount = 0
- while file_info != None:
- if file_info.isfile():
- file_stream = tar.extractfile(file_info)
-
- if file_stream == None:
- print "Filestream empty on %s" % (file_info.name)
- pass
- else:
- self.out_fd.write("File-%05d-name: %s\n" %(filecount, file_info.name))
- self.out_fd.write("File-%05d-size: %s\n" %(filecount, file_info.size))
- self.out_fd.write("File-%05d-mtime: %s\n" %(filecount, file_info.mtime))
- (md5, sha1) = hash_file(file_stream, md5_cons(), sha1_cons())
- self.out_fd.write("File-%05d-md5: %s\n" %(filecount, md5))
- self.out_fd.write("File-%05d-sha1: %s\n" %(filecount, sha1))
- filecount += 1
- file_info = tar.next()
- tar.close()
-
-class ZipInfo(ArchiveInfo):
- def write_content(self):
- zip = zipfile.ZipFile(self.filename, 'r')
-
- filecount = 0
- for name in zip.namelist():
- file_info = zip.getinfo(name)
- if os.path.basename(file_info.filename) == "":
- # this is a directory
- continue
- file_content = zip.read(name) # Doesn't work stream based :-/
- file_time = datetime.datetime(*file_info.date_time)
- self.out_fd.write("File-%05d-name: %s\n" %(filecount, file_info.filename))
- self.out_fd.write("File-%05d-size: %s\n" %(filecount, file_info.file_size))
- self.out_fd.write("File-%05d-mtime: %s\n" %(filecount, file_time.strftime("%s")))
-
- md5 = md5_cons(file_content).hexdigest()
- sha1 = sha1_cons(file_content).hexdigest()
- self.out_fd.write("File-%05d-md5: %s\n" %(filecount, md5))
- self.out_fd.write("File-%05d-sha1: %s\n" %(filecount, sha1))
-
- filecount += 1
-
- zip.close()
-
-
-
-
-def main():
- import getopt
- try:
- optlist, list = getopt.getopt(sys.argv[1:],
- 'f:P:hu:')
- except getopt.GetoptError:
- usage(sys.argv[0])
- sys.exit(2)
-
- infilename = None
- outdir = "."
- url = None
- for opt, arg in optlist:
- if opt == '-h':
- usage(sys.argv[0])
- sys.exit(0)
- if opt == '-f':
- infilename = arg
- if opt == '-P':
- outdir = arg
- if opt == '-u':
- url = arg
-
- if not infilename:
- print "Please specify a filename."
- else:
- tar_finished = False
- try:
- t = TarInfo(infilename, url, None)
- filename = t.write_info(outdir)
- tar_finished = True
- except:
- pass
- if tar_finished:
- sys.exit(0)
- try:
- t = ZipInfo(infilename, url, None)
- filename = t.write_info(outdir)
- except:
- print infilename, " could not be opened"
-
-def usage(programname):
- """ Print usage information """
- print "Usage: %s [-h] [-P <dir>] [-f <file>] [-u <url>]" % (programname)
- print '''
-This script opens the file specified by -f, and writes the index to the directory specified by -P.
-
-Parameters:
- -h Display this help
- -f file Path to the file to index, must be present
- -P path Directory to create the index file in (default: .)
- -u url URL to record inside the index
-'''
-
-
-if __name__ == "__main__":
- try:
- main()
- except KeyboardInterrupt:
- print '\n ! Exiting.'
-