#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (C) 2007-2010, TUBITAK/UEKAE # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # Please read the COPYING file. import os import shutil import time pspecTemplate = """ %(package)s %(homepage)s %(packager_name)s %(packager_email)s GPL-2 app:gui %(summary)s %(description)s %(archive)s %(package)s %(runtimedeps)s /usr/bin %(date)s 0.3 First release %(packager_name)s %(packager_email)s """ componentsTemplate = """ %(name)s %(local_name)s %(summary)s %(description)s system Joe Packager joe@pardus.org.tr """ componentTemplate = """ %(name)s """ actionsTemplate = """ from pisi.actionsapi import pisitools WorkDir = "skeleton" def install(): pisitools.dobin("skeleton.py") pisitools.rename("/usr/bin/skeleton.py", "%s") """ distributionTemplate = """ %(sourcename)s %(version)s %(description)s Core %(obsoletes)s """ class Component: def __init__(self, name): self.name = name def get_comp_template(self, subcomp): return componentTemplate % {"name": subcomp} def get_comp_path(self): return "/".join(self.name.split(".")) def create(self): component_path = self.get_comp_path() if not os.path.exists(component_path): os.makedirs(component_path) cur_dir = os.getcwd() cur_comp = '' for subcomp in self.name.split("."): os.chdir(subcomp) if not cur_comp: cur_comp = subcomp else: cur_comp = ".".join([cur_comp, subcomp]) open("component.xml", "w").write(self.get_comp_template(cur_comp)) os.chdir(cur_dir) class Package: def __init__(self, name, partof, deps): self.name = name self.partof = partof self.deps = deps self.component = Component(self.partof) def get_spec_template(self): package = self.name homepage = "www.pardus.org.tr" packager_name = "Joe Packager" packager_email = "joe@pardus.org.tr" summary = "%s is a very useful package" % self.name description = "%s is a very useful package that is known for its usefulness." % self.name sha1sum = "cc64dfa6e068fe1f6fb68a635878b1ea21acfac7" archive = "http://cekirdek.uludag.org.tr/~faik/pisi/skeleton.tar.gz" date = time.strftime("%Y-%m-%d") partof = self.partof runtimedeps = "" for dep in self.deps: runtimedeps += " %s\n" % dep return pspecTemplate % locals() def create(self): self.component.create() cur_dir = os.getcwd() os.chdir(self.component.get_comp_path()) os.makedirs(self.name) os.chdir(self.name) open("pspec.xml", "w").write(self.get_spec_template()) open("actions.py", "w").write(actionsTemplate % self.name) os.chdir(cur_dir) class PackageFactory: def getPackage(self, name, runtimeDeps = [], component = "system.base"): return Package(name, component, runtimeDeps) def getPackageBundle(self, component, *packages): pkgs = [] for pkg in packages: pkgs.append(Package(pkg, component, [])) return pkgs class Repository: def __init__(self, name, version, packages, obsoletes): self.name = name self.version = version self.packages = packages self.obsoletes = obsoletes def get_dist_template(self): obsoletes = "" for obs in self.obsoletes: obsoletes += " %s\n" % obs return distributionTemplate % {"sourcename": "Pardus", "version": self.version, "description":self.name, "obsoletes":obsoletes} def create(self): cur_dir = os.getcwd() os.makedirs(self.name) os.chdir(self.name) open("distribution.xml", "w").write(self.get_dist_template()) for pkg in self.packages: pkg.create() self.create_components_xml() os.chdir(cur_dir) def create_components_xml(self): xml_content = "\n " for root, dirs, files in os.walk("."): if "component.xml" in files: component = root[2:].replace("/", ".") xml_content += componentsTemplate \ % {"name": component, "local_name": component, "summary": component, "description": component} xml_content += " \n\n" open("components.xml", "w").write(xml_content) class Pardus2007Repo(Repository): def __init__(self): Repository.__init__(self, "pardus-2007", "2007", [], ["wengophone", "rar"]) def create(self): pf = PackageFactory() self.packages = [ # system.base pf.getPackage("bash"), pf.getPackage("curl", ["libidn", "zlib", "openssl"]), pf.getPackage("shadow", ["db4","pam", "cracklib"]), pf.getPackage("jpeg"), # applications.network pf.getPackage("ncftp", [], "applications.network"), pf.getPackage("bogofilter", ["gsl"], "applications.network"), pf.getPackage("gsl", [], "applications.network"), ] # system.base self.packages.extend(pf.getPackageBundle("system.base", "libidn", "zlib", "openssl", "db4", "pam", "cracklib")) # applications.network self.packages.extend(pf.getPackageBundle("applications.network", "ethtool", "nfdump")) Repository.create(self) class Contrib2007Repo(Repository): def __init__(self): Repository.__init__(self, "contrib-2007", "2007", [], ["xara"]) def create(self): pf = PackageFactory() self.packages = [ # applications.network pf.getPackage("lynx", [], "applications.network"), pf.getPackage("ctorrent", ["openssl"], "applications.network"), pf.getPackage("lft", ["libpcap"], "applications.network"), pf.getPackage("libpcap", [], "applications.network"), ] # applications.util self.packages.extend(pf.getPackageBundle("applications.util", "iat", "rpl", "cpulimit")) Repository.create(self) class BuildFarm: def create_index(self, repo): binrepo = "%s-bin" % repo shutil.copy("%s/distribution.xml" % repo, binrepo) os.system("pisi index %s --skip-signing -o %s/pisi-index.xml" % (repo, repo)) os.system("pisi index --skip-sources --skip-signing -o %s/pisi-index.xml %s %s" % (binrepo, binrepo, repo)) def build(self, repos): for repo in repos: binrepo = "%s-bin" % repo os.mkdir(binrepo) for root, dirs, files in os.walk(repo): if "pspec.xml" in files: os.system("pisi build %s/%s -O %s" % (root, "pspec.xml", binrepo)) self.create_index(repo) if __name__ == "__main__": Pardus2007Repo().create() Contrib2007Repo().create() BuildFarm().build(["pardus-2007", "contrib-2007", "repo1", "repo2"])