From 32822c4d42b1b6791e5b48ee2d44f4096bdd5daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCrer=20=C3=96zen?= Date: Sun, 11 Feb 2007 00:02:21 +0000 Subject: [PATCH] yeni hali --- scripts/repostats.py | 591 ++++++++++++++++++------------------------- 1 file changed, 244 insertions(+), 347 deletions(-) diff --git a/scripts/repostats.py b/scripts/repostats.py index 12cec5a0..9a65c205 100755 --- a/scripts/repostats.py +++ b/scripts/repostats.py @@ -1,7 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- # -# Copyright (C) 2005, TUBITAK/UEKAE +# Copyright (C) 2005-2007, 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 @@ -29,12 +29,76 @@ import pisi.metadata import pisi.files from pisi.cli import printu -# default html templates +# Main HTML template -def_table_html = u""" -%s%s +html_header = """ + + %(title)s + + + +
+
+ + + +

%(title)s

+ +
+%(content)s +
+ + """ +css_template = """ +body { + margin-left:0; + margin-top:0; + margin-right:0; + background-image:url('http://www.pardus.org.tr/styles/images/HeadTile.png'); + background-repeat:repeat-x; + background-color: #FFF; +} + +#header-bugzilla { + background-image:url('http://www.pardus.org.tr/styles/images/HeadLogo.png'); + background-repeat:no-repeat; + background-position: 0px 0px; + height:119px; + padding-bottom:5px; +} + +a { + color: #F55400; + text-decoration: none; +} + +a:hover { + color: #444; + background-color:#EEE; +} + +.menu { + padding-left: 1em; + padding-top: 3px; + padding-bottom: 3px; + border-bottom: 1px solid #CCC; + border-top: 1px solid #CCC; +} + +.content { + margin: 0.5em; +} +""" + +# default html templates (now obsolete) + def_repo_sizes_html = u"""

Boyutlar

Toplam kurulu boyut %(total)s

@@ -44,188 +108,6 @@ def_repo_sizes_html = u""" """ -def_repo_html = u""" - - Depo istatistikleri - - - -
-
-
-

-Depoda toplam %(nr_source)d -kaynak paket, ve bu paketlerden oluşturulacak -%(nr_packages)d ikili paket bulunmaktadır. Toplam %(nr_patches)d yama mevcuttur. -

- -

-%(errors)s -

- -

En fazla yamalanmış 5 kaynak paket:

-%(most_patched)s -

- -

En uzun actions.py betikli 5 kaynak paket:

-%(longpy)s -

- -

Eksik ikili paketler

-%(missing)s -

- -%(sizes)s - -

Paketçiler:

-%(packagers)s -

- -
- -""" - -def_packager_html = u""" - - Paketçi %(name)s - - - -
-
-
- -

%(name)s <%(email)s>

- -

Paketler:

-

%(sources)s

- -

Güncellemeler:

-

%(updates)s

-
- -""" - -def_package_html = u""" - - İkili paket %(name)s - - - - -
-
-
- -

İkili paket: %(name)s

-

Kaynak versiyon %(version)s, depo sürümü %(release)s

- -

Kaynak paket %(source)s

- -

Derlemek için gerekenler:

-

%(buildDeps)s

- -

Çalıştırmak için gerekenler:

-

%(runtimeDeps)s

- -

Bağımlı paketler (derlenmek için):

-

%(revBuildDeps)s

- -

Bağımlı paketler (çalışmak için):

-

%(revRuntimeDeps)s

-
- -""" - -def_history_html= u""" -
Sürüm %s

-Tarih: %s
-Yapan: %s
-Açıklama: %s -

-""" - -def_source_html = u""" - - Kaynak paket %(name)s - - - - -
-
-
- -

Kaynak paket: %(name)s

-

Kaynak versiyon %(version)s, depo sürümü %(release)s

-

%(homepage)s

- -

Açıklama

-

%(summary)s

- -

Lisanslar:

-

%(license)s

- -

İşlemler:

-

Paket dosyalarına bak

-

-Hata kayıtlarına bak

- -

Bu kaynaktan derlenen ikili paketler:

-

%(packages)s

- -

Tarihçe

-%(history)s - -

Yamalar

-%(patches)s -
- -""" - -def_sources_html = u""" - - Kaynak paketler listesi - - - - -
-
-
- -

Kaynak paketler listesi

-
- -

-%(source_list)s -

-
- -""" - -def_missing_html = u""" - - Eksik ikili paket %(name)s - - - - -
-
-
- -

Eksik ikili paket: %(name)s

- -

Bağımlı paketler (derlenmek için):

-

%(revBuildDeps)s

- -

Bağımlı paketler (çalışmak için):

-

%(revRuntimeDeps)s

-
- -""" - def svn_uri(path): # init @@ -240,28 +122,6 @@ def svn_uri(path): return uri -# FIXME: This check should be in specfile -valid_filetypes = [ - "executable", - "library", - "data", - "config", - "doc", - "man", - "info", - "localedata", - "header", - "all" -] - -def valuesort(x, y): - if x[1] > y[1]: - return -1 - elif x[1] == y[1]: - return 0 - else: - return 1 - def find_pspecs(folder): paks = [] for root, dirs, files in os.walk(folder): @@ -272,26 +132,41 @@ def find_pspecs(folder): dirs.remove(".svn") return paks -def template_get(tmpl_name): - try: - f = codecs.open(tmpl_name + ".html", "r", "utf-8") - data = f.read() - f.close() - return data - except: - return globals()["def_" + tmpl_name + "_html"] - -def template_write(filename, tmpl_name, dict): +def write_html(filename, title, content): f = codecs.open(filename, "w", "utf-8") - f.write(template_get(tmpl_name) % dict) + root = "./" + if len(filename.split("/")) > 2: + root = "../" + dict = { + "title": title, + "content": content, + "root": root, + } + f.write(html_header % dict) f.close() -def template_table(tmpl_name, list): - tmpl = template_get(tmpl_name) - data = "" - for item in list: - data += (tmpl % item) - return data +def make_table(elements, titles=None): + def make_row(element): + return "%s" % "".join(map(str, element)) + + title_html = "" + if titles: + title_html = """ + %s + """ % "".join(titles) + + html = """ + %s + %s +
+ """ % (title_html, "".join(map(make_row, elements))) + + return html + +def make_url(name, path="./"): + if not path.endswith("/"): + path += "/" + return "%s" % (path, name, name) def mangle_email(email): return re.sub("@", " [at] ", email) @@ -313,7 +188,7 @@ class Histogram: def get_list(self, max=0): items = self.list.items() - items.sort(valuesort) + items.sort(key=lambda x: x[1], reverse=True) if max != 0: return items[:max] else: @@ -342,16 +217,6 @@ class Missing: self.name = name self.revBuildDeps = [] self.revRuntimeDeps = [] - - def report_html(self): - bDeps = map(lambda x: "%s" % (x, x), self.revBuildDeps) - rDeps = map(lambda x: "%s" % (x, x), self.revRuntimeDeps) - dict = { - "name": self.name, - "revBuildDeps": ", ".join(bDeps), - "revRuntimeDeps": ", ".join(rDeps) - } - template_write("paksite/binary/%s.html" % self.name, "missing", dict) class Package: @@ -361,11 +226,6 @@ class Package: errors.append(_("Duplicate binary packages:\n%s\n%s\n") % ( source.name, packages[name].source.name)) return - for p in pakspec.files: - if p.fileType not in valid_filetypes: - e = _("Unknown file type '%s' in package '%s'") % ( - p.fileType, source.name) - errors.append(e) packages[name] = self self.name = name self.source = source @@ -402,17 +262,36 @@ class Package: (map(lambda x: x.package, self.pakspec.packageDependencies))) rbDeps = map(lambda x: "%s" % (x, x), self.revBuildDeps) rrDeps = map(lambda x: "%s" % (x, x), self.revRuntimeDeps) - dict = { - "name": self.name, - "source": source.name, - "version": self.source.spec.getSourceVersion(), - "release": self.source.spec.getSourceRelease(), - "buildDeps": ", ".join(bDeps), - "runtimeDeps": ", ".join(rDeps), - "revBuildDeps": ", ".join(rbDeps), - "revRuntimeDeps": ", ".join(rrDeps) - } - template_write("paksite/binary/%s.html" % self.name, "package", dict) + + html = """ +

İkili paket: %s

+

Kaynak versiyon %s, depo sürümü %s

+ +

Kaynak paket: %s

+ +

Derlemek için gerekenler:

+

%s

+ +

Çalıştırmak için gerekenler:

+

%s

+ +

Bağımlı paketler (derlenmek için):

+

%s

+ +

Bağımlı paketler (çalışmak için):

+

%s

+ """ % ( + self.name, + self.source.spec.getSourceVersion(), + self.source.spec.getSourceRelease(), + make_url(source.name, "../source/"), + ", ".join(bDeps), + ", ".join(rDeps), + ", ".join(rbDeps), + ", ".join(rrDeps), + ) + + write_html("paksite/binary/%s.html" % self.name, self.name, html) class Source: @@ -429,43 +308,54 @@ class Source: self.uri = svn_uri(path) for p in spec.packages: Package(self, p) - self.checkRelease() - - def validDate(self, date): - # yyyy-mm-dd - err = 0 - if len(date) != 10: - err = 1 - if date[4] != '-' or date[7] != '-': - err = 1 - if err: - e = _("Source package '%s' has wrong date format '%s'") % (self.name, date) - errors.append(e) - # more checks can be added, i.e. valid day month ranges, etc - - def checkRelease(self): - pass def report_html(self): source = self.spec.source paks = map(lambda x: "%s" % (x, x), (map(lambda x: x.name, self.spec.packages))) - histdata = map(lambda x: (x.release, x.date, x.name, x.name, x.comment), self.spec.history) + histdata = map(lambda x: (x.release, x.date, x.version, make_url(x.name, "../packager/"), x.comment), self.spec.history) ptch = map(lambda x: "%s" % (self.uri, x.filename, x.filename), source.patches) - dict = { - "name": self.name, - "homepage": source.homepage, - "license": ", ".join(source.license), - "version": self.spec.getSourceVersion(), - "release": self.spec.getSourceRelease(), - "history": template_table("history", histdata), - "packages": "
".join(paks), - "summary": source.summary, - "patches": "
".join(ptch), - "uri": self.uri - } - template_write("paksite/source/%s.html" % self.name, "source", dict) + + titles = "Sürüm", "Sürüm Tarihi", "Versiyon", "Güncelleyen", "Açıklama" + hist = make_table(histdata, titles) + + html = """ +

Kaynak paket: %s

+

Kaynak versiyon %s, depo sürümü %s

+

%s

+

Açıklama

+

%s

+

Lisanslar:

+

%s

+

İşlemler:

+

Paket dosyalarına bak

+

Hata kayıtlarına bak

+ +

Bu kaynaktan derlenen ikili paketler:

+

%s

+ +

Tarihçe

+ %s + +

Yamalar

+ %s + """ % ( + self.name, + self.spec.getSourceVersion(), + self.spec.getSourceRelease(), + source.homepage, + source.homepage, + source.summary, + ", ".join(source.license), + self.uri, + self.name, + "
".join(paks), + "".join(hist), + "
".join(ptch), + ) + + write_html("paksite/source/%s.html" % self.name, self.name, html) class Packager: @@ -502,17 +392,30 @@ class Packager: Packager(spec, update) def report_html(self): - srcs = map(lambda x: "%s" % (x, x), self.sources) + srcs = map(lambda x: ("%s" % (x, x), ), self.sources) srcs.sort() - upds = map(lambda x: "%s (%s)
%s
" % ( - x[0], x[0], x[1], x[2]), self.updates) - dict = { - "name": self.name, - "email": mangle_email(self.email), - "sources": "
".join(srcs), - "updates": " ".join(upds) - } - template_write("paksite/packager/%s.html" % self.name, "packager", dict) + upds = map(lambda x: (u"%s (%s)
%s
" % ( + x[0], x[0], x[1], x[2]), ), self.updates) + + html = """ +

Paketçi: %s (%s)

+ """ % (self.name, mangle_email(self.email)) + + html += """ +
+

Sahip olduğu paketler:

+ %s +

+ """ % make_table(srcs) + + html += """ +
+

Yaptığı güncellemeler:

+ %s +

+ """ % make_table(upds) + + write_html("paksite/packager/%s.html" % self.name, self.name, html) class Repository: @@ -595,45 +498,53 @@ class Repository: self.processPisi(os.path.join(root, fn)) def report_html(self): - miss = map(lambda x: "%s" % (x, x), missing.keys()) - upeople = [] - for p in self.people.get_list(): - upeople.append(("%s" % (p[0], p[0]), p[1])) - if errors: - e = "
".join(errors) - else: - e = "" - upatch = [] - for p in self.mostpatched.get_list(5): - upatch.append(("%s" % (p[0], p[0]), p[1])) - ulongpy = [] - for p in self.longpy.get_list(5): - ulongpy.append(("%s" % (p[0], p[0]), p[1])) - if self.total_installed_size: - items = self.installed_sizes.items() - items.sort(valuesort) - elts = "".join(map(lambda x: "%s%d" % (x[0], x[1]), items)) - sizes = template_get("repo_sizes") % { "total": self.total_installed_size, "sizes": elts } - else: - sizes = "" - dict = { - "nr_source": self.nr_sources, - "nr_packages": self.nr_packages, - "nr_patches": self.nr_patches, - "most_patched": template_table("table", upatch), - "longpy": template_table("table", ulongpy), - "packagers": template_table("table", upeople), - "missing": "\n".join(miss), - "sizes": sizes, - "errors": e - } - template_write("paksite/index.html", "repo", dict) - srclist = map(lambda x: "%s" % (x, x), sources) - srclist.sort() - dict = { - "source_list": "
".join(srclist) - } - template_write("paksite/sources.html", "sources", dict) + table = ( + ("Kaynak paket sayısı", self.nr_sources), + ("İkili paket sayısı", self.nr_packages), + ("Yama sayısı", self.nr_patches), + ("Paketçi sayısı", len(self.people.list)), + ) + html = make_table(table) + + html += """ +
+

En fazla yamalanmış beş kaynak paket:

+ %s +

+ """ % make_table(map(lambda x: (make_url(x[0], "./source/"), x[1]), self.mostpatched.get_list(5))) + + html += """ +
+

En uzun inşa betikli beş kaynak paket:

+ %s +

+ """ % make_table(map(lambda x: (make_url(x[0], "./source/"), x[1]), self.longpy.get_list(5))) + + write_html("paksite/index.html", "Genel Bilgiler", html) + + titles = ( + "Paketçi", + "Paket sayısı" + ) + + people = self.people.get_list() + people = map(lambda x: ("%s" % (x[0], x[0]), x[1]), people) + write_html("paksite/packagers.html", "Paketçiler (paket sayısına göre)", make_table(people, titles)) + + people.sort(key=lambda x: x[0]) + write_html("paksite/packagers_by_name.html", "Paketçiler (isme göre)", make_table(people, titles)) + + titles = "Paket adı", "Versiyon", "Açıklama" + + srclist = map(lambda x: (make_url(x.name, "source/"), x.spec.getSourceVersion(), x.spec.source.summary), sources.values()) + srclist.sort(key=lambda x: x[0]) + html = make_table(srclist, titles) + write_html("paksite/sources.html", "Kaynak Paketler", html) + + binlist = map(lambda x: (make_url(x.name, "binary/"), x.source.spec.getSourceVersion(), x.source.spec.source.summary), packages.values()) + binlist.sort(key=lambda x: x[0]) + html = make_table(binlist, titles) + write_html("paksite/binaries.html", "İkili Paketler", html) # command line driver @@ -668,20 +579,6 @@ if __name__ == "__main__": printu(_("Scanning binary packages...\n")) repo.scan_bins(args[1]) - if errors: - printu("***\n") - printu(_("Encountered %d errors! Fix them immediately!\n") % len(errors)) - for e in errors: - printu(e) - printu("\n") - printu("\n") - printu("***\n") - - if missing: - printu(_("These dependencies are not available in repository:\n")) - for m in missing.keys(): - printu(" %s\n" % m) - if do_web: if not os.path.exists("paksite/packager"): os.makedirs("paksite/packager") @@ -690,11 +587,11 @@ if __name__ == "__main__": if not os.path.exists("paksite/source"): os.makedirs("paksite/source") + file("paksite/stil.css", "w").write(css_template) + repo.report_html() for p in packagers.values(): p.report_html() - for p in missing.values(): - p.report_html() for p in packages.values(): p.report_html() for p in sources.values():