Opened 13 years ago
Last modified 9 years ago
#10079 new defect
improper rendering of svn:externals when not configured — at Initial Version
Reported by: | anonymous | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | undecided |
Component: | version control/browser | Version: | |
Severity: | normal | Keywords: | svn:externals |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
Some people do not (or can not) configure all of their svn:external properties to really point to some http:// url. So when trac.ini has no svn:externals section the entry
foo svn://svnserver/path/to/whatever
will be just rendered as
- foo
and nothing else. This is pretty annoying, and I have modified my trac to display in that case the complete line from the externals entry, so if you are intrested, here is my _render_externals function (modified against 0.12.2)
def _render_externals(self, prop): if not self._externals_map: for dummykey, value in self.config.options('svn:externals'): value = value.split() if len(value) != 2: self.log.warn("svn:externals entry %s doesn't contain " "a space-separated key value pair, skipping.", dummykey) continue key, value = value self._externals_map[key] = value.replace('%', '%%') \ .replace('$path', '%(path)s') \ .replace('$rev', '%(rev)s') externals = [] for external in prop.splitlines(): elements = external.split() if not elements: continue localpath, rev, url = elements[0], '', elements[-1] if localpath.startswith('#'): externals.append((external, None, None, None, None,None)) continue if len(elements) == 3: rev = elements[1] rev = rev.replace('-r', '') # retrieve a matching entry in the externals map prefix = [] base_url = url while base_url: if base_url in self._externals_map or base_url == u'/': break base_url, pref = posixpath.split(base_url) prefix.append(pref) href = self._externals_map.get(base_url) revstr = rev and ' at revision '+rev or '' if not href and (url.startswith('http://') or url.startswith('https://')): href = url.replace('%', '%%') if href: remotepath = '' if prefix: remotepath = posixpath.join(*reversed(prefix)) externals.append((localpath, revstr, base_url, remotepath, href % {'path': remotepath, 'rev': rev},external)) else: externals.append((localpath, revstr, url, None, None,external)) externals_data = [] for localpath, rev, url, remotepath, href, external in externals: label = localpath if url is None: title = '' elif href: if url: url = ' in ' + url label += rev + url title = ''.join((remotepath, rev, url)) else: label = external title = _('No svn:externals configured in trac.ini') externals_data.append((label, href, title)) return tag.ul([tag.li(tag.a(label, href=href, title=title)) for label, href, title in externals_data])
Note:
See TracTickets
for help on using tickets.