# Path: spline/lib/helpers.py
# def static_uri(plugin_name, path, **url_kwargs):
# def sanitize_id(text):
# def h1(title, id=None, tag='h1', **attrs):
# def h2(title, id=None, **attrs):
# def timedelta_seconds(delta):
# def keysort(d, key):
# def get_translator(get_i18n, c):


from collections import namedtuple
from subprocess import PIPE
from urllib2 import URLError
from pylons import cache
from spline.lib import helpers
import datetime
import re
import subprocess
import feedparser
import lxml.html
                'for-each-ref',
                '--format=%(taggerdate:raw)',
                'refs/tags/' + tag,
            ]
            tag_timestamp, _ = subprocess.Popen(args, stdout=PIPE).communicate()
            tag_unixtime, tag_timezone = tag_timestamp.split(None, 1)
            tagged_timestamp = datetime.datetime.fromtimestamp(int(tag_unixtime))

            if max_age and tagged_timestamp < max_age:
                break

            commits = []

            for repo_path, repo_name in zip(self.repo_paths, self.repo_names):
                # Grab an easily-parsed history: fields delimited by nulls.
                # Hash, author's name, commit timestamp, subject.
                git_log_args = [
                    'git',
                    '--git-dir=' + repo_path,
                    'log',
                    '--pretty=%h%x00%an%x00%aE%x00%at%x00%s',
                    "{0}..{1}".format(since_tag, tag),
                ]
                proc = subprocess.Popen(git_log_args, stdout=PIPE)
                for line in proc.stdout:
                    hash, author, email, time, subject \
                        = line.strip().decode('utf8').split('\x00')

                    # Convert bug numbers in subject to URLs
                    if self.bug_tracker:

# Path: spline/lib/helpers.py
# def static_uri(plugin_name, path, **url_kwargs):
# def sanitize_id(text):
# def h1(title, id=None, tag='h1', **attrs):
# def h2(title, id=None, **attrs):
# def timedelta_seconds(delta):
# def keysort(d, key):
# def get_translator(get_i18n, c):


# Path: splinext/frontpage/sources.py
from collections import namedtuple
from subprocess import PIPE
from urllib2 import URLError
from pylons import cache
from spline.lib import helpers
import datetime
import re
import subprocess
import feedparser
import lxml.html

                'for-each-ref',
                '--format=%(taggerdate:raw)',
                'refs/tags/' + tag,
            ]
            tag_timestamp, _ = subprocess.Popen(args, stdout=PIPE).communicate()
            tag_unixtime, tag_timezone = tag_timestamp.split(None, 1)
            tagged_timestamp = datetime.datetime.fromtimestamp(int(tag_unixtime))

            if max_age and tagged_timestamp < max_age:
                break

            commits = []

            for repo_path, repo_name in zip(self.repo_paths, self.repo_names):
                # Grab an easily-parsed history: fields delimited by nulls.
                # Hash, author's name, commit timestamp, subject.
                git_log_args = [
                    'git',
                    '--git-dir=' + repo_path,
                    'log',
                    '--pretty=%h%x00%an%x00%aE%x00%at%x00%s',
                    "{0}..{1}".format(since_tag, tag),
                ]
                proc = subprocess.Popen(git_log_args, stdout=PIPE)
                for line in proc.stdout:
                    hash, author, email, time, subject \
                        = line.strip().decode('utf8').split('\x00')

                    # Convert bug numbers in subject to URLs
                    if self.bug_tracker:

                        subject = helpers.literal(