From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id A3843138204 for ; Tue, 16 Jul 2013 23:09:43 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 4351EE09FA; Tue, 16 Jul 2013 23:09:40 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 9DC3AE09FA for ; Tue, 16 Jul 2013 23:09:39 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 460F033E772 for ; Tue, 16 Jul 2013 23:09:38 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id D5FCAE468F for ; Tue, 16 Jul 2013 23:09:36 +0000 (UTC) From: "Jauhien Piatlicki" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Jauhien Piatlicki" Message-ID: <1373905974.83644c95ac2cf6e020663bf51a85b9411e25020c.jauhien@gentoo> Subject: [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/ X-VCS-Repository: proj/g-sorcery X-VCS-Files: g_sorcery/fileutils.py X-VCS-Directories: g_sorcery/ X-VCS-Committer: jauhien X-VCS-Committer-Name: Jauhien Piatlicki X-VCS-Revision: 83644c95ac2cf6e020663bf51a85b9411e25020c X-VCS-Branch: master Date: Tue, 16 Jul 2013 23:09:36 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: dca10ecc-ffbe-411a-9e67-7668b144209f X-Archives-Hash: c06afad60acbe0c0653be162f3e773bd commit: 83644c95ac2cf6e020663bf51a85b9411e25020c Author: Jauhien Piatlicki gmail com> AuthorDate: Mon Jul 15 16:32:54 2013 +0000 Commit: Jauhien Piatlicki gmail com> CommitDate: Mon Jul 15 16:32:54 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=83644c95 g_sorcery/fileutils: fast_manifest --- g_sorcery/fileutils.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/g_sorcery/fileutils.py b/g_sorcery/fileutils.py index 478570d..067ea42 100644 --- a/g_sorcery/fileutils.py +++ b/g_sorcery/fileutils.py @@ -11,7 +11,11 @@ :license: GPL-2, see LICENSE for more details. """ -import json, os, shutil +import glob +import json +import hashlib +import os +import shutil from .exceptions import FileJSONError from .g_collections import Package, elist @@ -153,3 +157,44 @@ def get_pkgpath(root = None): if os.path.islink(root): root = os.path.realpath(root) return os.path.dirname(os.path.abspath(root)) + +class ManifestEntry: + def __init__(self, directory, name, ftype): + self.directory = directory + self.name = name + self.ftype = ftype + self.digest() + + def digest(self): + h_sha256 = hashlib.new('SHA256') + h_sha512 = hashlib.new('SHA512') + h_whirlpool = hashlib.new('whirlpool') + with open(os.path.join(self.directory, self.name), 'rb') as f: + src = f.read() + h_sha256.update(src) + h_sha512.update(src) + h_whirlpool.update(src) + self.size = str(len(src)) + self.sha256 = h_sha256.hexdigest() + self.sha512 = h_sha512.hexdigest() + self.whirlpool = h_whirlpool.hexdigest() + + +def fast_manifest(directory): + manifest = [] + metadata = os.path.join(directory, "metadata.xml") + + for aux in glob.glob(os.path.join(directory, "files/*")): + manifest.append(ManifestEntry(os.path.dirname(aux), os.path.basename(aux), "AUX")) + for ebuild in glob.glob(os.path.join(directory, "*.ebuild")): + manifest.append(ManifestEntry(directory, os.path.basename(ebuild), "EBUILD")) + if (os.path.isfile(metadata)): + manifest.append(ManifestEntry(directory, "metadata.xml", "MISC")) + + manifest = [" ".join([m.ftype, m.name, m.size, + "SHA256", m.sha256, "SHA512", m.sha512, + "WHIRLPOOL", m.whirlpool]) + for m in manifest] + + with open(os.path.join(directory, "Manifest"), 'w') as f: + f.write('\n'.join(manifest))