From 87e8a16d6573d760cfb2a1388c29c1ea768fc620 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Mon, 3 Nov 2014 18:32:15 -0600
Subject: Update fixtures for new staff groups
Signed-off-by: Dan McGee
---
devel/fixtures/staff_groups.json | 72 +++
main/fixtures/groups.json | 961 ++++++++++++++++++++-------------------
2 files changed, 567 insertions(+), 466 deletions(-)
create mode 100644 devel/fixtures/staff_groups.json
diff --git a/devel/fixtures/staff_groups.json b/devel/fixtures/staff_groups.json
new file mode 100644
index 00000000..6a0a0514
--- /dev/null
+++ b/devel/fixtures/staff_groups.json
@@ -0,0 +1,72 @@
+[
+{
+ "fields": {
+ "group": [
+ "Developers"
+ ],
+ "description": "This is a list of the current Arch Linux Developers. They maintain the [core] and [extra] package repositories in addition to doing any other developer duties.",
+ "sort_order": 1,
+ "member_title": "Developer",
+ "slug": "developers",
+ "name": "Developers"
+ },
+ "model": "devel.staffgroup",
+ "pk": 1
+},
+{
+ "fields": {
+ "group": [
+ "Trusted Users"
+ ],
+ "description": "Here are all your friendly Arch Linux Trusted Users who are in charge of the [community] repository.",
+ "sort_order": 2,
+ "member_title": "Trusted User",
+ "slug": "trusted-users",
+ "name": "Trusted Users"
+ },
+ "model": "devel.staffgroup",
+ "pk": 2
+},
+{
+ "fields": {
+ "group": [
+ "Retired Developers"
+ ],
+ "description": "Below you can find a list of ex-developers (aka project fellows). These folks helped make Arch what it is today. Thanks!",
+ "sort_order": 11,
+ "member_title": "Fellow",
+ "slug": "developer-fellows",
+ "name": "Developer Fellows"
+ },
+ "model": "devel.staffgroup",
+ "pk": 3
+},
+{
+ "fields": {
+ "group": [
+ "Retired Trusted Users"
+ ],
+ "description": "Below you can find a list of ex-trusted users (aka fellows). These folks helped make Arch what it is today. Thanks!",
+ "sort_order": 12,
+ "member_title": "Fellow",
+ "slug": "trusted-user-fellows",
+ "name": "Trusted User Fellows"
+ },
+ "model": "devel.staffgroup",
+ "pk": 4
+},
+{
+ "fields": {
+ "group": [
+ "Support Staff"
+ ],
+ "description": "These are the unheralded people that keep things running behind the scenes. Forum moderators, wiki admins, IRC moderators, mirror maintenance, and everything else that keeps a Linux distro running smoothly.",
+ "sort_order": 5,
+ "member_title": "Staff",
+ "slug": "support-staff",
+ "name": "Support Staff"
+ },
+ "model": "devel.staffgroup",
+ "pk": 5
+}
+]
diff --git a/main/fixtures/groups.json b/main/fixtures/groups.json
index 134b98b3..2205be7c 100644
--- a/main/fixtures/groups.json
+++ b/main/fixtures/groups.json
@@ -1,475 +1,504 @@
[
- {
- "pk": 1,
- "model": "auth.group",
- "fields": {
- "name": "Developers",
- "permissions": [
- [
- "change_package",
- "main",
- "package"
- ],
- [
- "add_news",
- "news",
- "news"
- ],
- [
- "change_news",
- "news",
- "news"
- ],
- [
- "add_signoff",
- "packages",
- "signoff"
- ],
- [
- "change_signoff",
- "packages",
- "signoff"
- ],
- [
- "add_signoffspecification",
- "packages",
- "signoffspecification"
- ],
- [
- "change_signoffspecification",
- "packages",
- "signoffspecification"
- ],
- [
- "add_todolist",
- "todolists",
- "todolist"
- ],
- [
- "change_todolist",
- "todolists",
- "todolist"
- ],
- [
- "add_todolistpackage",
- "todolists",
- "todolistpackage"
- ],
- [
- "change_todolistpackage",
- "todolists",
- "todolistpackage"
- ],
- [
- "delete_todolistpackage",
- "todolists",
- "todolistpackage"
- ]
+{
+ "fields": {
+ "name": "Developers",
+ "permissions": [
+ [
+ "change_package",
+ "main",
+ "package"
+ ],
+ [
+ "add_news",
+ "news",
+ "news"
+ ],
+ [
+ "change_news",
+ "news",
+ "news"
+ ],
+ [
+ "add_signoff",
+ "packages",
+ "signoff"
+ ],
+ [
+ "change_signoff",
+ "packages",
+ "signoff"
+ ],
+ [
+ "add_signoffspecification",
+ "packages",
+ "signoffspecification"
+ ],
+ [
+ "change_signoffspecification",
+ "packages",
+ "signoffspecification"
+ ],
+ [
+ "add_todolist",
+ "todolists",
+ "todolist"
+ ],
+ [
+ "change_todolist",
+ "todolists",
+ "todolist"
+ ],
+ [
+ "add_todolistpackage",
+ "todolists",
+ "todolistpackage"
+ ],
+ [
+ "change_todolistpackage",
+ "todolists",
+ "todolistpackage"
+ ],
+ [
+ "delete_todolistpackage",
+ "todolists",
+ "todolistpackage"
]
- }
- },
- {
- "pk": 2,
- "model": "auth.group",
- "fields": {
- "name": "Trusted Users",
- "permissions": [
- [
- "change_package",
- "main",
- "package"
- ],
- [
- "add_signoff",
- "packages",
- "signoff"
- ],
- [
- "change_signoff",
- "packages",
- "signoff"
- ],
- [
- "add_signoffspecification",
- "packages",
- "signoffspecification"
- ],
- [
- "change_signoffspecification",
- "packages",
- "signoffspecification"
- ],
- [
- "add_todolist",
- "todolists",
- "todolist"
- ],
- [
- "change_todolist",
- "todolists",
- "todolist"
- ],
- [
- "add_todolistpackage",
- "todolists",
- "todolistpackage"
- ],
- [
- "change_todolistpackage",
- "todolists",
- "todolistpackage"
- ],
- [
- "delete_todolistpackage",
- "todolists",
- "todolistpackage"
- ]
+ ]
+ },
+ "model": "auth.group",
+ "pk": 1
+},
+{
+ "fields": {
+ "name": "Trusted Users",
+ "permissions": [
+ [
+ "change_package",
+ "main",
+ "package"
+ ],
+ [
+ "add_signoff",
+ "packages",
+ "signoff"
+ ],
+ [
+ "change_signoff",
+ "packages",
+ "signoff"
+ ],
+ [
+ "add_signoffspecification",
+ "packages",
+ "signoffspecification"
+ ],
+ [
+ "change_signoffspecification",
+ "packages",
+ "signoffspecification"
+ ],
+ [
+ "add_todolist",
+ "todolists",
+ "todolist"
+ ],
+ [
+ "change_todolist",
+ "todolists",
+ "todolist"
+ ],
+ [
+ "add_todolistpackage",
+ "todolists",
+ "todolistpackage"
+ ],
+ [
+ "change_todolistpackage",
+ "todolists",
+ "todolistpackage"
+ ],
+ [
+ "delete_todolistpackage",
+ "todolists",
+ "todolistpackage"
]
- }
- },
- {
- "pk": 3,
- "model": "auth.group",
- "fields": {
- "name": "Mirror Maintainers",
- "permissions": [
- [
- "add_mirror",
- "mirrors",
- "mirror"
- ],
- [
- "change_mirror",
- "mirrors",
- "mirror"
- ],
- [
- "delete_mirror",
- "mirrors",
- "mirror"
- ],
- [
- "add_mirrorprotocol",
- "mirrors",
- "mirrorprotocol"
- ],
- [
- "change_mirrorprotocol",
- "mirrors",
- "mirrorprotocol"
- ],
- [
- "add_mirrorrsync",
- "mirrors",
- "mirrorrsync"
- ],
- [
- "change_mirrorrsync",
- "mirrors",
- "mirrorrsync"
- ],
- [
- "delete_mirrorrsync",
- "mirrors",
- "mirrorrsync"
- ],
- [
- "add_mirrorurl",
- "mirrors",
- "mirrorurl"
- ],
- [
- "change_mirrorurl",
- "mirrors",
- "mirrorurl"
- ],
- [
- "delete_mirrorurl",
- "mirrors",
- "mirrorurl"
- ]
+ ]
+ },
+ "model": "auth.group",
+ "pk": 2
+},
+{
+ "fields": {
+ "name": "Mirror Maintainers",
+ "permissions": [
+ [
+ "add_mirror",
+ "mirrors",
+ "mirror"
+ ],
+ [
+ "change_mirror",
+ "mirrors",
+ "mirror"
+ ],
+ [
+ "delete_mirror",
+ "mirrors",
+ "mirror"
+ ],
+ [
+ "add_mirrorprotocol",
+ "mirrors",
+ "mirrorprotocol"
+ ],
+ [
+ "change_mirrorprotocol",
+ "mirrors",
+ "mirrorprotocol"
+ ],
+ [
+ "add_mirrorrsync",
+ "mirrors",
+ "mirrorrsync"
+ ],
+ [
+ "change_mirrorrsync",
+ "mirrors",
+ "mirrorrsync"
+ ],
+ [
+ "delete_mirrorrsync",
+ "mirrors",
+ "mirrorrsync"
+ ],
+ [
+ "add_mirrorurl",
+ "mirrors",
+ "mirrorurl"
+ ],
+ [
+ "change_mirrorurl",
+ "mirrors",
+ "mirrorurl"
+ ],
+ [
+ "delete_mirrorurl",
+ "mirrors",
+ "mirrorurl"
]
- }
- },
- {
- "pk": 4,
- "model": "auth.group",
- "fields": {
- "name": "User Admins",
- "permissions": [
- [
- "add_user",
- "auth",
- "user"
- ],
- [
- "change_user",
- "auth",
- "user"
- ],
- [
- "add_userprofile",
- "devel",
- "userprofile"
- ],
- [
- "change_userprofile",
- "devel",
- "userprofile"
- ]
+ ]
+ },
+ "model": "auth.group",
+ "pk": 3
+},
+{
+ "fields": {
+ "name": "User Admins",
+ "permissions": [
+ [
+ "add_user",
+ "auth",
+ "user"
+ ],
+ [
+ "change_user",
+ "auth",
+ "user"
+ ],
+ [
+ "change_staffgroup",
+ "devel",
+ "staffgroup"
+ ],
+ [
+ "add_userprofile",
+ "devel",
+ "userprofile"
+ ],
+ [
+ "change_userprofile",
+ "devel",
+ "userprofile"
]
- }
- },
- {
- "pk": 5,
- "model": "auth.group",
- "fields": {
- "name": "Release Engineering",
- "permissions": [
- [
- "add_architecture",
- "releng",
- "architecture"
- ],
- [
- "change_architecture",
- "releng",
- "architecture"
- ],
- [
- "delete_architecture",
- "releng",
- "architecture"
- ],
- [
- "add_bootloader",
- "releng",
- "bootloader"
- ],
- [
- "change_bootloader",
- "releng",
- "bootloader"
- ],
- [
- "delete_bootloader",
- "releng",
- "bootloader"
- ],
- [
- "add_boottype",
- "releng",
- "boottype"
- ],
- [
- "change_boottype",
- "releng",
- "boottype"
- ],
- [
- "delete_boottype",
- "releng",
- "boottype"
- ],
- [
- "add_clockchoice",
- "releng",
- "clockchoice"
- ],
- [
- "change_clockchoice",
- "releng",
- "clockchoice"
- ],
- [
- "delete_clockchoice",
- "releng",
- "clockchoice"
- ],
- [
- "add_filesystem",
- "releng",
- "filesystem"
- ],
- [
- "change_filesystem",
- "releng",
- "filesystem"
- ],
- [
- "delete_filesystem",
- "releng",
- "filesystem"
- ],
- [
- "add_hardwaretype",
- "releng",
- "hardwaretype"
- ],
- [
- "change_hardwaretype",
- "releng",
- "hardwaretype"
- ],
- [
- "delete_hardwaretype",
- "releng",
- "hardwaretype"
- ],
- [
- "add_installtype",
- "releng",
- "installtype"
- ],
- [
- "change_installtype",
- "releng",
- "installtype"
- ],
- [
- "delete_installtype",
- "releng",
- "installtype"
- ],
- [
- "add_iso",
- "releng",
- "iso"
- ],
- [
- "change_iso",
- "releng",
- "iso"
- ],
- [
- "delete_iso",
- "releng",
- "iso"
- ],
- [
- "add_isotype",
- "releng",
- "isotype"
- ],
- [
- "change_isotype",
- "releng",
- "isotype"
- ],
- [
- "delete_isotype",
- "releng",
- "isotype"
- ],
- [
- "add_module",
- "releng",
- "module"
- ],
- [
- "change_module",
- "releng",
- "module"
- ],
- [
- "delete_module",
- "releng",
- "module"
- ],
- [
- "add_release",
- "releng",
- "release"
- ],
- [
- "change_release",
- "releng",
- "release"
- ],
- [
- "delete_release",
- "releng",
- "release"
- ],
- [
- "add_source",
- "releng",
- "source"
- ],
- [
- "change_source",
- "releng",
- "source"
- ],
- [
- "delete_source",
- "releng",
- "source"
- ],
- [
- "add_test",
- "releng",
- "test"
- ],
- [
- "change_test",
- "releng",
- "test"
- ],
- [
- "delete_test",
- "releng",
- "test"
- ]
+ ]
+ },
+ "model": "auth.group",
+ "pk": 4
+},
+{
+ "fields": {
+ "name": "Release Engineering",
+ "permissions": [
+ [
+ "add_architecture",
+ "releng",
+ "architecture"
+ ],
+ [
+ "change_architecture",
+ "releng",
+ "architecture"
+ ],
+ [
+ "delete_architecture",
+ "releng",
+ "architecture"
+ ],
+ [
+ "add_bootloader",
+ "releng",
+ "bootloader"
+ ],
+ [
+ "change_bootloader",
+ "releng",
+ "bootloader"
+ ],
+ [
+ "delete_bootloader",
+ "releng",
+ "bootloader"
+ ],
+ [
+ "add_boottype",
+ "releng",
+ "boottype"
+ ],
+ [
+ "change_boottype",
+ "releng",
+ "boottype"
+ ],
+ [
+ "delete_boottype",
+ "releng",
+ "boottype"
+ ],
+ [
+ "add_clockchoice",
+ "releng",
+ "clockchoice"
+ ],
+ [
+ "change_clockchoice",
+ "releng",
+ "clockchoice"
+ ],
+ [
+ "delete_clockchoice",
+ "releng",
+ "clockchoice"
+ ],
+ [
+ "add_filesystem",
+ "releng",
+ "filesystem"
+ ],
+ [
+ "change_filesystem",
+ "releng",
+ "filesystem"
+ ],
+ [
+ "delete_filesystem",
+ "releng",
+ "filesystem"
+ ],
+ [
+ "add_hardwaretype",
+ "releng",
+ "hardwaretype"
+ ],
+ [
+ "change_hardwaretype",
+ "releng",
+ "hardwaretype"
+ ],
+ [
+ "delete_hardwaretype",
+ "releng",
+ "hardwaretype"
+ ],
+ [
+ "add_installtype",
+ "releng",
+ "installtype"
+ ],
+ [
+ "change_installtype",
+ "releng",
+ "installtype"
+ ],
+ [
+ "delete_installtype",
+ "releng",
+ "installtype"
+ ],
+ [
+ "add_iso",
+ "releng",
+ "iso"
+ ],
+ [
+ "change_iso",
+ "releng",
+ "iso"
+ ],
+ [
+ "delete_iso",
+ "releng",
+ "iso"
+ ],
+ [
+ "add_isotype",
+ "releng",
+ "isotype"
+ ],
+ [
+ "change_isotype",
+ "releng",
+ "isotype"
+ ],
+ [
+ "delete_isotype",
+ "releng",
+ "isotype"
+ ],
+ [
+ "add_module",
+ "releng",
+ "module"
+ ],
+ [
+ "change_module",
+ "releng",
+ "module"
+ ],
+ [
+ "delete_module",
+ "releng",
+ "module"
+ ],
+ [
+ "add_release",
+ "releng",
+ "release"
+ ],
+ [
+ "change_release",
+ "releng",
+ "release"
+ ],
+ [
+ "delete_release",
+ "releng",
+ "release"
+ ],
+ [
+ "add_source",
+ "releng",
+ "source"
+ ],
+ [
+ "change_source",
+ "releng",
+ "source"
+ ],
+ [
+ "delete_source",
+ "releng",
+ "source"
+ ],
+ [
+ "add_test",
+ "releng",
+ "test"
+ ],
+ [
+ "change_test",
+ "releng",
+ "test"
+ ],
+ [
+ "delete_test",
+ "releng",
+ "test"
]
- }
- },
- {
- "pk": 6,
- "model": "auth.group",
- "fields": {
- "name": "Package Relation Maintainers",
- "permissions": [
- [
- "add_packagerelation",
- "packages",
- "packagerelation"
- ],
- [
- "change_packagerelation",
- "packages",
- "packagerelation"
- ],
- [
- "delete_packagerelation",
- "packages",
- "packagerelation"
- ]
+ ]
+ },
+ "model": "auth.group",
+ "pk": 5
+},
+{
+ "fields": {
+ "name": "Package Relation Maintainers",
+ "permissions": [
+ [
+ "add_packagerelation",
+ "packages",
+ "packagerelation"
+ ],
+ [
+ "change_packagerelation",
+ "packages",
+ "packagerelation"
+ ],
+ [
+ "delete_packagerelation",
+ "packages",
+ "packagerelation"
]
- }
- },
- {
- "pk": 8,
- "model": "auth.group",
- "fields": {
- "name": "Download Page Releases",
- "permissions": [
- [
- "add_release",
- "releng",
- "release"
- ],
- [
- "change_release",
- "releng",
- "release"
- ],
- [
- "delete_release",
- "releng",
- "release"
- ]
+ ]
+ },
+ "model": "auth.group",
+ "pk": 6
+},
+{
+ "fields": {
+ "name": "Download Page Releases",
+ "permissions": [
+ [
+ "add_release",
+ "releng",
+ "release"
+ ],
+ [
+ "change_release",
+ "releng",
+ "release"
+ ],
+ [
+ "delete_release",
+ "releng",
+ "release"
]
- }
- }
+ ]
+ },
+ "model": "auth.group",
+ "pk": 8
+},
+{
+ "fields": {
+ "name": "Retired Developers",
+ "permissions": []
+ },
+ "model": "auth.group",
+ "pk": 9
+},
+{
+ "fields": {
+ "name": "Retired Trusted Users",
+ "permissions": []
+ },
+ "model": "auth.group",
+ "pk": 10
+},
+{
+ "fields": {
+ "name": "Support Staff",
+ "permissions": []
+ },
+ "model": "auth.group",
+ "pk": 11
+}
]
--
cgit v1.2.3-2-g168b
From 1bf6358b94d0466cd0ab0e5ef47bd45d770e477e Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Wed, 5 Nov 2014 22:39:21 -0600
Subject: Always link to torrent and magnet, even if not available
We were already doing this on the details page; no need to hide it on
the listing page.
Signed-off-by: Dan McGee
---
templates/releng/release_list.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/templates/releng/release_list.html b/templates/releng/release_list.html
index be257f9e..5c8e003a 100644
--- a/templates/releng/release_list.html
+++ b/templates/releng/release_list.html
@@ -31,9 +31,9 @@
{{ item.version }} |
{{ item.kernel_version|default:"" }} |
{{ item.available|yesno|capfirst }} |
- {% if item.available %}Torrent{% endif %} |
- {% if item.available %}Magnet{% endif %} |
+ Torrent |
+ Magnet |
{% if item.torrent_data %}{{ item.torrent.file_length|filesizeformat }}{% endif %} |
{% endfor %}
--
cgit v1.2.3-2-g168b
From 935d801615dd320693d4c85359aab9f12bd91b14 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Wed, 5 Nov 2014 23:02:24 -0600
Subject: Add icons, more detail to releases pages
Signed-off-by: Dan McGee
---
sitestatic/download.png | Bin 0 -> 1155 bytes
sitestatic/magnet.png | Bin 0 -> 2382 bytes
templates/releng/release_detail.html | 15 ++++++++++-----
templates/releng/release_list.html | 25 +++++++++++++++++++------
4 files changed, 29 insertions(+), 11 deletions(-)
create mode 100644 sitestatic/download.png
create mode 100644 sitestatic/magnet.png
diff --git a/sitestatic/download.png b/sitestatic/download.png
new file mode 100644
index 00000000..9ab858c2
Binary files /dev/null and b/sitestatic/download.png differ
diff --git a/sitestatic/magnet.png b/sitestatic/magnet.png
new file mode 100644
index 00000000..f67e69b9
Binary files /dev/null and b/sitestatic/magnet.png differ
diff --git a/templates/releng/release_detail.html b/templates/releng/release_detail.html
index 5cd1c432..11155c0c 100644
--- a/templates/releng/release_detail.html
+++ b/templates/releng/release_detail.html
@@ -1,4 +1,5 @@
{% extends "base.html" %}
+{% load static %}
{% block title %}Arch Linux - Release: {{ release.version }}{% endblock %}
@@ -9,11 +10,15 @@
- Release Date: {{ release.release_date|date }}
{% if release.kernel_version %}- Kernel Version: {{ release.kernel_version }}
{% endif %}
- - Available: {{ release.available|yesno }}
- {% if release.torrent_data %}- Download: Torrent,
- Magnet
{% endif %}
+ - Available: {{ release.available|yesno|capfirst }}
+ {% if release.torrent_data %}
+ -
+ Download via Torrent

+ -
+ Download via Magnet URI

+ {% endif %}
{% if release.md5_sum %}- MD5: {{ release.md5_sum }}
{% endif %}
{% if release.sha1_sum %}- SHA1: {{ release.sha1_sum }}
{% endif %}
diff --git a/templates/releng/release_list.html b/templates/releng/release_list.html
index 5c8e003a..fa15bcb9 100644
--- a/templates/releng/release_list.html
+++ b/templates/releng/release_list.html
@@ -12,28 +12,41 @@
Releases
+
This is a list of ISO releases made by the Arch Linux release
+ engineering team. These are typically done on a monthly cadence, containing
+ the latest kernel and base packages from the package repositories. Click
+ the version of each release to read any additional notes or details about
+ each release.
+
Torrents and magnet URIs are available to download the releases.
+ Releases listed as not available may still be seeded by peers, but are no
+ longer registered via the official Arch Linux torrent tracker. We always
+ recommend running the latest available release.
+
+ |
Release Date |
Version |
Kernel Version |
Available? |
- Torrent |
- Magnet |
Download Size |
{% for item in release_list %}
+ {% if item.torrent_data %}
+
+
+
+ {% endif %} |
{{ item.release_date|date }} |
{{ item.version }} |
{{ item.kernel_version|default:"" }} |
{{ item.available|yesno|capfirst }} |
- Torrent |
- Magnet |
{% if item.torrent_data %}{{ item.torrent.file_length|filesizeformat }}{% endif %} |
{% endfor %}
@@ -50,7 +63,7 @@ $(document).ready(function() {
$(".results").tablesorter({
widgets: ['zebra'],
sortList: [[0,1], [1,1]],
- headers: { 4: { sorter: false }, 5: { sorter: false } }
+ headers: { 0: { sorter: false } }
});
});
--
cgit v1.2.3-2-g168b
From 9b5eb6ab383dcd090cdbf88a250ecdfd407c3beb Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Wed, 5 Nov 2014 23:03:43 -0600
Subject: Add torrent/magnet icons to download page
Signed-off-by: Dan McGee
---
templates/public/download.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/templates/public/download.html b/templates/public/download.html
index 967d8a6e..cbd7cd73 100644
--- a/templates/public/download.html
+++ b/templates/public/download.html
@@ -59,9 +59,9 @@
{% if release %}{% endif %}
Netboot
--
cgit v1.2.3-2-g168b
From cd22bfd73b184888df13b194ecdf6e482b36c3fc Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Fri, 7 Nov 2014 09:27:56 -0600
Subject: Master signing keys page improvements
* Don't show non-packagers
* Don't hardcode group names in view code
* Reduce number of database queries for all of the cross-signature
developer name lookups
Signed-off-by: Dan McGee
---
main/templatetags/pgp.py | 19 ++++++-------------
public/views.py | 37 ++++++++++++++++++++++---------------
templates/public/keys.html | 4 ++--
visualize/static/visualize.js | 5 ++---
4 files changed, 32 insertions(+), 33 deletions(-)
diff --git a/main/templatetags/pgp.py b/main/templatetags/pgp.py
index 2417f688..455e8f9c 100644
--- a/main/templatetags/pgp.py
+++ b/main/templatetags/pgp.py
@@ -44,21 +44,14 @@ def pgp_key_link(key_id, link_text=None):
return '%s' % values
-@cache_function(1741)
-def name_for_key(normalized):
- try:
- matching_key = DeveloperKey.objects.select_related(
- 'owner').get(key=normalized, owner_id__isnull=False)
- return matching_key.owner.get_full_name()
- except DeveloperKey.DoesNotExist:
- return None
-
-
@register.simple_tag
-def user_pgp_key_link(key_id):
+def user_pgp_key_link(dev_keys, key_id):
normalized = key_id[-16:]
- name = name_for_key(normalized)
- return pgp_key_link(key_id, name)
+ found = dev_keys.get(normalized, None)
+ if found:
+ return pgp_key_link(key_id, found.owner.get_full_name())
+ else:
+ return pgp_key_link(key_id, None)
@register.filter(needs_autoescape=True)
diff --git a/public/views.py b/public/views.py
index 118f067a..c0dae400 100644
--- a/public/views.py
+++ b/public/views.py
@@ -9,7 +9,7 @@ from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from django.views.decorators.cache import cache_control, cache_page
-from devel.models import MasterKey, PGPSignature, StaffGroup
+from devel.models import MasterKey, DeveloperKey, PGPSignature, StaffGroup, UserProfile
from main.models import Arch, Repo, Donor
from mirrors.models import MirrorUrl
from news.models import News
@@ -91,7 +91,9 @@ def feeds(request):
@cache_control(max_age=307)
def keys(request):
- users = User.objects.filter(is_active=True).select_related(
+ profile_ids = UserProfile.allowed_repos.through.objects.values('userprofile_id')
+ users = User.objects.filter(
+ is_active=True, userprofile__id__in=profile_ids).select_related(
'userprofile__pgp_key').order_by('first_name', 'last_name')
user_key_ids = frozenset(user.userprofile.pgp_key[-16:] for user in users
if user.userprofile.pgp_key)
@@ -114,34 +116,39 @@ def keys(request):
not_expired, revoked__isnull=True).values_list('signer', 'signee'))
restrict = Q(signer__in=user_key_ids) & Q(signee__in=user_key_ids)
- cross_signatures = PGPSignature.objects.filter(restrict,
+ cross_signatures = PGPSignature.objects.filter(
not_expired, revoked__isnull=True).order_by('created')
+ # filter in python so we aren't sending a crazy long query to the DB
+ cross_signatures = [s for s in cross_signatures
+ if s.signer in user_key_ids and s.signee in user_key_ids]
+
+ developer_keys = DeveloperKey.objects.select_related(
+ 'owner').filter(owner__isnull=False)
+ developer_keys = {key.key[-16:]: key for key in developer_keys}
context = {
'keys': master_keys,
'active_users': users,
'signatures': signatures,
'cross_signatures': cross_signatures,
+ 'developer_keys': developer_keys,
}
return render(request, 'public/keys.html', context)
@cache_page(1789)
def keys_json(request):
- node_list = []
+ profile_ids = UserProfile.allowed_repos.through.objects.values('userprofile_id')
+ users = User.objects.filter(
+ is_active=True, userprofile__id__in=profile_ids).select_related(
+ 'userprofile__pgp_key').order_by('first_name', 'last_name')
users = User.objects.filter(is_active=True).select_related('userprofile')
- node_list.extend({
- 'name': dev.get_full_name(),
- 'key': dev.userprofile.pgp_key,
- 'group': 'dev'
- } for dev in users.filter(groups__name='Developers'))
- node_list.extend({
- 'name': tu.get_full_name(),
- 'key': tu.userprofile.pgp_key,
- 'group': 'tu'
- } for tu in users.filter(groups__name='Trusted Users').exclude(
- groups__name='Developers'))
+ node_list = [{
+ 'name': user.get_full_name(),
+ 'key': user.userprofile.pgp_key,
+ 'group': 'packager'
+ } for user in users]
master_keys = MasterKey.objects.select_related('owner').filter(
revoked__isnull=True)
diff --git a/templates/public/keys.html b/templates/public/keys.html
index 54d52ab8..37d5b232 100644
--- a/templates/public/keys.html
+++ b/templates/public/keys.html
@@ -123,8 +123,8 @@
{% for sig in cross_signatures %}
- {% user_pgp_key_link sig.signer %} |
- {% user_pgp_key_link sig.signee %} |
+ {% user_pgp_key_link developer_keys sig.signer %} |
+ {% user_pgp_key_link developer_keys sig.signee %} |
{{ sig.created }} |
{{ sig.expires|default:"" }} |
diff --git a/visualize/static/visualize.js b/visualize/static/visualize.js
index 5004fe6c..5254c26b 100644
--- a/visualize/static/visualize.js
+++ b/visualize/static/visualize.js
@@ -175,7 +175,7 @@ function developer_keys(chart_id, data_url) {
}
});
jQuery.map(json.nodes, function(d, i) {
- if (d.group === "dev" || d.group === "tu") {
+ if (d.group === "packager") {
d.approved = d.master_sigs >= 3;
} else {
d.approved = null;
@@ -200,8 +200,7 @@ function developer_keys(chart_id, data_url) {
return r * 1.6 - 0.75;
case "cacert":
return r * 1.4 - 0.75;
- case "dev":
- case "tu":
+ case "packager":
default:
return r - 0.75;
}
--
cgit v1.2.3-2-g168b
From eb7172cd4d9d7af690b2be06e3f925d3023be71c Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 13:43:59 -0600
Subject: Convert some of URL details to Jinja2
Anytime we have a loop with >100 items, the Django template engine
begins to be the bottleneck. This one is relatively straightforward to
convert, and sets the stage for converting the mirror status page as
well.
Signed-off-by: Dan McGee
---
mirrors/templatetags/jinja2.py | 31 +++++++++++++++++++++++++++
packages/templatetags/jinja2.py | 1 -
templates/mirrors/url_details.html | 29 +------------------------
templates/mirrors/url_details_logs.html.jinja | 28 ++++++++++++++++++++++++
4 files changed, 60 insertions(+), 29 deletions(-)
create mode 100644 mirrors/templatetags/jinja2.py
create mode 100644 templates/mirrors/url_details_logs.html.jinja
diff --git a/mirrors/templatetags/jinja2.py b/mirrors/templatetags/jinja2.py
new file mode 100644
index 00000000..5d47fe9b
--- /dev/null
+++ b/mirrors/templatetags/jinja2.py
@@ -0,0 +1,31 @@
+from django_jinja import library
+from markupsafe import Markup
+
+
+@library.global_function
+def country_flag(country):
+ if not country:
+ return ''
+ html = ' ' % (
+ unicode(country.code).lower(), unicode(country.name))
+ return Markup(html)
+
+
+@library.filter
+def duration(value):
+ if not value and type(value) != timedelta:
+ return u''
+ # does not take microseconds into account
+ total_secs = value.seconds + value.days * 24 * 3600
+ mins = total_secs // 60
+ hrs, mins = divmod(mins, 60)
+ return '%d:%02d' % (hrs, mins)
+
+
+@library.filter
+def floatvalue(value, arg=2):
+ if value is None:
+ return u''
+ return '%.*f' % (arg, value)
+
+# vim: set ts=4 sw=4 et:
diff --git a/packages/templatetags/jinja2.py b/packages/templatetags/jinja2.py
index 22f9914b..88b59a96 100644
--- a/packages/templatetags/jinja2.py
+++ b/packages/templatetags/jinja2.py
@@ -68,5 +68,4 @@ def bug_report(package):
}
return link_encode(url, data)
-
# vim: set ts=4 sw=4 et:
diff --git a/templates/mirrors/url_details.html b/templates/mirrors/url_details.html
index 557a1b79..8b7646b8 100644
--- a/templates/mirrors/url_details.html
+++ b/templates/mirrors/url_details.html
@@ -1,5 +1,4 @@
{% extends "base.html" %}
-{% load cycle from future %}
{% load static from staticfiles %}
{% load mirror_status %}
{% load flags %}
@@ -57,34 +56,8 @@
{% endif %}
-
Check Logs
+ {% include "mirrors/url_details_logs.html.jinja" %}
-
-
-
- Check Time |
- Check Location |
- Check IP |
- Last Sync |
- Delay (hh:mm) |
- Duration (s) |
- Success? |
- Error Message |
-
-
-
- {% for log in logs %}
- {{ log.check_time|date:'Y-m-d H:i' }} |
- {% country_flag log.location.country %}{{ log.location.country.name }} |
- {{ log.location.source_ip }} |
- {{ log.last_sync|date:'Y-m-d H:i' }} |
- {{ log.delay|duration }} |
- {{ log.duration|floatvalue }} |
- {{ log.is_success|yesno|capfirst }} |
- {{ log.error|linebreaksbr }} |
-
{% endfor %}
-
-
{% endblock %}
diff --git a/templates/mirrors/url_details_logs.html.jinja b/templates/mirrors/url_details_logs.html.jinja
new file mode 100644
index 00000000..8f7c5644
--- /dev/null
+++ b/templates/mirrors/url_details_logs.html.jinja
@@ -0,0 +1,28 @@
+ Check Logs
+
+
+
+
+ Check Time |
+ Check Location |
+ Check IP |
+ Last Sync |
+ Delay (hh:mm) |
+ Duration (s) |
+ Success? |
+ Error Message |
+
+
+
+ {% for log in logs %}
+ {{ log.check_time|date('Y-m-d H:i') }} |
+ {{ country_flag(log.location.country) }}{{ log.location.country.name }} |
+ {{ log.location.source_ip }} |
+ {{ log.last_sync|date('Y-m-d H:i') }} |
+ {{ log.delay()|duration }} |
+ {{ log.duration|floatvalue }} |
+ {{ log.is_success|yesno|capfirst }} |
+ {{ log.error|linebreaksbr }} |
+
{% endfor %}
+
+
--
cgit v1.2.3-2-g168b
From 713ab837ba59c4a7c0b60cb8e8be4b27f4520e52 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 14:00:06 -0600
Subject: Convert mirror status tables to Jinja2
Yay for way improved performance. Local testing showed render times
going from 265 ms to 135 ms.
Signed-off-by: Dan McGee
---
mirrors/templatetags/jinja2.py | 22 ++++++++++++++++++++++
templates/mirrors/error_table.html | 24 ------------------------
templates/mirrors/error_table.html.jinja | 22 ++++++++++++++++++++++
templates/mirrors/mirror_details.html | 2 +-
templates/mirrors/status.html | 6 +++---
templates/mirrors/status_table.html | 30 ------------------------------
templates/mirrors/status_table.html.jinja | 28 ++++++++++++++++++++++++++++
7 files changed, 76 insertions(+), 58 deletions(-)
delete mode 100644 templates/mirrors/error_table.html
create mode 100644 templates/mirrors/error_table.html.jinja
delete mode 100644 templates/mirrors/status_table.html
create mode 100644 templates/mirrors/status_table.html.jinja
diff --git a/mirrors/templatetags/jinja2.py b/mirrors/templatetags/jinja2.py
index 5d47fe9b..04e50238 100644
--- a/mirrors/templatetags/jinja2.py
+++ b/mirrors/templatetags/jinja2.py
@@ -1,3 +1,4 @@
+from datetime import timedelta
from django_jinja import library
from markupsafe import Markup
@@ -22,10 +23,31 @@ def duration(value):
return '%d:%02d' % (hrs, mins)
+@library.filter
+def hours(value):
+ if not value and type(value) != timedelta:
+ return u''
+ # does not take microseconds into account
+ total_secs = value.seconds + value.days * 24 * 3600
+ mins = total_secs // 60
+ hrs, mins = divmod(mins, 60)
+ if hrs == 1:
+ return '%d hour' % hrs
+ return '%d hours' % hrs
+
+
@library.filter
def floatvalue(value, arg=2):
if value is None:
return u''
return '%.*f' % (arg, value)
+
+@library.filter
+def percentage(value, arg=1):
+ if not value and type(value) != float:
+ return u''
+ new_val = value * 100.0
+ return '%.*f%%' % (arg, new_val)
+
# vim: set ts=4 sw=4 et:
diff --git a/templates/mirrors/error_table.html b/templates/mirrors/error_table.html
deleted file mode 100644
index cd7265af..00000000
--- a/templates/mirrors/error_table.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{% load cycle from future %}
-{% load flags mirror_status %}
-
-
-
- Mirror URL |
- Protocol |
- Country |
- Error Message |
- Last Occurred |
- Occurrences (last {{ cutoff|hours }}) |
-
-
-
- {% for log in error_logs %}
- {{ log.url__url }} |
- {{ log.url__protocol__protocol }} |
- {% country_flag log.country %}{{ log.country.name }} |
- {{ log.error|linebreaksbr }} |
- {{ log.last_occurred|date:'Y-m-d H:i' }} |
- {{ log.error_count }} |
-
{% endfor %}
-
-
diff --git a/templates/mirrors/error_table.html.jinja b/templates/mirrors/error_table.html.jinja
new file mode 100644
index 00000000..52f68135
--- /dev/null
+++ b/templates/mirrors/error_table.html.jinja
@@ -0,0 +1,22 @@
+
+
+
+ Mirror URL |
+ Protocol |
+ Country |
+ Error Message |
+ Last Occurred |
+ Occurrences (last {{ cutoff|hours }}) |
+
+
+
+ {% for log in error_logs %}
+ {{ log.url__url }} |
+ {{ log.url__protocol__protocol }} |
+ {{ country_flag(log.country) }}{{ log.country.name }} |
+ {{ log.error|linebreaksbr }} |
+ {{ log.last_occurred|date('Y-m-d H:i') }} |
+ {{ log.error_count }} |
+
{% endfor %}
+
+
diff --git a/templates/mirrors/mirror_details.html b/templates/mirrors/mirror_details.html
index 2ff41828..e4ae55b4 100644
--- a/templates/mirrors/mirror_details.html
+++ b/templates/mirrors/mirror_details.html
@@ -132,7 +132,7 @@
Error Log
- {% include "mirrors/error_table.html" %}
+ {% include "mirrors/error_table.html.jinja" %}
diff --git a/templates/mirrors/status.html b/templates/mirrors/status.html
index 24408be7..530e3ff5 100644
--- a/templates/mirrors/status.html
+++ b/templates/mirrors/status.html
@@ -60,18 +60,18 @@
Out of Sync Mirrors
{% with urls=bad_urls table_id='outofsync_mirrors' %}
- {% include "mirrors/status_table.html" %}
+ {% include "mirrors/status_table.html.jinja" %}
{% endwith %}
Successfully Syncing Mirrors
{% with urls=good_urls table_id='successful_mirrors' %}
- {% include "mirrors/status_table.html" %}
+ {% include "mirrors/status_table.html.jinja" %}
{% endwith %}
Mirror Syncing Error Log
- {% include "mirrors/error_table.html" %}
+ {% include "mirrors/error_table.html.jinja" %}
{% endblock %}
diff --git a/templates/mirrors/status_table.html b/templates/mirrors/status_table.html
deleted file mode 100644
index 83538303..00000000
--- a/templates/mirrors/status_table.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% load cycle from future %}
-{% load flags mirror_status %}
-
-
-
- Mirror URL |
- Protocol |
- Country |
- Completion % |
- μ Delay (hh:mm) |
- μ Duration (s) |
- σ Duration (s) |
- Mirror Score |
- |
-
-
-
- {% for m_url in urls %}
- {{ m_url.url }} |
- {{ m_url.protocol }} |
- {% country_flag m_url.country %}{{ m_url.country.name }} |
- {{ m_url.completion_pct|percentage:1 }} |
- {{ m_url.delay|duration|default:'unknown' }} |
- {{ m_url.duration_avg|floatvalue:2 }} |
- {{ m_url.duration_stddev|floatvalue:2 }} |
- {{ m_url.score|floatvalue:1|default:'∞' }} |
- details |
-
{% endfor %}
-
-
diff --git a/templates/mirrors/status_table.html.jinja b/templates/mirrors/status_table.html.jinja
new file mode 100644
index 00000000..598a1af0
--- /dev/null
+++ b/templates/mirrors/status_table.html.jinja
@@ -0,0 +1,28 @@
+
+
+
+ Mirror URL |
+ Protocol |
+ Country |
+ Completion % |
+ μ Delay (hh:mm) |
+ μ Duration (s) |
+ σ Duration (s) |
+ Mirror Score |
+ |
+
+
+
+ {% for m_url in urls %}
+ {{ m_url.url }} |
+ {{ m_url.protocol }} |
+ {{ country_flag(m_url.country) }}{{ m_url.country.name }} |
+ {{ m_url.completion_pct|percentage(1) }} |
+ {{ m_url.delay|duration|default('unknown') }} |
+ {{ m_url.duration_avg|floatvalue(2) }} |
+ {{ m_url.duration_stddev|floatvalue(2) }} |
+ {{ m_url.score|floatvalue(1)|default('∞') }} |
+ details |
+
{% endfor %}
+
+
--
cgit v1.2.3-2-g168b
From 122273496a24c4608de776978b1b449d9c6cde09 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 14:04:31 -0600
Subject: Make delay a property, not a function
And re-indent the URL details log template now that we've broken it out.
Signed-off-by: Dan McGee
---
mirrors/models.py | 1 +
templates/mirrors/url_details_logs.html.jinja | 54 +++++++++++++--------------
2 files changed, 28 insertions(+), 27 deletions(-)
diff --git a/mirrors/models.py b/mirrors/models.py
index 820f3328..9743d177 100644
--- a/mirrors/models.py
+++ b/mirrors/models.py
@@ -165,6 +165,7 @@ class MirrorLog(models.Model):
is_success = models.BooleanField(default=True)
error = models.TextField(blank=True, default='')
+ @property
def delay(self):
if self.last_sync is None:
return None
diff --git a/templates/mirrors/url_details_logs.html.jinja b/templates/mirrors/url_details_logs.html.jinja
index 8f7c5644..09742f76 100644
--- a/templates/mirrors/url_details_logs.html.jinja
+++ b/templates/mirrors/url_details_logs.html.jinja
@@ -1,28 +1,28 @@
- Check Logs
+Check Logs
-
-
-
- Check Time |
- Check Location |
- Check IP |
- Last Sync |
- Delay (hh:mm) |
- Duration (s) |
- Success? |
- Error Message |
-
-
-
- {% for log in logs %}
- {{ log.check_time|date('Y-m-d H:i') }} |
- {{ country_flag(log.location.country) }}{{ log.location.country.name }} |
- {{ log.location.source_ip }} |
- {{ log.last_sync|date('Y-m-d H:i') }} |
- {{ log.delay()|duration }} |
- {{ log.duration|floatvalue }} |
- {{ log.is_success|yesno|capfirst }} |
- {{ log.error|linebreaksbr }} |
-
{% endfor %}
-
-
+
+
+
+ Check Time |
+ Check Location |
+ Check IP |
+ Last Sync |
+ Delay (hh:mm) |
+ Duration (s) |
+ Success? |
+ Error Message |
+
+
+
+ {% for log in logs %}
+ {{ log.check_time|date('Y-m-d H:i') }} |
+ {{ country_flag(log.location.country) }}{{ log.location.country.name }} |
+ {{ log.location.source_ip }} |
+ {{ log.last_sync|date('Y-m-d H:i') }} |
+ {{ log.delay|duration }} |
+ {{ log.duration|floatvalue }} |
+ {{ log.is_success|yesno|capfirst }} |
+ {{ log.error|linebreaksbr }} |
+
{% endfor %}
+
+
--
cgit v1.2.3-2-g168b
From 886d2934ec672e0d4533f73e8b38248fdff9a6d5 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 14:12:32 -0600
Subject: Break out available URLs into Jinja2 template
Signed-off-by: Dan McGee
---
templates/mirrors/mirror_details.html | 38 +-----------------------
templates/mirrors/mirror_details_urls.html.jinja | 36 ++++++++++++++++++++++
templates/mirrors/url_details.html | 2 +-
templates/mirrors/url_details_logs.html.jinja | 2 --
4 files changed, 38 insertions(+), 40 deletions(-)
create mode 100644 templates/mirrors/mirror_details_urls.html.jinja
diff --git a/templates/mirrors/mirror_details.html b/templates/mirrors/mirror_details.html
index e4ae55b4..64009380 100644
--- a/templates/mirrors/mirror_details.html
+++ b/templates/mirrors/mirror_details.html
@@ -93,43 +93,7 @@
Available URLs
-
-
-
-
- Mirror URL |
- Protocol |
- Country |
- IPv4 |
- IPv6 |
- Last Sync |
- Completion % |
- μ Delay (hh:mm) |
- μ Duration (s) |
- σ Duration (s) |
- Score |
- Details |
-
-
-
- {% for m_url in urls %}
-
- {% if m_url.protocol.is_download %}{{ m_url.url }}{% else %}{{ m_url.url }}{% endif %} |
- {{ m_url.protocol }} |
- {% country_flag m_url.country %}{{ m_url.country.name }} |
- {{ m_url.has_ipv4|yesno|capfirst }} |
- {{ m_url.has_ipv6|yesno|capfirst }} |
- {{ m_url.last_sync|date:'Y-m-d H:i'|default:'unknown' }} |
- {{ m_url.completion_pct|percentage:1 }} |
- {{ m_url.delay|duration|default:'unknown' }} |
- {{ m_url.duration_avg|floatvalue:2 }} |
- {{ m_url.duration_stddev|floatvalue:2 }} |
- {{ m_url.score|floatvalue:1|default:'∞' }} |
- Details |
-
- {% endfor %}
-
-
+ {% include "mirrors/mirror_details_urls.html.jinja" %}
Error Log
{% include "mirrors/error_table.html.jinja" %}
diff --git a/templates/mirrors/mirror_details_urls.html.jinja b/templates/mirrors/mirror_details_urls.html.jinja
new file mode 100644
index 00000000..7ab1548b
--- /dev/null
+++ b/templates/mirrors/mirror_details_urls.html.jinja
@@ -0,0 +1,36 @@
+
+
+
+ Mirror URL |
+ Protocol |
+ Country |
+ IPv4 |
+ IPv6 |
+ Last Sync |
+ Completion % |
+ μ Delay (hh:mm) |
+ μ Duration (s) |
+ σ Duration (s) |
+ Score |
+ Details |
+
+
+
+ {% for m_url in urls %}
+
+ {% if m_url.protocol.is_download %}{{ m_url.url }}{% else %}{{ m_url.url }}{% endif %} |
+ {{ m_url.protocol }} |
+ {{ country_flag(m_url.country) }}{{ m_url.country.name }} |
+ {{ m_url.has_ipv4|yesno|capfirst }} |
+ {{ m_url.has_ipv6|yesno|capfirst }} |
+ {{ m_url.last_sync|date('Y-m-d H:i')|default('unknown') }} |
+ {{ m_url.completion_pct|percentage(1) }} |
+ {{ m_url.delay|duration|default('unknown') }} |
+ {{ m_url.duration_avg|floatvalue(2) }} |
+ {{ m_url.duration_stddev|floatvalue(2) }} |
+ {{ m_url.score|floatvalue(1)|default('∞') }} |
+ Details |
+
+ {% endfor %}
+
+
diff --git a/templates/mirrors/url_details.html b/templates/mirrors/url_details.html
index 8b7646b8..b61033cd 100644
--- a/templates/mirrors/url_details.html
+++ b/templates/mirrors/url_details.html
@@ -56,8 +56,8 @@
{% endif %}
+ Check Logs
{% include "mirrors/url_details_logs.html.jinja" %}
-
{% endblock %}
diff --git a/templates/mirrors/url_details_logs.html.jinja b/templates/mirrors/url_details_logs.html.jinja
index 09742f76..58f179d8 100644
--- a/templates/mirrors/url_details_logs.html.jinja
+++ b/templates/mirrors/url_details_logs.html.jinja
@@ -1,5 +1,3 @@
-Check Logs
-
--
cgit v1.2.3-2-g168b
From 1a35cbe842212d674d83196ecfa70569ffe2e2da Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 14:15:11 -0600
Subject: Remove percentage filter from Django templates filters
Signed-off-by: Dan McGee
---
mirrors/templatetags/mirror_status.py | 7 -------
1 file changed, 7 deletions(-)
diff --git a/mirrors/templatetags/mirror_status.py b/mirrors/templatetags/mirror_status.py
index b3810d9a..c8004e4b 100644
--- a/mirrors/templatetags/mirror_status.py
+++ b/mirrors/templatetags/mirror_status.py
@@ -31,11 +31,4 @@ def floatvalue(value, arg=2):
return u''
return '%.*f' % (arg, value)
-@register.filter
-def percentage(value, arg=1):
- if not value and type(value) != float:
- return u''
- new_val = value * 100.0
- return '%.*f%%' % (arg, new_val)
-
# vim: set ts=4 sw=4 et:
--
cgit v1.2.3-2-g168b
From a3015ba8429a09878ed6c35d7c7c76a882de7dcf Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 15:52:18 -0600
Subject: Override default sitemap.xml template
The Django one uses the spaceless tag, which isn't all that useful when
we are gzipping the response anyway. Remove it to make generation a tad
faster.
Signed-off-by: Dan McGee
---
templates/sitemaps/sitemap.xml | 9 +++++++++
urls.py | 2 +-
2 files changed, 10 insertions(+), 1 deletion(-)
create mode 100644 templates/sitemaps/sitemap.xml
diff --git a/templates/sitemaps/sitemap.xml b/templates/sitemaps/sitemap.xml
new file mode 100644
index 00000000..50a95237
--- /dev/null
+++ b/templates/sitemaps/sitemap.xml
@@ -0,0 +1,9 @@
+
+
+{% for url in urlset %}
+{{ url.location }}
+{% if url.lastmod %}{{ url.lastmod|date:"Y-m-d" }}{% endif %}
+{% if url.changefreq %}{{ url.changefreq }}{% endif %}
+{% if url.priority %}{{ url.priority }}{% endif %}
+{% endfor %}
+
diff --git a/urls.py b/urls.py
index 518e88e7..2d174012 100644
--- a/urls.py
+++ b/urls.py
@@ -81,7 +81,7 @@ urlpatterns += patterns('',
{'sitemaps': our_sitemaps, 'sitemap_url_name': 'sitemaps'}),
(r'^sitemap-(?P.+)\.xml$',
cache_page(1831)(sitemap_views.sitemap),
- {'sitemaps': our_sitemaps}, 'sitemaps'),
+ {'sitemaps': our_sitemaps, 'template_name': 'sitemaps/sitemap.xml'}, 'sitemaps'),
)
# Authentication / Admin
--
cgit v1.2.3-2-g168b
From 4c5b478543184ea395e0e692d3bcf666fb7513ad Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 15:58:26 -0600
Subject: Convert sitemap.xml template to Jinja2
Signed-off-by: Dan McGee
---
templates/sitemaps/sitemap.xml | 9 ---------
templates/sitemaps/sitemap.xml.jinja | 9 +++++++++
urls.py | 2 +-
3 files changed, 10 insertions(+), 10 deletions(-)
delete mode 100644 templates/sitemaps/sitemap.xml
create mode 100644 templates/sitemaps/sitemap.xml.jinja
diff --git a/templates/sitemaps/sitemap.xml b/templates/sitemaps/sitemap.xml
deleted file mode 100644
index 50a95237..00000000
--- a/templates/sitemaps/sitemap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-{% for url in urlset %}
-{{ url.location }}
-{% if url.lastmod %}{{ url.lastmod|date:"Y-m-d" }}{% endif %}
-{% if url.changefreq %}{{ url.changefreq }}{% endif %}
-{% if url.priority %}{{ url.priority }}{% endif %}
-{% endfor %}
-
diff --git a/templates/sitemaps/sitemap.xml.jinja b/templates/sitemaps/sitemap.xml.jinja
new file mode 100644
index 00000000..0808a7de
--- /dev/null
+++ b/templates/sitemaps/sitemap.xml.jinja
@@ -0,0 +1,9 @@
+
+
+{% for url in urlset %}
+{{ url.location }}
+{% if url.lastmod %}{{ url.lastmod|date("Y-m-d") }}{% endif %}
+{% if url.changefreq %}{{ url.changefreq }}{% endif %}
+{% if url.priority %}{{ url.priority }}{% endif %}
+{% endfor %}
+
diff --git a/urls.py b/urls.py
index 2d174012..6d896b3c 100644
--- a/urls.py
+++ b/urls.py
@@ -81,7 +81,7 @@ urlpatterns += patterns('',
{'sitemaps': our_sitemaps, 'sitemap_url_name': 'sitemaps'}),
(r'^sitemap-(?P.+)\.xml$',
cache_page(1831)(sitemap_views.sitemap),
- {'sitemaps': our_sitemaps, 'template_name': 'sitemaps/sitemap.xml'}, 'sitemaps'),
+ {'sitemaps': our_sitemaps, 'template_name': 'sitemaps/sitemap.xml.jinja'}, 'sitemaps'),
)
# Authentication / Admin
--
cgit v1.2.3-2-g168b
From 96a7614285325b693434f3fd011238000d75926d Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 16:31:38 -0600
Subject: Add a news-specific sitemap
This follows the spec at
https://support.google.com/news/publisher/answer/74288?hl=en#tagdefinitions
Signed-off-by: Dan McGee
---
sitemaps.py | 7 +++++++
templates/sitemaps/news_sitemap.xml.jinja | 14 ++++++++++++++
urls.py | 9 ++++++++-
3 files changed, 29 insertions(+), 1 deletion(-)
create mode 100644 templates/sitemaps/news_sitemap.xml.jinja
diff --git a/sitemaps.py b/sitemaps.py
index eb4e05d9..fb81357e 100644
--- a/sitemaps.py
+++ b/sitemaps.py
@@ -98,6 +98,13 @@ class NewsSitemap(Sitemap):
return 'yearly'
+class RecentNewsSitemap(NewsSitemap):
+ def items(self):
+ now = datetime.utcnow().replace(tzinfo=utc)
+ cutoff = now - timedelta(days=30)
+ return super(RecentNewsSitemap, self).items().filter(postdate__gte=cutoff)
+
+
class ReleasesSitemap(Sitemap):
changefreq = "monthly"
diff --git a/templates/sitemaps/news_sitemap.xml.jinja b/templates/sitemaps/news_sitemap.xml.jinja
new file mode 100644
index 00000000..97dd17b5
--- /dev/null
+++ b/templates/sitemaps/news_sitemap.xml.jinja
@@ -0,0 +1,14 @@
+
+
+{% for url in urlset %}
+{{ url.location }}
+{% if url.lastmod %}{{ url.lastmod|date("Y-m-d") }}{% endif %}
+{% if url.changefreq %}{{ url.changefreq }}{% endif %}
+{% if url.priority %}{{ url.priority }}{% endif %}
+
+ Arch Linux Newsen
+ {% if url.item.postdate %}{{ url.item.postdate|date("c") }}{% endif %}
+ {% if url.item.title %}{{ url.item.title }}{% endif %}
+
+{% endfor %}
+
diff --git a/urls.py b/urls.py
index 6d896b3c..c35baedf 100644
--- a/urls.py
+++ b/urls.py
@@ -18,6 +18,8 @@ our_sitemaps = {
'releases': sitemaps.ReleasesSitemap,
}
+news_sitemaps = { 'news': sitemaps.RecentNewsSitemap }
+
urlpatterns = []
# Public pages
@@ -81,7 +83,12 @@ urlpatterns += patterns('',
{'sitemaps': our_sitemaps, 'sitemap_url_name': 'sitemaps'}),
(r'^sitemap-(?P.+)\.xml$',
cache_page(1831)(sitemap_views.sitemap),
- {'sitemaps': our_sitemaps, 'template_name': 'sitemaps/sitemap.xml.jinja'}, 'sitemaps'),
+ {'sitemaps': our_sitemaps, 'template_name': 'sitemaps/sitemap.xml.jinja'},
+ 'sitemaps'),
+ (r'^news-sitemap\.xml$',
+ cache_page(1831)(sitemap_views.sitemap),
+ {'sitemaps': news_sitemaps, 'template_name': 'sitemaps/news_sitemap.xml.jinja'},
+ 'news-sitemap'),
)
# Authentication / Admin
--
cgit v1.2.3-2-g168b
From 88a457f1c8ae057278f1a7cadb6c163183484019 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 19:14:32 -0600
Subject: Minor news listing tweaks
Signed-off-by: Dan McGee
---
news/urls.py | 3 +--
templates/news/list.html | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/news/urls.py b/news/urls.py
index 0eec6d86..c13722d4 100644
--- a/news/urls.py
+++ b/news/urls.py
@@ -5,8 +5,7 @@ from .views import (NewsDetailView, NewsListView,
urlpatterns = patterns('news.views',
- (r'^$',
- NewsListView.as_view(), {}, 'news-list'),
+ (r'^$', NewsListView.as_view(), {}, 'news-list'),
(r'^preview/$', 'preview'),
# old news URLs, permanent redirect view so we don't break all links
diff --git a/templates/news/list.html b/templates/news/list.html
index 4acbc7e9..71cd3d02 100644
--- a/templates/news/list.html
+++ b/templates/news/list.html
@@ -10,7 +10,7 @@
{% block content %}
-
News Archives
+
Arch Linux News Archives
{% if perms.news.add_news %}
{% include "news/paginator.html" %}
-
{% endblock %}
--
cgit v1.2.3-2-g168b
From 327bd4cfc599dbeddd501afd5221a1d2ff7eee08 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 19:15:35 -0600
Subject: Paginate the todolist listing page
Signed-off-by: Dan McGee
---
sitestatic/archweb.css | 11 +++++++++++
templates/todolists/list.html | 7 ++++++-
todolists/urls.py | 6 +++---
todolists/views.py | 13 ++++++++-----
4 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/sitestatic/archweb.css b/sitestatic/archweb.css
index edabcfb7..cd46e4c0 100644
--- a/sitestatic/archweb.css
+++ b/sitestatic/archweb.css
@@ -655,6 +655,17 @@ div.news-article .article-info {
width: 75%;
}
+/* todolists: list */
+.todolist-nav {
+ float: right;
+ margin-top: -2.2em;
+}
+
+ .todolist-nav .prev,
+ .todolist-nav .next {
+ margin: 0 1em;
+ }
+
/* donate: donor list */
#donor-list ul {
width: 100%;
diff --git a/templates/todolists/list.html b/templates/todolists/list.html
index 7f0368de..983a49f0 100644
--- a/templates/todolists/list.html
+++ b/templates/todolists/list.html
@@ -16,7 +16,10 @@
Todo lists are used by the developers when a rebuild of a set of
packages is needed. This is common when a library has a version bump,
during a toolchain rebuild, or a general cleanup of packages in the
- repositories. The progress can be tracked here.
+ repositories. The progress can be tracked here, and completed todo lists
+ can be browsed as well.
+
+ {% include "todolists/paginator.html" %}
@@ -46,6 +49,8 @@
{% endfor %}
+
+ {% include "todolists/paginator.html" %}
{% endblock %}
diff --git a/todolists/urls.py b/todolists/urls.py
index 6617d7dd..ed065f50 100644
--- a/todolists/urls.py
+++ b/todolists/urls.py
@@ -1,11 +1,11 @@
from django.conf.urls import patterns
from django.contrib.auth.decorators import permission_required
-from .views import (view_redirect, view, todolist_list, add, edit, flag,
- list_pkgbases, DeleteTodolist)
+from .views import (view_redirect, view, add, edit, flag,
+ list_pkgbases, DeleteTodolist, TodolistListView)
urlpatterns = patterns('',
- (r'^$', todolist_list),
+ (r'^$', TodolistListView.as_view(), {}, 'todolist-list'),
# old todolists URLs, permanent redirect view so we don't break all links
(r'^(?P\d+)/$', view_redirect),
diff --git a/todolists/views.py b/todolists/views.py
index c37c13f5..c781a562 100644
--- a/todolists/views.py
+++ b/todolists/views.py
@@ -7,7 +7,7 @@ from django.shortcuts import (get_list_or_404, get_object_or_404,
redirect, render)
from django.db import transaction
from django.views.decorators.cache import never_cache
-from django.views.generic import DeleteView
+from django.views.generic import DeleteView, ListView
from django.template import Context, loader
from django.utils.timezone import now
@@ -91,10 +91,13 @@ def list_pkgbases(request, slug, svn_root):
return HttpResponse('\n'.join(pkgbases), content_type='text/plain')
-def todolist_list(request):
- incomplete_only = request.user.is_anonymous()
- lists = get_annotated_todolists(incomplete_only)
- return render(request, 'todolists/list.html', {'lists': lists})
+class TodolistListView(ListView):
+ context_object_name = "lists"
+ template_name = "todolists/list.html"
+ paginate_by = 50
+
+ def get_queryset(self):
+ return get_annotated_todolists()
@never_cache
--
cgit v1.2.3-2-g168b
From b1aa075652f89efa4f1af9d62c214e93fd453001 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 19:26:51 -0600
Subject: Add a todolists sitemap
Signed-off-by: Dan McGee
---
sitemaps.py | 22 +++++++++++++++++++++-
urls.py | 1 +
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/sitemaps.py b/sitemaps.py
index fb81357e..03ad9254 100644
--- a/sitemaps.py
+++ b/sitemaps.py
@@ -8,6 +8,7 @@ from main.models import Package
from news.models import News
from packages.utils import get_group_info, get_split_packages_info
from releng.models import Release
+from todolists.models import Todolist
class PackagesSitemap(Sitemap):
@@ -112,7 +113,7 @@ class ReleasesSitemap(Sitemap):
return Release.objects.all().defer('info', 'torrent_data').order_by()
def lastmod(self, obj):
- return obj.created
+ return obj.last_modified
def priority(self, obj):
if obj.available:
@@ -120,6 +121,25 @@ class ReleasesSitemap(Sitemap):
return "0.2"
+class TodolistSitemap(Sitemap):
+ priority = "0.4"
+
+ def __init__(self):
+ now = datetime.utcnow().replace(tzinfo=utc)
+ self.two_weeks_ago = now - timedelta(days=14)
+
+ def items(self):
+ return Todolist.objects.all().defer('raw').order_by()
+
+ def lastmod(self, obj):
+ return obj.last_modified
+
+ def changefreq(self, obj):
+ if obj.last_modified > self.two_weeks_ago:
+ return 'weekly'
+ return 'monthly'
+
+
class BaseSitemap(Sitemap):
DEFAULT_PRIORITY = 0.7
diff --git a/urls.py b/urls.py
index c35baedf..36e3fef1 100644
--- a/urls.py
+++ b/urls.py
@@ -16,6 +16,7 @@ our_sitemaps = {
'package-groups': sitemaps.PackageGroupsSitemap,
'split-packages': sitemaps.SplitPackagesSitemap,
'releases': sitemaps.ReleasesSitemap,
+ 'todolists': sitemaps.TodolistSitemap,
}
news_sitemaps = { 'news': sitemaps.RecentNewsSitemap }
--
cgit v1.2.3-2-g168b
From e5fc7cd53f6082f2911bc6c8cf8ea4f4ca4addc8 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Sat, 8 Nov 2014 19:41:21 -0600
Subject: Add paginator template for todolists
Signed-off-by: Dan McGee
---
templates/todolists/paginator.html | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 templates/todolists/paginator.html
diff --git a/templates/todolists/paginator.html b/templates/todolists/paginator.html
new file mode 100644
index 00000000..3b077419
--- /dev/null
+++ b/templates/todolists/paginator.html
@@ -0,0 +1,22 @@
+{% if is_paginated %}
+
+{% endif %}
--
cgit v1.2.3-2-g168b
From c904c093693c49436a0d5cedd23b4fd4b8b70438 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Mon, 1 Dec 2014 22:40:34 -0600
Subject: Update to latest django-jinja release
Signed-off-by: Dan McGee
---
requirements.txt | 2 +-
requirements_prod.txt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/requirements.txt b/requirements.txt
index e1acd2e9..473535b6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,7 +4,7 @@ IPy==0.81
Jinja2==2.7.3
Markdown==2.4.1
bencode==1.0
-django-jinja==1.0.4
+django-jinja==1.0.5
django_countries==3.0.1
jsmin==2.0.11
pgpdump==1.5
diff --git a/requirements_prod.txt b/requirements_prod.txt
index ef535eb8..bb7567f3 100644
--- a/requirements_prod.txt
+++ b/requirements_prod.txt
@@ -4,7 +4,7 @@ IPy==0.81
Jinja2==2.7.3
Markdown==2.4.1
bencode==1.0
-django-jinja==1.0.4
+django-jinja==1.0.5
django_countries==3.0.1
jsmin==2.0.11
pgpdump==1.5
--
cgit v1.2.3-2-g168b
From e12f88f1d6ab15dd4fbd828f4c2689657bcfa5a2 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Tue, 2 Dec 2014 14:48:16 -0600
Subject: Fix filtering of minor versions on differences page
This has been broken for a long time; looks like it happened when we
switched over to using our standard details tag and no longer emit a
element unconditionally.
Signed-off-by: Dan McGee
---
sitestatic/archweb.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sitestatic/archweb.js b/sitestatic/archweb.js
index 0c4059a9..5f6e5e97 100644
--- a/sitestatic/archweb.js
+++ b/sitestatic/archweb.js
@@ -283,12 +283,12 @@ function filter_packages() {
var cells = $(this).children('td');
/* all this just to get the split version out of the table cell */
- var ver_a = cells.eq(2).find('span').text().match(pat);
+ var ver_a = cells.eq(2).text().match(pat);
if (!ver_a) {
return true;
}
- var ver_b = cells.eq(3).find('span').text().match(pat);
+ var ver_b = cells.eq(3).text().match(pat);
if (!ver_b) {
return true;
}
--
cgit v1.2.3-2-g168b
From dca00e7aabc057d0069606fec6261cc571ddcb71 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Tue, 2 Dec 2014 14:53:38 -0600
Subject: Filter maintainer list on packages page by allowed repos
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
We do this elsewhere on the master keys page, so do the same thing here.
Noticed-by: Johannes Löthberg
Signed-off-by: Dan McGee
---
packages/views/search.py | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/packages/views/search.py b/packages/views/search.py
index 0b776d79..e4cd0423 100644
--- a/packages/views/search.py
+++ b/packages/views/search.py
@@ -6,6 +6,7 @@ from django.db.models import Q
from django.http import HttpResponse
from django.views.generic import ListView
+from devel.models import UserProfile
from main.models import Package, Arch, Repo
from main.utils import empty_response, make_choice
from ..models import PackageRelation
@@ -36,14 +37,16 @@ class PackageSearchForm(forms.Form):
self.fields['arch'].choices = make_choice(
[arch.name for arch in Arch.objects.all()])
self.fields['q'].widget.attrs.update({"size": "30"})
- maints = User.objects.filter(is_active=True).order_by(
+
+ profile_ids = UserProfile.allowed_repos.through.objects.values('userprofile_id')
+ people = User.objects.filter(
+ is_active=True, userprofile__id__in=profile_ids).order_by(
'first_name', 'last_name')
- self.fields['maintainer'].choices = \
- [('', 'All'), ('orphan', 'Orphan')] + \
- [(m.username, m.get_full_name()) for m in maints]
- self.fields['packager'].choices = \
- [('', 'All'), ('unknown', 'Unknown')] + \
- [(m.username, m.get_full_name()) for m in maints]
+ people = [('', 'All'), ('orphan', 'Orphan')] + \
+ [(p.username, p.get_full_name()) for p in people]
+
+ self.fields['maintainer'].choices = people
+ self.fields['packager'].choices = people
def exact_matches(self):
# only do exact match search if 'q' is sole parameter
--
cgit v1.2.3-2-g168b
From 92437ffb21b42c5e2b58af496448f64e8292442b Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Tue, 2 Dec 2014 15:11:58 -0600
Subject: Filter maintainer list on developer dashboard
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Thank Johannes for this one. Only reason I didn't take his patches is
for consistency with the way we were already doing this on the master
keys page.
Noticed-by: Johannes Löthberg
Signed-off-by: Dan McGee
---
devel/utils.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/devel/utils.py b/devel/utils.py
index 0cafbb59..68ae5bdc 100644
--- a/devel/utils.py
+++ b/devel/utils.py
@@ -5,13 +5,16 @@ from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.db import connection
from django.db.models import Count, Q
+from devel.models import UserProfile
from main.utils import cache_function
from main.models import Package
from packages.models import PackageRelation
@cache_function(283)
def get_annotated_maintainers():
- maintainers = User.objects.filter(is_active=True).order_by(
+ profile_ids = UserProfile.allowed_repos.through.objects.values('userprofile_id')
+ maintainers = User.objects.filter(
+ is_active=True, userprofile__id__in=profile_ids).order_by(
'first_name', 'last_name')
# annotate the maintainers with # of maintained and flagged packages
--
cgit v1.2.3-2-g168b
From 0fc409ef089ed35f545d0f9fdef53f42bbe5be50 Mon Sep 17 00:00:00 2001
From: Dan McGee
Date: Tue, 2 Dec 2014 15:13:24 -0600
Subject: Make dev stats section look better when loading
Signed-off-by: Dan McGee
---
templates/devel/index.html | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/templates/devel/index.html b/templates/devel/index.html
index 147917a0..e9330734 100644
--- a/templates/devel/index.html
+++ b/templates/devel/index.html
@@ -157,8 +157,11 @@
{# #dev-dashboard #}
-
-
Enable Javascript to get more useful info here.
+
+
+
Developer Stats
+
Enable JavaScript to get more useful info here.
+
{% endblock %}
@@ -167,8 +170,12 @@