From: Michael Tremer Date: Sun, 18 Nov 2012 16:35:54 +0000 (+0100) Subject: Add changelog of packages. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b1e87c4149d8470d6922bd7afb651739e254f1b;p=pbs.git Add changelog of packages. --- diff --git a/backend/builds.py b/backend/builds.py index be6940d8..a9f4e407 100644 --- a/backend/builds.py +++ b/backend/builds.py @@ -233,6 +233,41 @@ class Builds(base.Object): return builds + def get_changelog(self, name, public=None, limit=5, offset=0): + query = "SELECT builds.* FROM builds \ + JOIN packages ON builds.pkg_id = packages.id \ + WHERE \ + builds.type = %s \ + AND \ + packages.name = %s" + args = ["release", name,] + + if public == True: + query += " AND builds.public = %s" + args.append("Y") + elif public == False: + query += " AND builds.public = %s" + args.append("N") + + query += " ORDER BY builds.time_created DESC" + + if limit: + if offset: + query += " LIMIT %s,%s" + args += [offset, limit] + else: + query += " LIMIT %s" + args.append(limit) + + builds = [] + for b in self.db.query(query, *args): + b = Build(self.pakfire, b.id, b) + builds.append(b) + + builds.sort(reverse=True) + + return builds + class Build(base.Object): def __init__(self, pakfire, id, data=None): diff --git a/backend/sources.py b/backend/sources.py index c6de5d36..d6ecbe31 100644 --- a/backend/sources.py +++ b/backend/sources.py @@ -137,6 +137,12 @@ class Commit(base.Object): def message(self): return self.data.body.strip() + @property + def message_full(self): + msg = [self.subject, ""] + self.message.splitlines() + + return "\n".join(msg) + @property def date(self): return self.data.date diff --git a/data/templates/modules/changelog/entry.html b/data/templates/modules/changelog/entry.html new file mode 100644 index 00000000..79af733c --- /dev/null +++ b/data/templates/modules/changelog/entry.html @@ -0,0 +1,35 @@ +
  • +
    +

    + {{ build.name }} + + + {{ locale.format_date(build.created) }} + + {% if build.repo %} + {% if build.repo.type == "stable" %} + {{ _("Stable") }} + {% elif build.repo.type == "unstable" %} + {{ _("Unstable") }} + {% elif build.repo.type == "testing" %} + {{ _("Testing") }} + {% end %} + {% end %} + +

    + + {% if build.commit %} + {% module Text(build.commit.message_full) %} + +

    + {{ _("Author") }} {% module Maintainer(build.commit.author) %} + ‐ + {{ _("Commit") }} {{ build.pkg.commit.revision[:7] }} +

    + {% else %} +

    + {{ _("No commit message.") }} +

    + {% end %} +
    +
  • diff --git a/data/templates/modules/changelog/index.html b/data/templates/modules/changelog/index.html new file mode 100644 index 00000000..44f0b198 --- /dev/null +++ b/data/templates/modules/changelog/index.html @@ -0,0 +1,5 @@ + diff --git a/data/templates/package-detail-list.html b/data/templates/package-detail-list.html index 1704f666..4d989330 100644 --- a/data/templates/package-detail-list.html +++ b/data/templates/package-detail-list.html @@ -72,37 +72,46 @@ -
    -
    -
    -
    -
    +
    +

    {{ _("Changelog") }}

    + + {% module Changelog(name=name, limit=5) %} + +
    +

    + {{ _("Full changelog") }} +

    +
    + +

    {{ _("Open bugs") }}

    {% if bugs %} {% module BugsTable(pkg, bugs) %} {% else %}
    - {{ _("There are currently no open bugs for %s.") % pkg.name }} + {{ _("There are currently no open bugs for %s.") % pkg.name }}
    {% end %} -
    - -
    {% if build_times %} +
    +

    {{ _("Build times") }}

    diff --git a/data/templates/packages/changelog.html b/data/templates/packages/changelog.html new file mode 100644 index 00000000..9929ce78 --- /dev/null +++ b/data/templates/packages/changelog.html @@ -0,0 +1,53 @@ +{% extends "../base.html" %} + +{% block title %}{{ _("Changelog of %s") % name }}{% end block %} + +{% block body %} + + + + + {% module Changelog(builds=builds) %} + + +{% end block %} diff --git a/web/__init__.py b/web/__init__.py index 4061b828..cefa3e3a 100644 --- a/web/__init__.py +++ b/web/__init__.py @@ -42,6 +42,11 @@ class Application(tornado.web.Application): "BuildLog" : BuildLogModule, "BuildOffset" : BuildOffsetModule, "BuildTable" : BuildTableModule, + + # Changelog + "Changelog" : ChangelogModule, + "ChangelogEntry" : ChangelogEntryModule, + "CommitsTable" : CommitsTableModule, "JobsTable" : JobsTableModule, "JobsList" : JobsListModule, @@ -107,6 +112,7 @@ class Application(tornado.web.Application): (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", PackageDetailHandler), (r"/package/([\w\-\+]+)/properties", PackagePropertiesHandler), (r"/package/([\w\-\+]+)", PackageNameHandler), + (r"/package/([\w\-\+]+)/changelog", PackageChangelogHandler), # Files (r"/file/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", FileDetailHandler), diff --git a/web/handlers_packages.py b/web/handlers_packages.py index 857647c9..ee23b2bc 100644 --- a/web/handlers_packages.py +++ b/web/handlers_packages.py @@ -87,11 +87,46 @@ class PackageNameHandler(BaseHandler): "scratch_builds" : builds["scratch"], } - self.render("package-detail-list.html", builds=builds, + self.render("package-detail-list.html", builds=builds, name=name, latest_build=latest_build, pkg=latest_build.pkg, build_times=build_times, bugs=bugs, **kwargs) +class PackageChangelogHandler(BaseHandler): + def get(self, name): + limit = self.get_argument("limit", 10) + try: + limit = int(limit) + except ValueError: + limit = 10 + + offset = self.get_argument("offset", 0) + try: + offset = int(offset) + except ValueError: + offset = 0 + + # Get one more build than requested to find out if there are more items + # to display (next button). + builds = self.pakfire.builds.get_changelog(name, limit=limit + 1, offset=offset) + + if len(builds) >= limit: + have_next = True + else: + have_next = False + + if offset < limit: + have_prev = False + else: + have_prev = True + + # Clip list to limit. + builds = builds[:limit] + + self.render("packages/changelog.html", name=name, builds=builds, + limit=limit, offset=offset, have_prev=have_prev, have_next=have_next) + + class PackageDetailHandler(BaseHandler): def get(self, uuid): pkg = self.pakfire.packages.get_by_uuid(uuid) diff --git a/web/ui_modules.py b/web/ui_modules.py index 2399ba02..98a3358e 100644 --- a/web/ui_modules.py +++ b/web/ui_modules.py @@ -81,6 +81,19 @@ class BugsTableModule(UIModule): pkg=pkg, bugs=bugs) +class ChangelogModule(UIModule): + def render(self, name=None, builds=None, *args, **kwargs): + if not builds: + builds = self.pakfire.builds.get_changelog(name, *args, **kwargs) + + return self.render_string("modules/changelog/index.html", builds=builds) + + +class ChangelogEntryModule(UIModule): + def render(self, build): + return self.render_string("modules/changelog/entry.html", build=build) + + class CommitsTableModule(UIModule): def render(self, distro, source, commits, full_format=True): return self.render_string("modules/commits-table.html",