def size(self):
return self.data.size
+ def has_deps(self):
+ """
+ Returns True if the package has got dependencies.
+
+ Always filter out the uuid provides.
+ """
+ return len(self.deps) > 1
+
@property
def deps(self):
if self._deps is None:
@property
def provides(self):
- return [d[1] for d in self.deps if d[0] == "provides"]
+ return [d[1] for d in self.deps if d[0] == "provides" and not d[1].startswith("uuid(")]
@property
def conflicts(self):
def obsoletes(self):
return [d[1] for d in self.deps if d[0] == "obsoletes"]
+ @property
+ def suggests(self):
+ return [d[1] for d in self.deps if d[0] == "suggests"]
+
+ @property
+ def recommends(self):
+ return [d[1] for d in self.deps if d[0] == "recommends"]
+
@property
def commit_id(self):
return self.data.commit_id
@property
def viewable(self):
+ # Empty files cannot be viewed.
+ if self.size == 0:
+ return False
+
for ext in FILE_EXTENSIONS_VIEWABLE:
if self.name.endswith(ext):
return True
--- /dev/null
+<div class="row">
+ {% for name, deps in dependencies %}
+ <div class="{{ "span%d" % span }}">
+ {% if name == "provides" %}
+ <h4>{{ _("Provides") }}</h4>
+ {% elif name == "requires" %}
+ <h4>{{ _("Requires") }}</h4>
+ {% elif name == "prerequires" %}
+ <h4>{{ _("Pre-requires") }}</h4>
+ {% elif name == "conflicts" %}
+ <h4>{{ _("Conflicts") }}</h4>
+ {% elif name == "obsoletes" %}
+ <h4>{{ _("Obsoletes") }}</h4>
+ {% elif name == "recommends" %}
+ <h4>{{ _("Recommends") }}</h4>
+ {% elif name == "suggests" %}
+ <h4>{{ _("Suggests") }}</h4>
+ {% end %}
+
+ <ul class="unstyled">
+ {% for d in deps %}
+ <li>{{ d }}</li>
+ {% end %}
+ </ul>
+ </div>
+ {% end %}
+</div>
{% extends "base.html" %}
-{% block title %}{{ _("Package") }}: {{ pkg.name }}{% end block %}
+{% block title %}{{ _("Package") }}: {{ pkg.friendly_name }}{% end block %}
{% block body %}
<ul class="breadcrumb">
{% end %}
<li class="active">
<a href="/package/{{ pkg.uuid }}">{{ pkg.friendly_name }}</a>
- </li>
+ </li>
</ul>
<div class="page-header">
{% end %}
</div>
- <h1>
- {{ _("Package") }}: {{ pkg.friendly_name }}
- <br /><small>{{ pkg.summary }}</small>
- </h1>
+ <h2>
+ {{ _("Package") }}: {{ pkg.friendly_name }}<br>
+ <small>{{ pkg.summary }}</small>
+ </h2>
</div>
<div class="row">
<div class="span4">
- <blockquote>{{ pkg.description }}</blockquote>
+ {% module Text(pkg.description) %}
</div>
<div class="span4">
<td>{{ _("Size") }}</td>
<td>
{{ format_size(pkg.filesize) }}
- {% if pkg.type == "binary" %}
+ {% if pkg.type == "binary" and not pkg.size == pkg.filesize %}
({{ _("%(size)s when installed") % { "size" : format_size(pkg.size) } }})
{% end %}
</td>
</div>
</div>
- <div class="row">
- <div class="span12">
- {% if pkg.build %}
- <a class="btn pull-right" href="{{ pkg.build.download_prefix }}/{{ pkg.path }}">
- <i class="icon-download"></i>
- {{ _("Download") }}
- </a>
- {% end %}
- </div>
- </div>
- <hr />
-
- {% if pkg.type == "binary" %}
- <div class="row">
- <div class="span12">
- <h2>{{ _("Dependencies") }}</h2>
-
- <div class="tabbable">
- <ul class="nav nav-pills">
- {% if pkg.provides %}
- <li class="active">
- <a href="#deps_provides" data-toggle="tab">
- {{ _("Provides") }}
- </a>
- </li>
- {% end %}
-
- {% if pkg.requires or pkg.prerequires %}
- <li {% if not pkg.provides %}class="active"{% end %}>
- <a href="#deps_requires" data-toggle="tab">
- {{ _("Requires") }}
- </a>
- </li>
- {% end %}
-
- {% if pkg.obsoletes %}
- <li {% if not any((pkg.provides, pkg.requires, pkg.prerequires)) %}class="active"{% end %}>
- <a href="#deps_obsoletes" data-toggle="tab">
- {{ _("Obsoletes") }}
- </a>
- </li>
- {% end %}
-
- {% if pkg.conflicts %}
- <li {% if not any((pkg.provides, pkg.requires, pkg.prerequires, pkg.obsoletes)) %}class="active"{% end %}>
- <a href="#deps_conflicts" data-toggle="tab">
- {{ _("Conflicts") }}
- </a>
- </li>
- {% end %}
- </ul>
+ {% if pkg.build %}
+ <a class="btn pull-right" href="{{ pkg.build.download_prefix }}/{{ pkg.path }}">
+ <i class="icon-download"></i>
+ {{ _("Download") }}
+ </a>
- <div class="tab-content">
- {% if pkg.provides %}
- <div class="tab-pane active" id="deps_provides">
- <ul>
- {% for dep in pkg.provides %}
- {% if not dep.startswith("uuid(") %}
- <li>{{ dep }}</li>
- {% end %}
- {% end %}
- </ul>
- </div>
- {% end %}
-
- {% if pkg.requires or pkg.prerequires %}
- <div class="tab-pane {% if not pkg.provides %}active{% end %}" id="deps_requires">
- <ul>
- {% for dep in pkg.requires %}
- <li>{{ dep }}</li>
- {% end %}
- </ul>
-
- {% if pkg.prerequires %}
- <h3>{{ _("Prerequires") }}</h3>
-
- <ul>
- {% for dep in pkg.prerequires %}
- <li>{{ dep }}</li>
- {% end %}
- </ul>
- {% end %}
- </div>
- {% end %}
+ <br class="clear">
+ {% end %}
- {% if pkg.obsoletes %}
- <div class="tab-pane {% if not any((pkg.provides, pkg.requires, pkg.prerequires)) %}active{% end %}" id="deps_obsoletes">
- <ul>
- {% for dep in pkg.obsoletes %}
- <li>{{ dep }}</li>
- {% end %}
- </ul>
- </div>
- {% end %}
+ {% if pkg.has_deps() %}
+ <hr>
- {% if pkg.conflicts %}
- <div class="tab-pane {% if not any((pkg.provides, pkg.requires, pkg.prerequires, pkg.obsoletes)) %}active{% end %}" id="deps_conflicts">
- <ul>
- {% for dep in pkg.conflicts %}
- <li>{{ dep }}</li>
- {% end %}
- </ul>
- </div>
- {% end %}
- </div>
- </div>
+ {% if pkg.type == "source" %}
+ <h4>{{ _("Build dependencies") }}</h4>
+ {% else %}
+ <h3>{{ _("Dependencies") }}</h3>
+ {% end %}
- <hr>
- </div>
- </div>
- {% elif pkg.type == "source" %}
- <div class="row">
- <div class="span12">
- <h2>{{ _("Build dependencies") }}</h2>
- <ul>
- {% for dep in pkg.requires %}
- <li>{{ dep }}</li>
- {% end %}
- </ul>
- </div>
- </div>
+ {% module PackagesDependencyTable(pkg) %}
{% end %}
{% if pkg.filelist %}
- <h2>{{ _("Files") }}</h2>
+ <hr>
+
+ <h3>{{ _("Filelist") }}</h3>
+
{% module PackageFilesTable(pkg, pkg.filelist) %}
{% end %}
{% end block %}
"Changelog" : ChangelogModule,
"ChangelogEntry" : ChangelogEntryModule,
+ # Packages
+ "PackagesDependencyTable" : PackagesDependencyTableModule,
+
"CommitsTable" : CommitsTableModule,
"JobsBoxes" : JobsBoxesModule,
"JobState" : JobStateModule,
content = f.read()
f.close()
- self.render("packages/view_file.html", pkg=pkg, filename=filename,
+ self.render("packages/view-file.html", pkg=pkg, filename=filename,
mimetype=mimetype, content=content, filesize=f.size)
#!/usr/bin/python
+from __future__ import division
+
+import math
import pytz
import re
import string
packages=packages)
+class PackagesDependencyTableModule(UIModule):
+ def render(self, pkg):
+ if pkg.type == "source":
+ all_deps = [
+ (None, pkg.requires),
+ ]
+ else:
+ all_deps = [
+ ("provides", pkg.provides),
+ ("requires", pkg.requires),
+ ("prerequires", pkg.prerequires),
+ ("conflicts", pkg.conflicts),
+ ("obsoletes", pkg.obsoletes),
+ ("recommends", pkg.recommends),
+ ("suggests", pkg.suggests),
+ ]
+
+ has_deps = []
+ for name, deps in all_deps:
+ if deps:
+ has_deps.append((name, deps))
+
+ if len(has_deps):
+ span = math.floor(12 / len(has_deps))
+
+ if span > 3:
+ span = 3
+ else:
+ span = 12
+
+ return self.render_string("modules/packages/dependency-table.html",
+ pkg=pkg, dependencies=has_deps, span=span)
+
+
class PackageTable2Module(UIModule):
def render(self, packages):
return self.render_string("modules/package-table-detail.html",