gossip 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/History.txt +9 -0
  2. data/LICENSE.txt +34 -0
  3. data/Manifest.txt +62 -0
  4. data/README.txt +6 -0
  5. data/Rakefile +137 -0
  6. data/examples/all-config-file-choices.yml +36 -0
  7. data/lib/gossip.rb +32 -0
  8. data/lib/gossip/command.rb +122 -0
  9. data/lib/gossip/cronies/campfire.rb +72 -0
  10. data/lib/gossip/cronies/jabber.rb +66 -0
  11. data/lib/gossip/cronies/smtp.rb +121 -0
  12. data/lib/gossip/cronies/stdout.rb +24 -0
  13. data/lib/gossip/cronies/trac.rb +82 -0
  14. data/lib/gossip/cronies/twitter.rb +50 -0
  15. data/lib/gossip/crony.rb +102 -0
  16. data/lib/gossip/multi-exceptions.rb +47 -0
  17. data/lib/gossip/preteen.rb +86 -0
  18. data/lib/gossip/site-config.rb +94 -0
  19. data/lib/gossip/social-universe.rb +18 -0
  20. data/lib/gossip/version.rb +8 -0
  21. data/pages/classes.html +58 -0
  22. data/pages/cronies.html +256 -0
  23. data/pages/css/LICENSE.txt +1 -0
  24. data/pages/css/Thumbs.db +0 -0
  25. data/pages/css/bg2.gif +0 -0
  26. data/pages/css/gossip5-header-flip.jpg +0 -0
  27. data/pages/css/left.gif +0 -0
  28. data/pages/css/left_on.gif +0 -0
  29. data/pages/css/main.css +242 -0
  30. data/pages/css/right.gif +0 -0
  31. data/pages/css/right_on.gif +0 -0
  32. data/pages/css/tvline.gif +0 -0
  33. data/pages/images/campfire.png +0 -0
  34. data/pages/images/classes.png +0 -0
  35. data/pages/images/deployment.png +0 -0
  36. data/pages/images/jabber-big.png +0 -0
  37. data/pages/images/jabber.png +0 -0
  38. data/pages/images/trac-bigger.png +0 -0
  39. data/pages/images/trac-detail.png +0 -0
  40. data/pages/images/twitter.png +0 -0
  41. data/pages/index.html +45 -0
  42. data/pages/installation.html +95 -0
  43. data/pages/scripts.html +166 -0
  44. data/pages/src/classes.graffle +0 -0
  45. data/pages/starting-to-use.html +200 -0
  46. data/pages/writing-new-scripts.html +38 -0
  47. data/scripts/fanout +64 -0
  48. data/scripts/svntell +71 -0
  49. data/scripts/watchdog +86 -0
  50. data/setup.rb +1585 -0
  51. data/test/script/fanout-slowtests.rb +40 -0
  52. data/test/script/svntell-slowtests.rb +40 -0
  53. data/test/script/util.rb +22 -0
  54. data/test/script/watchdog-slowtests.rb +56 -0
  55. data/test/unit/command-crony-interaction-tests.rb +116 -0
  56. data/test/unit/command-tests.rb +119 -0
  57. data/test/unit/crony-tests.rb +46 -0
  58. data/test/unit/multi-exception-tests.rb +70 -0
  59. data/test/unit/preteen-tests.rb +81 -0
  60. data/test/util/bff.rb +45 -0
  61. data/test/util/doghouse.rb +42 -0
  62. data/test/util/silly-little-test-program.rb +6 -0
  63. metadata +181 -0
@@ -0,0 +1 @@
1
+ This work is public domain.This work is public domain.
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,242 @@
1
+ #header {
2
+ width:750px;
3
+ height:150px;
4
+ color:#fff;
5
+ font-size:50px;
6
+ letter-spacing:-2px;
7
+ margin:0;
8
+ }
9
+
10
+ .highlight {
11
+ color:#F1Ca3f;
12
+ }
13
+
14
+ #headerLeft {
15
+ background-color:#eaeaea;
16
+ height:150px;
17
+ width:150px;
18
+ float:left;
19
+ background:url("gossip5-header-flip.jpg") no-repeat !important;
20
+ }
21
+
22
+ #headerRight {
23
+ background-color:#78300A;
24
+ color:#fff;
25
+ height:150px;
26
+ margin-left:155px;
27
+ background:url("tvline.gif") repeat !important;
28
+ }
29
+
30
+ #headerRight h1 {
31
+ padding-top:25px;
32
+ padding-left:10px;
33
+ font-size:1.2em;
34
+ letter-spacing:-4px;
35
+ line-height:.6em;
36
+ margin:0;
37
+ }
38
+
39
+ #headerRight h2 {
40
+ padding-top:25px;
41
+ padding-left:10px;
42
+ font-size:0.5em;
43
+ letter-spacing:-1px;
44
+ line-height:.6em;
45
+ margin:0;
46
+ }
47
+
48
+ body {
49
+ font-family:verdana;
50
+ font-size:12px;
51
+ margin:0;
52
+ padding:0;
53
+ }
54
+
55
+ #pageBody {
56
+ background-color:orange;
57
+ font-family:verdana;
58
+ margin:0;
59
+ padding:20px;
60
+ }
61
+
62
+ #inlineTOC {
63
+ float: right;
64
+ list-style: none;
65
+ background: #EBC851;
66
+ margin-left: 1em;
67
+ margin-bottom: 5pt;
68
+ /* include-source: url(inlinetoc.html); */
69
+ }
70
+
71
+ #inlineTOC ul {
72
+ list-style-type: none;
73
+ padding-right: 1em;
74
+ padding-left: 1em;
75
+ }
76
+
77
+ #inlineTOC a {
78
+ font-weight:700;
79
+ color:#765;
80
+ text-decoration:none;
81
+ }
82
+
83
+ #inlineTOC A:hover {
84
+ color:#333;
85
+ }
86
+
87
+
88
+
89
+ #container {
90
+ width:750px;
91
+ height:auto;
92
+ background-color:#FFF;
93
+ margin:0 auto auto;
94
+ padding:0;
95
+ }
96
+
97
+ #nav {
98
+ width:80%;
99
+ font-family:Verdana, sans-serif;
100
+ margin:2em;
101
+ padding:5px;
102
+ }
103
+
104
+ #nav ul,#nav li {
105
+ display:inline;
106
+ color:#339;
107
+ font-weight:700;
108
+ margin:0;
109
+ padding:0;
110
+ }
111
+
112
+ #nav li a {
113
+ height:25px;
114
+ width:25px;
115
+ background-color:red;
116
+ border:1px solid #000;
117
+ }
118
+
119
+ #logo {
120
+ background-color:#FFF;
121
+ text-align:left;
122
+ width:750px;
123
+ height:auto;
124
+ padding-bottom:10px;
125
+ padding-left:5px;
126
+ font-size:30px;
127
+ }
128
+
129
+ #content {
130
+ margin-top:50px;
131
+ font-size:14px;
132
+ text-decoration:none;
133
+ width:750px;
134
+ height:auto;
135
+ border-bottom:1px solid #eaeaea;
136
+ line-height:160%;
137
+ }
138
+
139
+ #content h2 {
140
+ color:#000;
141
+ font-size:15px;
142
+ padding-left:2px;
143
+ }
144
+
145
+
146
+ blockquote {
147
+ background-color:#f2f2f2;
148
+ width:auto;
149
+ margin-left:25px;
150
+ margin-right:25px;
151
+ display:block;
152
+ padding:0.5em 0.5em 0.5em 1em;
153
+ }
154
+
155
+ #footer {
156
+ color:gray;
157
+ font-size:10px;
158
+ text-decoration:none;
159
+ padding-top:5px;
160
+ }
161
+
162
+ img.right {
163
+ float:right;
164
+ margin-left:5px;
165
+ padding:5px;
166
+ }
167
+
168
+ img.left {
169
+ float:left;
170
+ margin-right:5px;
171
+ padding:5px;
172
+ }
173
+
174
+ img.center {
175
+ display: block;
176
+ margin-left: auto;
177
+ margin-right: auto
178
+ }
179
+
180
+ .normal {
181
+ color:gray;
182
+ text-decoration:none;
183
+ }
184
+
185
+ #outer-container {
186
+ background-color:#fff;
187
+ width:790px;
188
+ border:1px solid #888;
189
+ margin:auto;
190
+ padding:15px 0;
191
+ }
192
+
193
+ #centerNav {
194
+ padding-left:32px;
195
+ }
196
+
197
+ #headerNav {
198
+ margin-top:5px;
199
+ font-size:93%;
200
+ background-color: #F1Ca3f;
201
+ float:left;
202
+ width:100%;
203
+ line-height:normal;
204
+ padding-bottom:-1px;
205
+ }
206
+
207
+ #headerNav UL {
208
+ list-style-type:none;
209
+ margin:0;
210
+ padding:10px 10px 0;
211
+ }
212
+
213
+ #headerNav LI {
214
+ background:url(left.gif) no-repeat left top;
215
+ float:left;
216
+ margin:0;
217
+ padding:0 0 0 9px;
218
+ }
219
+
220
+ #headerNav A {
221
+ display:block;
222
+ font-weight:700;
223
+ background:url(right.gif) no-repeat right top;
224
+ color:#765;
225
+ text-decoration:none;
226
+ float:none;
227
+ padding:5px 15px 4px 6px;
228
+ }
229
+
230
+ #headerNav A:hover {
231
+ color:#333;
232
+ }
233
+
234
+ #headerNav #current {
235
+ background-image:url(left_on.gif);
236
+ }
237
+
238
+ #headerNav #current A {
239
+ background-image:url(right_on.gif);
240
+ padding-bottom:5px;
241
+ color:#333;
242
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,45 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
+ <head>
5
+ <title>Gossip</title>
6
+ <meta http-equiv="Content-Type" content="application/xhtml+xml" />
7
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
8
+ <link rel="stylesheet" type="text/css" media="screen" href="css/main.css" />
9
+ </head>
10
+ <body>
11
+ <div id="pageBody">
12
+ <div id="outer-container">
13
+ <div id="container">
14
+ <div id="header">
15
+ <div id="headerLeft"></div>
16
+ <div id="headerRight"><h1>Gossip</h1><span class="highlight"><h2>tools for telling people things</h2></span></div>
17
+ </div>
18
+ <div id="headerNav">
19
+ <div id="centerNav">
20
+ <ul>
21
+ <li id="current"><a href="index.html">Home</a></li>
22
+ <li><a href="installation.html">Installation</a></li>
23
+ <li><a href="starting-to-use.html">Using Bundled Scripts</a></li>
24
+ <li><a href="writing-new-scripts.html">Writing Scripts</a></li>
25
+ <li><a href="rdoc">RDoc</a></li>
26
+ <li><a href="http://rubyforge.org/frs/?group_id=4455">Download</a></li>
27
+ </ul>
28
+ </div>
29
+ </div>
30
+ <div id="content">
31
+ <p><img alt="A Jabber Message" src="images/jabber.png" class="right" />Gossip is a Ruby library for sending messages to people through various channels. It was originally written to help two people on a distributed project keep in sync. The picture on the right shows the arrival of a <a href="http://www.jabber.org/" title="Jabber: Open Instant Messaging and a Whole Lot More, Powered by XMPP">Jabber</a> message alerting me to a checkin by my codeveloper an ocean away. Below, there's a picture showing that our deployment script adds a notification to our <a href="http://trac.edgewall.org/" title="The Trac Project - Trac">Trac</a> project timeline. Since the timeline has an RSS feed, at the beginning of the day, I can easily see what happened in France while I was sleeping.</p>
32
+ <p>In addition to <strong>Trac</strong> and <strong>Jabber</strong>, Gossip currently can talk to <a href="http://campfirenow.com/" title="Business chat for groups: Campfire"><strong>Campfire</strong></a>, a <strong>mail</strong> server (SMTP), and <a href="http://twitter.com/" title="Twitter: What are you doing?"><strong>Twitter</strong></a>.</p>
33
+ <p><img alt="Trac" src="images/deployment.png" class="left" />Gossip comes bundled with three utility scripts. One just <strong>relays your message</strong> to all the destinations. Another sends out a message about a <strong><a href="http://subversion.tigris.org/" title="subversion.tigris.org">Subversion</a> commit</strong>. The third watches a command run, then broadcasts <strong>command output and how long it took</strong>. (This last is a derivative of the "watchdog" program from my <i><a href="http://www.pragmaticprogrammer.com/titles/bmsft/" title="Everyday Scripting with Ruby">Everyday Scripting with Ruby</a></i>.)</p>
34
+ <p>Gossip scripts are, out of the box, highly configurable. Each user (real or virtual) can override defaults with configuration files (YAML or XML), environment variables, or command-line arguments. (It uses the <a href="http://user-choices.rubyforge.org/" title="Using User-Choices">user-choices</a> gem.) New scripts should be relatively easy to write.</p>
35
+ <h2>Credits</h2>
36
+ <p>Gossip makes use of <a href="http://home.gna.org/xmpp4r/" title="XMPP4R: XMPP/Jabber Library for Ruby">XMPP4R</a> (Lucas Nussbaum, Stephan Maka, Kirill A. Shutemov, and others), <a href="http://opensoul.org/2006/12/8/tinder-campfire-api" title="Tinder: Campfire API | opensoul.org">Tinder</a> (Daniel Morrison, Brandon Keepers, and others), <a href="http://snitch.rubyforge.org/" title="Snitch by John Nunemaker">Snitch</a> (John Nunemaker and others), and <a href="http://twitter.rubyforge.org/" title="Ruby Twitter Gem by John Nunemaker">Twitter</a> (John Nunemaker). It was written by <a href="http://exampler.com/" title="Exampler Consulting">Brian Marick</a>.
37
+ </div>
38
+ <div id="footer">Design by <a href="http://www.alltechnologydirectory.com/" class="normal">aybabtu</a><br/>
39
+ Support Open Source: <a href="http://www.openstockphotography.org/" title="Open Stock Photography">Open Stock Photography</a> | <a href="http://www.openwebdesign.org/">Open Web Design</a></div>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </body>
44
+ </html>
45
+
@@ -0,0 +1,95 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
+ <head>
5
+ <title>Gossip</title>
6
+ <meta http-equiv="Content-Type" content="application/xhtml+xml" />
7
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
8
+ <link rel="stylesheet" type="text/css" media="screen" href="css/main.css" />
9
+ </head>
10
+ <body>
11
+ <div id="pageBody">
12
+ <div id="outer-container">
13
+ <div id="container">
14
+ <div id="header">
15
+ <div id="headerLeft"></div>
16
+ <div id="headerRight"><h1>Gossip</h1><span class="highlight"><h2>tools for telling people things</h2></span></div>
17
+ </div>
18
+ <div id="headerNav">
19
+ <div id="centerNav">
20
+ <ul>
21
+ <li><a href="index.html">Home</a></li>
22
+ <li id="current"><a href="installation.html">Installation</a></li>
23
+ <li><a href="starting-to-use.html">Using Bundled Scripts</a></li>
24
+ <li><a href="writing-new-scripts.html">Writing Scripts</a></li>
25
+ <li><a href="rdoc">RDoc</a></li>
26
+ <li><a href="http://rubyforge.org/frs/?group_id=4455">Download</a></li>
27
+ </ul>
28
+ </div>
29
+ </div>
30
+ <div id="content">
31
+ <h2>Installation</h2>
32
+
33
+ <ol>
34
+ <li><code>gem install gossip</code></li>
35
+ <li>Set up site-wide defaults.</li>
36
+ <li>Copy whichever of the scripts you want into somewhere in your <code>$PATH</code>.</li>
37
+ </ol>
38
+ <h2>Details</h2>
39
+ <ol>
40
+ <li>
41
+ <p>
42
+ Install the gem in the normal way. (Gossip has dependencies on a number of other gems. You may be annoyed, therefore, when <code>gem</code> installs the Twitter gem even though you aren't going use Twitter. If you're annoyed, <a href="mailto:marick@exampler.com">send me mail</a>, and I'll make a configurable release.)
43
+ </p>
44
+ </li>
45
+ <li>
46
+ <p>
47
+ Gossip can send messages to Twitter, email, Jabber, etc. Each of those destinations will require some information (username, password, etc.). All that can be specified on the command line, in configuration files, or it can be set as site-wide defaults.
48
+ </p>
49
+ <p>
50
+ Gossip comes with a set of site-wide defaults that will certainly be wrong for you. They are in <code>lib/gossip/site-config.rb</code>. You have some choices.
51
+ </p>
52
+
53
+ <ul>
54
+ <li>
55
+ <p>
56
+ You can leave them alone and make the user specify them in a single config file that applies to all Gossip commands. That makes sense, for example, if you'll be using those commands on a shared server. If everything you do is done under a single user account, putting a <code>.gossiprc</code> file in that account's home directory is easy.
57
+ </p>
58
+ </li>
59
+ <li>
60
+ <p>
61
+ You can edit <code>site-config.rb</code> to change the values. Note, however, that you'll lose the values if you install a new version.
62
+ </p>
63
+ </li>
64
+ <li>
65
+ <p>
66
+ You can put an improved <code>site-config.rb</code> somewhere else. In that case, you'll have to change the <code>require "gossip/site-config"</code> line in <em>each</em> of the Gossip scripts before installing them.
67
+ </p>
68
+ </li>
69
+ </ul>
70
+ <p>To modify <code>site-config.rb</code>, see the instructions within it. The <a href="classes.html">explanation of the system metaphor</a> might help understand the jargon.</p>
71
+ <p>To make a user configuration file, see <a href="starting-to-use.html">Using Bundled Scripts</a>.</p>
72
+ </li>
73
+ <li>
74
+ <p>
75
+ Gossip comes with some scripts. They're not automatically installed for fear of conflicts with existing commands. Instead, install the ones you want manually. Here's the current set:
76
+ </p>
77
+ <ul>
78
+ <li><code>fanout</code> sends a message to multiple destinations.</li>
79
+ <li><code>svntell</code> constructs a message from a Subversion repository and sends it. It's to be called from a subversion post-commit hook.</li>
80
+ <li><code>watchdog</code> runs a command line, then reports on its output and duration.</li>
81
+ </ul>
82
+ <p>
83
+ See <a href="starting-to-use.html">Using Bundled Scripts</a> for more.
84
+ </p>
85
+ <p>Try a script before installing them. A good thing to try is <code>./fanout --help</code>. If you get a complaint that Ruby's not found, you'll need to change the "shebang" line (the first line in the script that now says <code>#!/usr/bin/env ruby</code>) to the absolute path name of your version of Ruby.
86
+ </p>
87
+ </li>
88
+
89
+ </ol>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </body>
94
+ </html>
95
+
@@ -0,0 +1,166 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
+ <head>
5
+ <title>Gossip</title>
6
+ <meta http-equiv="Content-Type" content="application/xhtml+xml" />
7
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
8
+ <link rel="stylesheet" type="text/css" media="screen" href="css/main.css" />
9
+ </head>
10
+ <body>
11
+ <div id="pageBody">
12
+ <div id="outer-container">
13
+ <div id="container">
14
+ <div id="header">
15
+ <div id="headerLeft"></div>
16
+ <div id="headerRight"><h1>Gossip</h1><span class="highlight"><h2>tools for telling people things</h2></span></div>
17
+ </div>
18
+ <div id="headerNav">
19
+ <div id="centerNav">
20
+ <ul>
21
+ <li><a href="index.html">Home</a></li>
22
+ <li><a href="installation.html">Installation</a></li>
23
+ <li id="current"><a href="starting-to-use.html">Using Bundled Scripts</a></li>
24
+ <li><a href="writing-new-scripts.html">Writing Scripts</a></li>
25
+ <li><a href="rdoc">RDoc</a></li>
26
+ <li><a href="http://rubyforge.org/frs/?group_id=4455">Download</a></li>
27
+ </ul>
28
+ </div>
29
+ </div>
30
+ <div id="content">
31
+ <div id="inlineTOC">
32
+ <ul>
33
+ <li><a href="starting-to-use.html">Getting started</a></li>
34
+ <ul>
35
+ <li><a href="starting-to-use.html#definitions">Three important words</a></li>
36
+ <li><a href="starting-to-use.html#config">Your own private configuration</a></li>
37
+ </ul>
38
+ <li><a href="cronies.html">All cronies</a></li>
39
+ <ul>
40
+ <li><a href="cronies.html#campfire">campfire</a></li>
41
+ <li><a href="cronies.html#jabber">jabber</a></li>
42
+ <li><a href="cronies.html#mail">mail</a></li>
43
+ <li><a href="cronies.html#stdout">standard output</a></li>
44
+ <li><a href="cronies.html#trac">trac</a></li>
45
+ <li><a href="cronies.html#twitter">twitter</a></li>
46
+ </ul>
47
+ <li><a href="scripts.html">All scripts</a></li>
48
+ <ul>
49
+ <li><a href="scripts.html#fanout">fanout: broadcast a message</a></li>
50
+ <li><a href="scripts.html#watchdog">watchdog: report on a script</a></li>
51
+ <li><a href="scripts.html#svntell">svntell: Subversion post-commit</a></li>
52
+ </ul>
53
+ </ul>
54
+ </div>
55
+ <h2>The different scripts</h2>
56
+
57
+ <ul>
58
+ <li>
59
+ <p>
60
+ <strong><a href="#fanout">fanout</a></strong> sends the scandal and details to the desired cronies.
61
+ </p>
62
+ </li>
63
+ <li>
64
+ <p>
65
+ <strong><a href="#svntell">svntell</a></strong> is intended to be called from a Subversion post-commit hook. It sends out information about the most recent revision.
66
+ </p>
67
+ </li>
68
+ <li>
69
+ <p>
70
+ <strong><a href="#watchdog.html">watchdog</a></strong> is given a command to run. It does so, then reports on the command's output and how long it took.
71
+ </p>
72
+ </li>
73
+ </ul>
74
+
75
+ <h2><a name="fanout">fanout</a></h2>
76
+ <p>
77
+ <code>fanout</code> gets the scandal from its command-line arguments and the details from standard input. In the following, what you type is shown in bold:
78
+ </p>
79
+ <pre>
80
+ <b>$ ruby -S fanout this is a scandal
81
+ Here are some details.</b>
82
+ this is a scandal
83
+ Here are some details.
84
+ </pre>
85
+
86
+ <p>
87
+ (The output is indented because that's how the standard output crony prints.)
88
+ </p>
89
+
90
+ <p>
91
+ Often, you want to send only a single line. In that case, the way <code>fanout</code> waits for input is annoying. You can turn that off with the <code>--no-details</code> option:
92
+ </p>
93
+
94
+ <pre>
95
+ <b>$ ruby -S fanout --no-det fred is on fire!</b>
96
+ fred is on fire!
97
+ </pre>
98
+
99
+ <h2><a name="watchdog">watchdog</a></h2>
100
+
101
+ <code>watchdog</code> is given a command. It executes it, then gossips about the results. Here's a typical use:
102
+ <pre>
103
+ <b> $ ruby -S watchdog rake test</b>
104
+ Program rake finished.
105
+ Duration: 20.822008 seconds.
106
+ Command: rake test
107
+ Output:
108
+ (in /Users/marick/src/publish/user-choices)
109
+ Loaded suite
110
+ Started
111
+ ................................................................................
112
+ Finished in 19.897866 seconds.
113
+
114
+ 137 tests, 334 assertions, 0 failures, 0 errors
115
+ </pre>
116
+
117
+ <p>
118
+ <code>watchdog</code> has no configurable options of its own.
119
+ </p>
120
+ <p>
121
+ Note: The command that <code>watchdog</code> runs can have command-line arguments of its own, like this:
122
+ </p>
123
+
124
+ <pre>
125
+ <b>$ ruby -S watchdog rake --tasks</b>
126
+ </pre>
127
+ <h2><a name="svntell">svntell</a></h2>
128
+
129
+ <p>
130
+ <code>svntell</code> reads information about a revision from a Subversion repository and gossips about it. Both the revision number and repository path are required:
131
+ </p>
132
+ <pre><b>
133
+ ruby -S svntell --repo=/Users/marick/svn --revision=3</b>
134
+ commit by marick
135
+ [marick] Revision 3 Committed by marick:
136
+ - Added starting set of third-party jars
137
+
138
+ Changed Files:
139
+ - A clinics/trunk/jars/fitLibraryForFit.jar
140
+ - A clinics/trunk/jars/javaFit1.1b.jar
141
+ - A clinics/trunk/jars/junit-addons-1.4.jar
142
+ - A clinics/trunk/jars/junit.jar</pre>
143
+
144
+ <p>
145
+ <code>svntell</code> is usually used within a Subversion post-commit hook script, which passes it the two facts it needs.
146
+ </p>
147
+
148
+ <p>
149
+ <code>svntell</code> uses the <code>svnlook</code> command, which is installed along with the rest of the Subversion client commands. Because <code>svntell</code> is called by the Subversion server, whose search <code>$PATH</code> is unknown, it uses an absolute path to <code>svnlook</code>. By default, that path is <code>/usr/bin/svntell</code>. You can change it with the <code>--svnlook-path</code> option:
150
+ </p>
151
+
152
+ <pre>
153
+ <b>$ ruby -S svntell --svnlook-path /opt/local/bin/svnlook --repo=/svn --revision=3</b>
154
+ </pre>
155
+
156
+ <p style="text-align: center">
157
+ <a href="scripts.html">Next</a>: all cronies.
158
+ </p>
159
+
160
+ </div>
161
+ </div>
162
+ </div>
163
+
164
+ </body>
165
+ </html>
166
+