From fe5ac2cdbfbfc955470195c0662fc3032576fac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Sun, 3 Jul 2005 14:23:07 +0000 Subject: [PATCH] =?UTF-8?q?Tek=20bir=20ebuild'i=20PSPEC=20haline=20getiriy?= =?UTF-8?q?or.=20Patch'leri=20de=20almaya=20=C3=A7al=C4=B1=C5=9F=C4=B1yor.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Çağlar: portage2pisi yerine bunu kullanalım mı? Tüm overlay deposunu bir anda çevirmek büyük ihtimal ile istemeyeceğiz. Bu otomatik araçlar adam gibi bir PSPEC yazamayacaklar, mutlaka el ile müdahale gerekecek zaten. Bu tek bir dosya ve kullanımı diğerine göre daha basit sanırım. Ne dersin? --- tools/ebuild2pisi.py | 182 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 tools/ebuild2pisi.py diff --git a/tools/ebuild2pisi.py b/tools/ebuild2pisi.py new file mode 100644 index 00000000..eba907ad --- /dev/null +++ b/tools/ebuild2pisi.py @@ -0,0 +1,182 @@ +#!/usr/bin/python + +import sys +import re +import datetime + +sys.path.insert(0, "/usr/lib/portage/pym") +import portage + +PSPEC_TEMPLATE=''' + + + + + + %(packagename)s + %(homepage)s + + PACKAGER + PACKAGER_EMAIL + + %(license)s + category + component + %(description)s + %(description)s + %(archiveUri)s + +%(patches)s + + +%(buildDep)s + + + + %(updateDate)s + %(updateVersion)s + %(updateRelease)s + + + + + + %(packagename)s + +%(runDep)s + + +FILES + + + + +''' + +def packageVersion(pkg): + if len(pkg) > 1: + parts = portage.catpkgsplit(pkg) + if parts == None: + return "" + + if parts[3] != 'r0': + version = parts[2] + "-" + parts[3] + else: + version = parts[2] + return version + else: + return False + +def getArchiveType(uri): + if uri.endswith("gz"): + return "targz" + elif uri.endswith("bz2"): + return "tarbz2" + elif uri.endswith("tar"): + return "tar" + elif uri.endswith("zip"): + return "zip" + return "UNKNOWN_TYPE" + +def getDepString(deps): + depString = "Dependencies should be reformated and check for correctness" + for dep in portage.flatten(portage.tokenize(deps)): + depString += "\n\t\t"+dep+"" + + return depString + + +def getPatches(filename, pkgName, version): + fileObj = open(filename) + patchList=[] + + # ebuild variables + rc = re.compile + dispatcher = { + rc("\$\{FILESDIR\}"): "", + rc('"'): "", + rc('^/'): "", + rc("\$\{P\}|\$\{PF\}"): "-".join([pkgName,version]), + rc("\$\{PN\}"): pkgName + } + + patched = False + for line in fileObj: + line = line.strip() + if line.startswith('#'): + continue + + p = rc("\Aepatch ").search(line) + if not p: + p = rc("\Apatch ").search(line) + if p: + patched = True + line = line[p.end():] + for r in dispatcher.keys(): + m = r.search(line) + while m: + line = line[:m.start()] + dispatcher[r] + line[m.end():] + m = r.search(line) + + patchList.append(line) + + patchString = "Patches should be checked for correctness" + for patch in patchList: + patchString += "\n\t\t"+patch+"" + + return patchString + + +def main(ebuild): + dict = {} + db = portage.portdb + getKeys = lambda x: db.aux_get(ebuild, [x]) + getKey = lambda x: getKeys(x)[0] + + dict["homepage"] = getKey("HOMEPAGE") + dict["archiveUri"] = getKey("SRC_URI").split()[0] + dict["archiveType"] = getArchiveType(dict["archiveUri"]) + dict["packagename"] = portage.catpkgsplit(ebuild)[1] + dict["license"] = getKey("LICENSE") + dict["description"] = getKey("DESCRIPTION") + dict["updateDate"] = datetime.date.today() + + # version & release + if '-' in packageVersion(ebuild): + (version, release) = packageVersion(ebuild).split("-") + release = release.replace("r","") + else: + version = packageVersion(ebuild) + release = '' + dict["updateVersion"] = version + dict["updateRelease"] = release + + # buildDep & runDep + deps = getKeys("DEPEND") + dict["buildDep"] = getDepString(deps) + dict["runDep"] = getDepString(getKeys("RDEPEND")) + + # patches + dict["patches"] = getPatches(db.findname(ebuild), + dict["packagename"], + dict["updateVersion"]) + + print PSPEC_TEMPLATE % dict + +if __name__ == "__main__": + usage = """Usage: +PORTDIR=/path/to/portage/overlay %s category/ebuild + +Example: +PORTDIR=/trunk/ %s app-admin/fam-2.7.0-r2 + +You don't have to define PORTDIR if you are converting a package from +the main portage repository. +""" + try: + ebuild = sys.argv[1] + except: + print usage + sys.exit(1) + + main(ebuild)