From 93b161c23ea90f2dd9f7329a1afac51e23ebe3aa Mon Sep 17 00:00:00 2001 From: Eric Sunshine Date: Wed, 31 Dec 2014 04:50:08 -0500 Subject: views: fix broken URLs involving hierarchical branch names Git branch names can be hierarchical (for example, "wip/parser/fix"), however, git-arr does not take this into account when formulating URLs on branch, tree, and blobs pages. These URLs are dysfunctional because it is assumed incorrectly that a single "../" is sufficient to climb over the branch name when computing relative paths to resources higher in the hierarchy. This problem manifests as failure to load static resources (stylesheet, etc.), broken links to commits on branch pages, and malfunctioning breadcrumb trails. Fix this problem by computing the the proper number of "../" based upon the branch name, rather than assuming that a single "../" will work unconditionally. (This is analogous to the treatment already given to hierarchical pathnames in tree and blob views.) Signed-off-by: Eric Sunshine Signed-off-by: Alberto Bertogli --- views/blob.html | 13 +++++++------ views/branch.html | 11 +++++++---- views/tree.html | 13 +++++++------ 3 files changed, 21 insertions(+), 16 deletions(-) (limited to 'views') diff --git a/views/blob.html b/views/blob.html index 6e493ab..e44ff99 100644 --- a/views/blob.html +++ b/views/blob.html @@ -4,10 +4,11 @@ % if not dirname.raw: -% relroot = './' +% reltree = './' % else: -% relroot = '../' * (len(dirname.split('/')) - 1) +% reltree = '../' * (len(dirname.split('/')) - 1) % end +% relroot = reltree + '../' * (len(repo.branch.split('/')) - 1) git » {{repo.name}} » {{repo.branch}} » {{dirname.unicode}}/{{fname.unicode}} @@ -21,13 +22,13 @@

git » {{repo.name}} » - {{repo.branch}} » - tree + {{repo.branch}} » + tree

- [{{repo.branch}}] / -% base = smstr(relroot) + [{{repo.branch}}] / +% base = smstr(reltree) % for c in dirname.split('/'): % if not c.raw: % continue diff --git a/views/branch.html b/views/branch.html index 1cc011d..0d3e891 100644 --- a/views/branch.html +++ b/views/branch.html @@ -2,14 +2,17 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +% relroot = '../' * (len(repo.branch.split('/')) - 1) + git » {{repo.name}} » {{repo.branch}} - + -

git » - {{repo.name}} » +

git » + {{repo.name}} » {{repo.branch}}

@@ -35,7 +38,7 @@ % include paginate more = more, offset = offset % kwargs = dict(repo=repo, commits=commits, -% shorten=shorten, repo_root="../..") +% shorten=shorten, repo_root=relroot + "../..") % include commit-list **kwargs

diff --git a/views/tree.html b/views/tree.html index 5edacb8..f983b75 100644 --- a/views/tree.html +++ b/views/tree.html @@ -4,10 +4,11 @@ % if not dirname.raw: -% relroot = './' +% reltree = './' % else: -% relroot = '../' * (len(dirname.split('/')) - 1) +% reltree = '../' * (len(dirname.split('/')) - 1) % end +% relroot = reltree + '../' * (len(repo.branch.split('/')) - 1) git » {{repo.name}} » {{repo.branch}} » {{dirname.unicode}} @@ -19,13 +20,13 @@

git » {{repo.name}} » - {{repo.branch}} » - tree + {{repo.branch}} » + tree

- [{{repo.branch}}] / -% base = smstr(relroot) + [{{repo.branch}}] / +% base = smstr(reltree) % for c in dirname.split('/'): % if not c.raw: % continue -- cgit v1.2.3