"revision" -> "push" on drdr pages and in emails.
This commit is contained in:
parent
66b32b4bee
commit
d0f4a5202b
|
@ -161,7 +161,7 @@
|
||||||
responsibles))
|
responsibles))
|
||||||
empty empty
|
empty empty
|
||||||
(flatten
|
(flatten
|
||||||
(list (format "DrDr has finished building revision ~a after ~a."
|
(list (format "DrDr has finished building push #~a after ~a."
|
||||||
cur-rev
|
cur-rev
|
||||||
(format-duration-ms abs-dur))
|
(format-duration-ms abs-dur))
|
||||||
""
|
""
|
||||||
|
@ -171,7 +171,7 @@
|
||||||
(if include-committer?
|
(if include-committer?
|
||||||
(list
|
(list
|
||||||
(format "~a:" committer)
|
(format "~a:" committer)
|
||||||
(format "You are receiving this email because the DrDr test of revision ~a (which you committed) contained a NEW condition that may need inspecting." cur-rev)
|
(format "You are receiving this email because the DrDr test of push #~a (which you did) contained a NEW condition that may need inspecting." cur-rev)
|
||||||
(let ([diff-smash (responsible-ht->status-ht diff)])
|
(let ([diff-smash (responsible-ht->status-ht diff)])
|
||||||
(for/list ([(id paths) (in-hash diff-smash)]
|
(for/list ([(id paths) (in-hash diff-smash)]
|
||||||
#:when (not (symbol=? id 'changes)))
|
#:when (not (symbol=? id 'changes)))
|
||||||
|
|
|
@ -268,7 +268,7 @@
|
||||||
,(if (lc-zero? changed)
|
,(if (lc-zero? changed)
|
||||||
""
|
""
|
||||||
`(div ([class "error"])
|
`(div ([class "error"])
|
||||||
"This result of executing this file has changed since the previous revision."
|
"This result of executing this file has changed since the previous push."
|
||||||
" "
|
" "
|
||||||
(a ([href ,(format "/diff/~a/~a~a" (current-rev) (previous-rev) the-base-path)])
|
(a ([href ,(format "/diff/~a/~a~a" (current-rev) (previous-rev) the-base-path)])
|
||||||
"See the difference")))
|
"See the difference")))
|
||||||
|
@ -461,24 +461,24 @@
|
||||||
@div[[(class "help")]]{
|
@div[[(class "help")]]{
|
||||||
@h1{What is DrDr?}
|
@h1{What is DrDr?}
|
||||||
@p{DrDr is a server at @a[[(href "http://www.byu.edu")]]{Brigham Young University} that builds
|
@p{DrDr is a server at @a[[(href "http://www.byu.edu")]]{Brigham Young University} that builds
|
||||||
and "tests" every revision of the Racket code base.}
|
and "tests" every push to the Racket code base.}
|
||||||
|
|
||||||
@h1{What kind of server?}
|
@h1{What kind of server?}
|
||||||
@p{A 64-bit Linux 2.6.28-15 server running Ubuntu 9.04 with @,(number->string (number-of-cpus)) cores.}
|
@p{A 64-bit Linux 2.6.28-15 server running Ubuntu 9.04 with @,(number->string (number-of-cpus)) cores.}
|
||||||
|
|
||||||
@h1{How is the build run?}
|
@h1{How is the build run?}
|
||||||
@p{Every revision is built from a clean checkout with the standard separate build directory command sequence, except that @code{make}
|
@p{Every push is built from a clean checkout with the standard separate build directory command sequence, except that @code{make}
|
||||||
is passed @code{-j} with the number of cores. Each revision also has a fresh home directory and PLaneT cache.}
|
is passed @code{-j} with the number of cores. Each push also has a fresh home directory and PLaneT cache.}
|
||||||
|
|
||||||
@h1{How long does it take for a build to start after a check-in?}
|
@h1{How long does it take for a build to start after a check-in?}
|
||||||
@p{Only one build runs at a time and when none is running the git repository is polled every @,(number->string (current-monitoring-interval-seconds)) seconds.}
|
@p{Only one build runs at a time and when none is running the git repository is polled every @,(number->string (current-monitoring-interval-seconds)) seconds.}
|
||||||
|
|
||||||
@h1{How is the revision "tested"?}
|
@h1{How is the push "tested"?}
|
||||||
@p{Each file's @code{@,PROP:command-line} property is consulted. If it is the empty string, the file is ignored. If it is a string, then a single @code{~s} is replaced with the file's path, @code{mzscheme} and @code{mzc} with their path (for the current revision), and @code{mred} and @code{mred-text} with @code{mred-text}'s path (for the current revision); then the resulting command-line is executed.
|
@p{Each file's @code{@,PROP:command-line} property is consulted. If it is the empty string, the file is ignored. If it is a string, then a single @code{~s} is replaced with the file's path, @code{racket} and @code{mzc} with their path (for the current push), and @code{gracket} and @code{gracket-text} with @code{gracket-text}'s path (for the current push); then the resulting command-line is executed.
|
||||||
(Currently no other executables are allowed, so you can't @code{rm -fr /}.)
|
(Currently no other executables are allowed, so you can't @code{rm -fr /}.)
|
||||||
If there is no property value, the default (@code{mzscheme -t ~s}) is used if the file's suffix is @code{.ss}, @code{.scm}, or @code{.scrbl}.}
|
If there is no property value, the default (@code{mzscheme -t ~s}) is used if the file's suffix is @code{.ss}, @code{.scm}, or @code{.scrbl}.}
|
||||||
|
|
||||||
@p{The command-line is always executed with a fresh empty current directory which is removed after the run. But all the files share the same home directory and X server, which are both removed after each revision's testing is complete.}
|
@p{The command-line is always executed with a fresh empty current directory which is removed after the run. But all the files share the same home directory and X server, which are both removed after each push's testing is complete.}
|
||||||
|
|
||||||
@h1{How many files are "tested" concurrently?}
|
@h1{How many files are "tested" concurrently?}
|
||||||
@p{One per core, or @,(number->string (number-of-cpus)).}
|
@p{One per core, or @,(number->string (number-of-cpus)).}
|
||||||
|
@ -500,7 +500,7 @@
|
||||||
@p{At the most basic level, if the bytes are different. However, there are two subtleties. First, DrDr knows to ignore the result of @code{time}. Second, the standard output and standard error streams are compared independently. The difference display pages present changed lines with a @span[([class "difference"])]{unique background}.}
|
@p{At the most basic level, if the bytes are different. However, there are two subtleties. First, DrDr knows to ignore the result of @code{time}. Second, the standard output and standard error streams are compared independently. The difference display pages present changed lines with a @span[([class "difference"])]{unique background}.}
|
||||||
|
|
||||||
@h1{How is this site organized?}
|
@h1{How is this site organized?}
|
||||||
@p{Each file's test results are displayed on a separate page, with a link to the previous revision on changes. All the files in a directory are collated and indexed recursively. On these pages each column is sortable and each row is clickable. The root of a revision also includes the git commit message with links to the test results of the modified files. The top DrDr page displays the summary information for all the tested revisions.}
|
@p{Each file's test results are displayed on a separate page, with a link to the previous push on changes. All the files in a directory are collated and indexed recursively. On these pages each column is sortable and each row is clickable. The root of a push also includes the git commit messages with links to the test results of the modified files. The top DrDr page displays the summary information for all the tested pushes.}
|
||||||
|
|
||||||
@h1{What is the difference between @code{Duration (Abs)} and @code{Duration (Sum)}?}
|
@h1{What is the difference between @code{Duration (Abs)} and @code{Duration (Sum)}?}
|
||||||
@p{@code{Duration (Abs)} is the difference between the earliest start time and the latest end time in the collection.}
|
@p{@code{Duration (Abs)} is the difference between the earliest start time and the latest end time in the collection.}
|
||||||
|
@ -508,18 +508,18 @@
|
||||||
@p{The two are often different because of parallelism in the testing process. (Long absolute durations indicate DrDr bugs waiting to get fixed.)}
|
@p{The two are often different because of parallelism in the testing process. (Long absolute durations indicate DrDr bugs waiting to get fixed.)}
|
||||||
|
|
||||||
@h1{What do the graphs mean?}
|
@h1{What do the graphs mean?}
|
||||||
@p{There is a single graph for each file, i.e., graphs are not kept for old revisions.}
|
@p{There is a single graph for each file, i.e., graphs are not kept for old pushs.}
|
||||||
@p{The X-axis is the revision tested. The Y-axis is the percentage of the time of the slowest revision.}
|
@p{The X-axis is the tested push. The Y-axis is the percentage of the time of the slowest push.}
|
||||||
@p{The gray, horizontal lines show where 0%, 25%, 50%, 75%, and 100% are in the graph.}
|
@p{The gray, horizontal lines show where 0%, 25%, 50%, 75%, and 100% are in the graph.}
|
||||||
@p{The black line shows the times for overall running of the file. The colored lines show the results from @code{time}. For each color, the "real" time is the darkest version of it and the "cpu" and "gc" time are 50% and 25% of the darkness, respectively.}
|
@p{The black line shows the times for overall running of the file. The colored lines show the results from @code{time}. For each color, the "real" time is the darkest version of it and the "cpu" and "gc" time are 50% and 25% of the darkness, respectively.}
|
||||||
@p{If the number of calls to @code{time} change from one revision to the next, then there is a gray, vertical bar at that point. Also, the scaling to the slowest time is specific to each horizontal chunk.}
|
@p{If the number of calls to @code{time} change from one push to the next, then there is a gray, vertical bar at that point. Also, the scaling to the slowest time is specific to each horizontal chunk.}
|
||||||
@p{The graph is split up into panes that each contain approximately 300 revisions. The green arrowheads to the left
|
@p{The graph is split up into panes that each contain approximately 300 pushes. The green arrowheads to the left
|
||||||
and right of the image move between panes.}
|
and right of the image move between panes.}
|
||||||
@p{The legend at the bottom of the graph shows the current pane, as well as the revision number and any timing information from that revision.}
|
@p{The legend at the bottom of the graph shows the current pane, as well as the push number and any timing information from that push.}
|
||||||
@p{Click on the graph to jump to the DrDr page for a specific revision.}
|
@p{Click on the graph to jump to the DrDr page for a specific push.}
|
||||||
|
|
||||||
@h1{Why are some revisions missing?}
|
@h1{Why are some pushes missing?}
|
||||||
@p{Some revisions are missing because they only modify branches. Only revisions that change @code{/trunk} are tested.}
|
@p{Some pushes are missing because they only modify branches. Only pushes that change the @code{master} branch are tested.}
|
||||||
|
|
||||||
@h1{How do I make the most use of DrDr?}
|
@h1{How do I make the most use of DrDr?}
|
||||||
@p{So DrDr can be effective with all testing packages and untested code, it only pays attention to error output and non-zero exit codes. You can make the most of this strategy by ensuring that when your tests are run successfully they have no STDERR output and exit cleanly, but have both when they fail.}
|
@p{So DrDr can be effective with all testing packages and untested code, it only pays attention to error output and non-zero exit codes. You can make the most of this strategy by ensuring that when your tests are run successfully they have no STDERR output and exit cleanly, but have both when they fail.}
|
||||||
|
@ -600,14 +600,14 @@
|
||||||
"DrDr"))
|
"DrDr"))
|
||||||
(table ([class "dirlist"])
|
(table ([class "dirlist"])
|
||||||
(thead
|
(thead
|
||||||
(tr (td "Revision")
|
(tr (td "Push#")
|
||||||
(td "Duration (Abs)")
|
(td "Duration (Abs)")
|
||||||
(td "Duration (Sum)")
|
(td "Duration (Sum)")
|
||||||
(td "Timeout?")
|
(td "Timeout?")
|
||||||
(td "Unclean Exit?")
|
(td "Unclean Exit?")
|
||||||
(td "STDERR Output")
|
(td "STDERR Output")
|
||||||
(td "Changes")
|
(td "Changes")
|
||||||
(td "Committer")))
|
(td "Pusher")))
|
||||||
(tbody
|
(tbody
|
||||||
,@(map (match-lambda
|
,@(map (match-lambda
|
||||||
[(cons 'future rev-pth)
|
[(cons 'future rev-pth)
|
||||||
|
@ -717,7 +717,7 @@
|
||||||
(div ([class "content"])
|
(div ([class "content"])
|
||||||
,breadcrumb
|
,breadcrumb
|
||||||
(div ([class "error"])
|
(div ([class "error"])
|
||||||
"This file does not exist in revision " ,(number->string (current-rev)) " or has not been tested.")
|
"This file does not exist in push #" ,(number->string (current-rev)) " or has not been tested.")
|
||||||
,(footer)))))
|
,(footer)))))
|
||||||
(define (dir-not-found dir-pth)
|
(define (dir-not-found dir-pth)
|
||||||
(define-values (title breadcrumb) (path->breadcrumb dir-pth #t))
|
(define-values (title breadcrumb) (path->breadcrumb dir-pth #t))
|
||||||
|
@ -728,7 +728,7 @@
|
||||||
(div ([class "content"])
|
(div ([class "content"])
|
||||||
,breadcrumb
|
,breadcrumb
|
||||||
(div ([class "error"])
|
(div ([class "error"])
|
||||||
"This directory does not exist in revision " ,(number->string (current-rev)) " or has not been tested.")
|
"This directory does not exist in push #" ,(number->string (current-rev)) " or has not been tested.")
|
||||||
,(footer)))))
|
,(footer)))))
|
||||||
(define (rev-not-found dir-pth path-to-file)
|
(define (rev-not-found dir-pth path-to-file)
|
||||||
(define-values (title breadcrumb) (path->breadcrumb dir-pth #t))
|
(define-values (title breadcrumb) (path->breadcrumb dir-pth #t))
|
||||||
|
@ -739,7 +739,7 @@
|
||||||
(div ([class "content"])
|
(div ([class "content"])
|
||||||
,breadcrumb
|
,breadcrumb
|
||||||
(div ([class "error"])
|
(div ([class "error"])
|
||||||
"The revision " ,(number->string (current-rev)) " does not exist or has not been tested.")
|
"Push #" ,(number->string (current-rev)) " does not exist or has not been tested.")
|
||||||
,(footer)))))
|
,(footer)))))
|
||||||
|
|
||||||
(define (find-previous-rev this-rev)
|
(define (find-previous-rev this-rev)
|
||||||
|
@ -812,8 +812,8 @@
|
||||||
(span ([class "this"])
|
(span ([class "this"])
|
||||||
"File Difference"))
|
"File Difference"))
|
||||||
(table ([class "data"])
|
(table ([class "data"])
|
||||||
(tr (td "First Revision:") (td (a ([href ,(format "/~a/~a" r1 f-str)]) ,(number->string r1))))
|
(tr (td "First Push:") (td (a ([href ,(format "/~a/~a" r1 f-str)]) ,(number->string r1))))
|
||||||
(tr (td "Second Revision:") (td (a ([href ,(format "/~a/~a" r2 f-str)]) ,(number->string r2))))
|
(tr (td "Second Push:") (td (a ([href ,(format "/~a/~a" r2 f-str)]) ,(number->string r2))))
|
||||||
(tr (td "File:") (td "/" ,f-str)))
|
(tr (td "File:") (td "/" ,f-str)))
|
||||||
(div ([class "output"])
|
(div ([class "output"])
|
||||||
(table ([class "diff"])
|
(table ([class "diff"])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user