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:
-
-
En uzun actions.py betikli 5 kaynak paket:
-
-
Eksik ikili paketler
-
-%(sizes)s
-
-
Paketçiler:
-
-
-
-"""
-
-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
-
-
-
-
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
-
-
-
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 = """
+
+ """ % (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
+
+ 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():