diff --git a/buildbot/status/web/baseweb.py b/buildbot/status/web/baseweb.py
index 5a968e9a9e9..db07ff44b97 100644
--- a/buildbot/status/web/baseweb.py
+++ b/buildbot/status/web/baseweb.py
@@ -296,6 +296,8 @@ class WebStatus(service.MultiService):
/grid : another summary display that shows a grid of builds, with
sourcestamps on the x axis, and builders on the y. Query
arguments similar to those for the waterfall can be added.
+ /tgrid : similar to the grid display, but the commits are down the
+ left side, and the build hosts are across the top.
/builders/BUILDERNAME: a page summarizing the builder. This includes
references to the Schedulers that feed it,
any builds currently in the queue, which
diff --git a/buildbot/status/web/grid.py b/buildbot/status/web/grid.py
index 72950a1d311..63ab9716de8 100644
--- a/buildbot/status/web/grid.py
+++ b/buildbot/status/web/grid.py
@@ -66,7 +66,7 @@ def head(self, request):
# if p:
# self.title = "BuildBot: %s" % p
#
- def build_td(self, request, build, extra=''):
+ def build_td(self, request, build):
if not build:
return '
| \n'
@@ -85,9 +85,7 @@ def build_td(self, request, build, extra=''):
text = '
\n'.join(text)
class_ = build_get_class(build)
- if extra:
- extra = '
' + extra
- return '%s%s | \n' % (class_, text, extra)
+ return '%s | \n' % (class_, text)
def builder_td(self, request, builder):
state, builds = builder.getState()
@@ -328,11 +326,7 @@ def body(self, request):
data += '\n'
data += self.stamp_td(stamps[i])
for bn in sortedBuilderNames:
- if stamps[i].branch:
- extra = 'on ' + str(stamps[i].branch)
- else:
- extra = ''
- data += self.build_td(request, builder_builds[bn][i], extra)
+ data += self.build_td(request, builder_builds[bn][i])
data += '
\n'
data += '\n'
diff --git a/buildbot/status/web/index.html b/buildbot/status/web/index.html
index 23e6650f0c0..f27fcf9d1d9 100644
--- a/buildbot/status/web/index.html
+++ b/buildbot/status/web/index.html
@@ -15,6 +15,9 @@ Welcome to the Buildbot!
the Grid Display will give you a
developer-oriented summary of recent buildbot activity.
+ the Transposed Grid Display presents
+ the same information as the grid, but lists the revisions down the side.
+
The Latest Build for each builder is
here.
diff --git a/docs/buildbot.texinfo b/docs/buildbot.texinfo
index c791e777e96..bd34c6c553d 100644
--- a/docs/buildbot.texinfo
+++ b/docs/buildbot.texinfo
@@ -4001,8 +4001,8 @@ The Perforce user.
The Perforce password.
@item @code{p4bin}
-An optional string parameter. Specify the location of the perforce command
-line binary (p4). You only need to do this if the perforce binary is not
+An optional string parameter. Specify the location of the perforce command
+line binary (p4). You only need to do this if the perforce binary is not
in the path of the buildbot user. Defaults to ``p4''.
@item @code{split_file}
@@ -5183,7 +5183,7 @@ The @code{Mercurial} build step performs a
or update.
Branches are available in two modes: ''dirname'' like @xref{Darcs} or
-''inrepo'', which uses the repository internal branches. Make sure this
+''inrepo'', which uses the repository internal branches. Make sure this
setting matches your changehook, if you have that installed.
The Mercurial step takes the following arguments:
@@ -7432,6 +7432,29 @@ of the URL space: @file{/builders} for access to individual builds,
@file{/changes} for access to information about source code changes,
etc.
+@item /grid
+
+This provides a chronologically oriented display of builders, by
+revision. The builders are listed down the left side of the page,
+and the revisions are listed across the top.
+
+By adding one ore more ``category='' arguments the grid will be
+restricted to revisions in those categories.
+
+A ``width=N'' argument will limit the number of revisiosn shown to N,
+defaulting to 5.
+
+A ``branch=BRANCHNAME'' argument will limit the grid to revisiosn on
+branch BRANCHNAME.
+
+@item /tgrid
+
+The Transposed Grid is similar to the standard grid, but, as the name
+implies, transposes the grid: the revisions are listed down the left side
+of the page, and the build hosts are listed across the top. It accepts
+the same query arguments. The exception being that instead of ``width''
+the argument is named ``length.''
+
@item /rss
This provides a rss feed summarizing all failed builds. The same
@@ -7664,11 +7687,11 @@ mn = MailNotifier(fromaddr="buildbot@@example.org",
@end example
In some cases it is desirable to have different information then what
-is provided in a standard MailNotifier message. For this purpose
-MailNotifier provides the argument customMesg (a function) which allows
+is provided in a standard MailNotifier message. For this purpose
+MailNotifier provides the argument customMesg (a function) which allows
for the creation of messages with unique content.
-For example it can be useful to display the last few lines of a log file
+For example it can be useful to display the last few lines of a log file
and recent changes when a builder fails:
@example
@@ -7693,10 +7716,10 @@ mn = MailNotifier(fromaddr="buildbot@@example.org",
customMesg=message)
@end example
-A customMesg function takes a single dict argument (see below) and returns a
+A customMesg function takes a single dict argument (see below) and returns a
tuple of strings. The first string is the complete text of the message and the
second is the message type ('plain' or 'html'). The 'html' type should be used
-when generating an HTML message:
+when generating an HTML message:
@example
def message(attrs):
@@ -7716,7 +7739,7 @@ def message(attrs):
text.append('
')
text.append('-buildbot')
return ('\n'.join(text), 'html')
-@end example
+@end example
@heading MailNotifier arguments
@@ -7785,41 +7808,41 @@ developers whose SVN usernames match their twistedmatrix.com account
names. See buildbot/status/mail.py for more details.
@item customMesg
-This is a optional function that can be used to generate a custom mail
-message. The customMesg function takes a single dict and must return a
-tuple containing the message text and type ('html' or 'plain'). Below is a list
+This is a optional function that can be used to generate a custom mail
+message. The customMesg function takes a single dict and must return a
+tuple containing the message text and type ('html' or 'plain'). Below is a list
of availale keys in the dict passed to customMesg:
@table @code
-@item builderName
+@item builderName
(str) Name of the builder that generated this event.
-@item projectName
+@item projectName
(str) Name of the project.
-@item mode
+@item mode
(str) Mode set in MailNotifier. (failing, passing, problem).
-@item result
+@item result
(str) Builder result as a string. 'success', 'warnings', 'failure', 'skipped', or 'exception'
-@item buildURL
+@item buildURL
(str) URL to build page.
-@item buildbotURL
+@item buildbotURL
(str) URL to buildbot main page.
-@item buildText
+@item buildText
(str) Build text from build.getText().
@item buildProperties
(Properties instance) Mapping of property names to values.
-@item slavename
+@item slavename
(str) Slavename.
-@item reason
+@item reason
(str) Build reason from build.getReason().
-@item responsibleUsers
+@item responsibleUsers
(List of str) List of responsible users.
-@item branch
+@item branch
(str) Name of branch used. If no SourceStamp exists branch
is an empty string.
-@item revision
+@item revision
(str) Name of revision used. If no SourceStamp exists revision
is an empty string.
-@item patch
+@item patch
(str) Name of patch used. If no SourceStamp exists patch
is an empty string.
@item changes
@@ -7828,19 +7851,19 @@ object has the following useful information:
@table @code
@item who
(str) who made this change
-@item revision
+@item revision
(str) what VC revision is this change
-@item branch
+@item branch
(str) on what branch did this change occur
-@item when
+@item when
(str) when did this change occur
-@item files
+@item files
(list of str) what files were affected in this change
-@item comments
+@item comments
(str) comments reguarding the change.
@end table
The functions asText and asHTML return a list of strings with
-the above information formatted.
+the above information formatted.
@item logs
(List of Tuples) List of tuples where each tuple contains the log name, log url,
log contents as a list of strings, and the status of the corresponding build step,