Author: Matti Picus <matti.pi...@gmail.com> Branch: Changeset: r753:c816177376d6 Date: 2013-03-20 23:22 -0700 http://bitbucket.org/pypy/buildbot/changeset/c816177376d6/
Log: merge sort-nightly-directories which sorts the nightly page by mtime of the subdirectories and puts trunk on top diff --git a/bot2/pypybuildbot/pypylist.py b/bot2/pypybuildbot/pypylist.py --- a/bot2/pypybuildbot/pypylist.py +++ b/bot2/pypybuildbot/pypylist.py @@ -1,11 +1,10 @@ import os.path import datetime import itertools -import re import py import cgi import urllib -from twisted.web import resource +import sys from twisted.web.static import File, DirectoryLister class PyPyTarball(object): @@ -103,25 +102,45 @@ def display_in_italic(self): return self.vcs == 'latest' +class PyPyDirectory(object): + def __init__(self, filePath): + self.filename = filePath.basename() + self.filePath = filePath + self.parse_filename() + + def parse_filename(self): + if self.filename == 'trunk': + self.last_mod_time = sys.maxsize + return + self.last_mod_time = self.filePath.getmtime() + + def key(self): + return (self.last_mod_time) class PyPyList(File): - def listNames(self): - names = File.listNames(self) + def sortBuildNames(self, names): items = map(PyPyTarball, names) items.sort(key=PyPyTarball.key, reverse=True) return [item.filename for item in items] + def sortDirectoryNames(self, filePaths): + items = map(PyPyDirectory, filePaths) + items.sort(key=PyPyDirectory.key, reverse=True) + return [item.filename for item in items] + def directoryListing(self): def is_pypy_dir(names): for name in names: if name.startswith('pypy-c'): return True return False - names = self.listNames() + names = File.listNames(self) if is_pypy_dir(names): + names = self.sortBuildNames(names) Listener = PyPyDirectoryLister else: + names = self.sortDirectoryNames(File.listEntities(self)) Listener = DirectoryLister return Listener(self.path, names, diff --git a/bot2/pypybuildbot/test/test_pypylist.py b/bot2/pypybuildbot/test/test_pypylist.py --- a/bot2/pypybuildbot/test/test_pypylist.py +++ b/bot2/pypybuildbot/test/test_pypylist.py @@ -1,5 +1,5 @@ import py -from pypybuildbot.pypylist import PyPyTarball +from pypybuildbot.pypylist import PyPyTarball, PyPyList def test_pypytarball_svn(): t = PyPyTarball('pypy-c-jit-75654-linux.tar.bz2') @@ -12,6 +12,7 @@ assert t.platform == 'linux' assert t.vcs == 'svn' + def test_pypytarball_hg(): t = PyPyTarball('pypy-c-jit-75654-foo-linux.tar.bz2') assert t.filename == 'pypy-c-jit-75654-foo-linux.tar.bz2' @@ -23,6 +24,7 @@ assert t.platform == 'linux' assert t.vcs == 'hg' + def test_invalid_filename(): t = PyPyTarball('foo') assert t.vcs == None @@ -35,8 +37,8 @@ t2 = PyPyTarball('pypy-c-jit-75654-linux.tar.bz2') assert t.key() < t2.key() -def test_sort(): - files = map(PyPyTarball, [ +def test_sort(tmpdir): + files = [ 'pypy-c-jit-10000-linux.tar.bz2', 'pypy-c-jit-20000-linux.tar.bz2', 'pypy-c-nojit-10000-linux.tar.bz2', @@ -45,11 +47,11 @@ 'pypy-c-stackless-10000-linux.tar.bz2', 'pypy-c-jit-1000-e5b73981fc8d-linux.tar.bz2', # this is mercurial based 'pypy-c-jit-10000-linux-armel.tar.bz2', - ]) - - files.sort(key=PyPyTarball.key, reverse=True) - files = [f.filename for f in files] - assert files == [ + ] + [tmpdir.join(f).write(f) for f in files] + pypylist = PyPyList(tmpdir.strpath) + listener = pypylist.directoryListing() + assert listener.dirs == [ 'pypy-c-jit-1000-e5b73981fc8d-linux.tar.bz2', # mercurial first 'pypy-c-jit-20000-linux.tar.bz2', 'pypy-c-jit-10000-linux.tar.bz2', @@ -60,6 +62,26 @@ 'pypy-c-stackless-10000-linux.tar.bz2', ] +def test_pypy_list(tmpdir): + import os + pypylist = PyPyList(os.path.dirname(__file__)) + files = pypylist.listNames() + assert os.path.basename(__file__) in files + +def test_dir_render(tmpdir): + # Create a bunch of directories, including one named trunk, + # Make sure the time order is reversed collation order + trunk = tmpdir.mkdir('trunk') + oldtime = trunk.mtime() + for ascii in range(ord('a'), ord('m')): + newdir = tmpdir.mkdir(chr(ascii) * 4) + newdir.setmtime(oldtime + ascii * 10) + pypylist = PyPyList(tmpdir.strpath) + listener = pypylist.directoryListing() + assert listener.dirs == ['trunk', 'mmmm', 'llll', + 'kkkk','jjjj','iiii','hhhh','gggg','ffff','eeee', + 'dddd','cccc','bbbb','aaaa'] + def load_BuildmasterConfig(): import os from pypybuildbot import summary, builds @@ -70,7 +92,7 @@ return builds else: assert False - + this = py.path.local(__file__) master_py = this.dirpath().dirpath().join('master.py') glob = {'httpPortNumber': 80, @@ -91,13 +113,13 @@ assert app == expected_app assert own in builders or own in known_exceptions assert app in builders or app in known_exceptions - + t = PyPyTarball('pypy-c-jit-76867-linux.tar.bz2') check_builder_names(t, 'own-linux-x86-32', 'pypy-c-jit-linux-x86-32') t = PyPyTarball('pypy-c-nojit-76867-linux.tar.bz2') check_builder_names(t, 'own-linux-x86-32', 'pypy-c-app-level-linux-x86-32') - + t = PyPyTarball('pypy-c-jit-76867-osx.tar.bz2') check_builder_names(t, 'own-macosx-x86-32', 'pypy-c-jit-macosx-x86-32') _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit