nkpart-dget 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,100 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'dget'
5
+ module DGet
6
+
7
+ class GoogleCodeDoc
8
+ include DGet
9
+ attr_reader :project_name, :pages, :root_doc
10
+
11
+ def initialize project_name
12
+ @project_name = project_name
13
+ end
14
+
15
+ def root_doc
16
+ # @root_doc ||= proc {
17
+ # doc = N('http://wiki.github.com/%s/%s' % [@user, @project_name])
18
+ # doc.css('.main').first.fmap { |c| clean_links c }
19
+ # doc
20
+ # }.call
21
+ end
22
+
23
+ def pages
24
+ @pages ||= proc {
25
+ p "http://code.google.com/p/#{@project_name}/w/list"
26
+ page_list_doc = N("http://code.google.com/p/#{@project_name}/w/list")
27
+ page_list_doc.css(".results tr").tail.map do |link|
28
+ [
29
+ link.css('.col_0 a').first.content.strip,
30
+ link['href'][/#{@project_name}\/(.*)/, 1] || "home",
31
+ proc {
32
+ content = N(link['href']).css('.main').first
33
+ clean_links content
34
+ content
35
+ }
36
+ ]
37
+ end
38
+ }.call
39
+ end
40
+
41
+ private
42
+
43
+ def clean_links doc
44
+ # rewrites internal links to use the local navigation
45
+ doc.css('a').each do |some_a|
46
+ some_a['href'][/#{@project_name}\/(.*)/, 1].fmap { |id|
47
+ some_a['href'] = "javascript:go(\'#{id}\')"
48
+ }
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ class GoogleCodeEngine
55
+ def do project_name, file = nil
56
+ doc = GoogleCodeDoc.new(project_name)
57
+ file ||= "#{project_name}.html"
58
+
59
+ # content = build_content doc
60
+ # File.open(file, 'w') { |f| f.puts content }
61
+ p doc.pages
62
+ end
63
+
64
+ private
65
+
66
+ def build_content gh_doc
67
+ build_doc(gh_doc.root_doc, gh_doc.pages, gh_doc.project_name, gh_doc.user)
68
+ end
69
+
70
+ def file_for user, project_name
71
+ "#{project_name}_#{user}.html"
72
+ end
73
+
74
+ def template
75
+ IO.read(File.dirname(__FILE__) / 'github.html')
76
+ end
77
+
78
+ def build_doc root, pages, project_name, user
79
+ # Template variables, note: project_name and user are also used in the template
80
+ project_description = root.css("#repository_description").first.fmap(&:content)
81
+ main_content = root.css('.main').first.fmap(&:inner_html)
82
+ page_list = sidebar(pages)
83
+ page_content = pages.map { |title, id, content_f|
84
+ "<div id=\"#{id}\">#{content_f[]}</div>"
85
+ }.join
86
+
87
+ ERB.new(template()).result(binding)
88
+ end
89
+
90
+ def sidebar pages
91
+ "<ul>" +
92
+ pages.map { |title, id, _|
93
+ "<li><b><a href=\"javascript:go(\'#{id}\')\""">#{title}</a></b></li>"
94
+ }.join +
95
+ "</ul>"
96
+ end
97
+
98
+ end
99
+
100
+ end
data/lib/dget/utils.rb ADDED
@@ -0,0 +1,57 @@
1
+ module DGet
2
+ def N url
3
+ Nokogiri::HTML(open(url))
4
+ rescue SocketError => e
5
+ puts "No connection available: #{url}"
6
+ exit 1
7
+ end
8
+ end
9
+
10
+ class String
11
+ def / other
12
+ File.join(self, other)
13
+ end
14
+ end
15
+
16
+ class Symbol
17
+ def to_proc
18
+ proc { |x| x.send(self) }
19
+ end
20
+ end
21
+
22
+ module Enumerable
23
+ def tail
24
+ self[1..-1]
25
+ end
26
+ end
27
+
28
+ class Object
29
+ def tap
30
+ yield self
31
+ self
32
+ end
33
+
34
+ def trace
35
+ self.tap { |x| p x }
36
+ end
37
+
38
+ def fmap &blk
39
+ if (self.respond_to? :map) then
40
+ self.map(&blk)
41
+ else
42
+ yield self if self
43
+ end
44
+ end
45
+
46
+ def filter &blk
47
+ if (self.respond_to? :select) then
48
+ self.select(&blk)
49
+ else
50
+ if self && (yield self)
51
+ self
52
+ else
53
+ nil
54
+ end
55
+ end
56
+ end
57
+ end
data/lib/dget.rb ADDED
@@ -0,0 +1,26 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ %w{rubygems erb nokogiri open-uri}.each { |r| require r }
5
+
6
+ require "dget/utils"
7
+ require "dget/googlecode"
8
+ require "dget/github"
9
+
10
+ module DGet
11
+ VERSION = '0.0.1' unless defined? VERSION
12
+
13
+ def self.cli(stdin, stdout, args)
14
+ engine, project_spec, file = *args
15
+ if (engine && project_spec) then
16
+ case engine
17
+ when "github"
18
+ GitHubEngine.new.do(project_spec, file)
19
+ when "googlecode"
20
+ GoogleCodeEngine.new.do(project_spec, file)
21
+ end
22
+ else
23
+ stdout.puts "Usage: dget [github|googlecode] [user/project|project] [file]"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,324 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <script type="text/javascript">
5
+ var codesite_token = null;
6
+ var logged_in_user_email = null;
7
+
8
+ </script>
9
+
10
+ <title>Changes - simple-build-tool -Project Hosting on Google Code</title>
11
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
12
+ <link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/15757402407652699001/css/ph_core.css">
13
+ <link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/15757402407652699001/css/ph_detail.css" >
14
+ </head>
15
+ <body class="t6">
16
+
17
+
18
+ <div style="height: 1px"></div>
19
+ <table style="padding:0px; margin: 20px 0px 0px 0px; width:100%" cellpadding="0" cellspacing="0">
20
+ <tr style="height: 58px;">
21
+ <td style="width: 55px; text-align:center;">
22
+ <a href="/p/simple-build-tool/"><img src="http://www.gstatic.com/codesite/ph/images/defaultlogo.png"
23
+ alt="Project Logo"></a>
24
+ </td>
25
+ <td style="padding-left: 0.8em">
26
+
27
+ <div id="pname" style="margin: 0px 0px -3px 0px">
28
+ <a href="/p/simple-build-tool/" style="text-decoration:none; color:#000">simple-build-tool</a>
29
+ </div>
30
+ <div id="psum">
31
+ <i><a id="project_summary_link" href="/p/simple-build-tool/" style="text-decoration:none; color:#000">A build tool for Scala</a></i>
32
+ </div>
33
+
34
+ </td>
35
+ <td style="white-space:nowrap; text-align:right">
36
+
37
+ <form action="/hosting/search">
38
+ <input size="30" name="q" value="">
39
+ <input type="submit" name="projectsearch" value="Search projects" >
40
+ </form>
41
+
42
+ </tr>
43
+ </table>
44
+
45
+
46
+
47
+ <table id="mt" cellspacing="0" cellpadding="0" width="100%" border="0">
48
+ <tr>
49
+ <th onclick="if (!cancelBubble) _go('/p/simple-build-tool/');">
50
+ <div class="tab inactive">
51
+ <div class="round4"></div>
52
+ <div class="round2"></div>
53
+ <div class="round1"></div>
54
+ <div class="box-inner">
55
+ <a onclick="cancelBubble=true;" href="/p/simple-build-tool/">Project&nbsp;Home</a>
56
+ </div>
57
+ </div>
58
+ </th><td>&nbsp;&nbsp;</td>
59
+
60
+
61
+
62
+
63
+ <th onclick="if (!cancelBubble) _go('/p/simple-build-tool/downloads/list');">
64
+ <div class="tab inactive">
65
+ <div class="round4"></div>
66
+ <div class="round2"></div>
67
+ <div class="round1"></div>
68
+ <div class="box-inner">
69
+ <a onclick="cancelBubble=true;" href="/p/simple-build-tool/downloads/list">Downloads</a>
70
+ </div>
71
+ </div>
72
+ </th><td>&nbsp;&nbsp;</td>
73
+
74
+
75
+
76
+
77
+
78
+ <th onclick="if (!cancelBubble) _go('/p/simple-build-tool/w/list');">
79
+ <div class="tab active">
80
+ <div class="round4"></div>
81
+ <div class="round2"></div>
82
+ <div class="round1"></div>
83
+ <div class="box-inner">
84
+ <a onclick="cancelBubble=true;" href="/p/simple-build-tool/w/list">Wiki</a>
85
+ </div>
86
+ </div>
87
+ </th><td>&nbsp;&nbsp;</td>
88
+
89
+
90
+
91
+
92
+
93
+ <th onclick="if (!cancelBubble) _go('/p/simple-build-tool/issues/list');">
94
+ <div class="tab inactive">
95
+ <div class="round4"></div>
96
+ <div class="round2"></div>
97
+ <div class="round1"></div>
98
+ <div class="box-inner">
99
+ <a onclick="cancelBubble=true;" href="/p/simple-build-tool/issues/list">Issues</a>
100
+ </div>
101
+ </div>
102
+ </th><td>&nbsp;&nbsp;</td>
103
+
104
+
105
+
106
+
107
+
108
+ <th onclick="if (!cancelBubble) _go('/p/simple-build-tool/source/checkout');">
109
+ <div class="tab inactive">
110
+ <div class="round4"></div>
111
+ <div class="round2"></div>
112
+ <div class="round1"></div>
113
+ <div class="box-inner">
114
+ <a onclick="cancelBubble=true;" href="/p/simple-build-tool/source/checkout">Source</a>
115
+ </div>
116
+ </div>
117
+ </th><td>&nbsp;&nbsp;</td>
118
+
119
+
120
+ <td width="100%">&nbsp;</td>
121
+ </tr>
122
+ </table>
123
+ <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0" class="st">
124
+ <tr>
125
+
126
+
127
+
128
+ <td>
129
+ <div class="issueDetail">
130
+ <div class="isf">
131
+
132
+ <span class="inIssueList">
133
+ <span>Search</span>
134
+ <form action="/p/simple-build-tool/w/list" method="GET" style="display:inline">
135
+ <select id="can" name="can" style="font-size:92%">
136
+ <option disabled="disabled">Search within:</option>
137
+
138
+ <option value="1" >&nbsp;All wiki pages</option>
139
+ <option value="3" >&nbsp;Featured pages</option>
140
+ <option value="2" selected="selected">&nbsp;Current pages</option>
141
+
142
+
143
+ <option value="4" >&nbsp;Deprecated pages</option>
144
+
145
+ </select>
146
+ <span>for</span>
147
+ <span id="qq"><input type="text" size="32" id="q" name="q" value="" style="font-size:92%" ></span>
148
+
149
+
150
+ <input type="submit" value="Search" style="font-size:92%" >
151
+ </form>
152
+ </span>
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+ </div>
163
+ </div>
164
+
165
+ </td>
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+ <td height="4" align="right" valign="top" class="bevel-right">
175
+ <div class="round4"></div>
176
+ <div class="round2"></div>
177
+ <div class="round1"></div>
178
+ </td>
179
+ </tr>
180
+ </table>
181
+ <script type="text/javascript">
182
+ var cancelBubble = false;
183
+ function _go(url) { document.location = url; }
184
+ </script>
185
+
186
+ <div id="maincol" style="padding:0 3px 3px 0; margin:0">
187
+
188
+ <!-- IE -->
189
+ <style type="text/css">
190
+ #wikimaincol { padding-top: 6px; padding-left:1em}
191
+ #sidebarcontainer { padding: 4px 2px 2px 2px; width:20em; overflow:hidden}
192
+ .sidebartop ul { margin:0 0 0 .5em; padding-left:0; list-style:none}
193
+ .sidebartop ul ul { margin-left:1em; padding-left:0; list-style:none; display:none}
194
+ .sidebartop li { margin:0 0 2px 0; padding:1px; padding-left:14px; cursor:pointer}
195
+ .sidebartop li a { padding:2px}
196
+ .sidebartop li { background: url(http://www.gstatic.com/codesite/ph/images/plus.gif) no-repeat 1px 3px}
197
+ .sidebartop li.treeopen { background: url(http://www.gstatic.com/codesite/ph/images/minus.gif) no-repeat 1px 3px}
198
+ .sidebartop li.treeleaf { background:none}
199
+ .currentpagelink { background:#cdf}
200
+ </style>
201
+
202
+ <style type="text/css">
203
+ .artifactcomment, #commentform {
204
+ margin: .5em 0 0 0;
205
+ padding: .3em 0 .3em .3em;
206
+ border-top: 3px solid #c3d9ff;
207
+ }
208
+ #commentform { padding-top: 1em; }
209
+ .delcom { background: #e8e8e8 }
210
+ .commentcontent { margin: 1em 0;}
211
+ </style>
212
+
213
+
214
+ <div id="wikicontent">
215
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
216
+ <tr>
217
+
218
+ <td class="vt expand" id="wikisidebar">
219
+ <div class="pmeta_bubble_bg">
220
+
221
+ <div style="float:right; padding:0 3px">
222
+ <a class="ifExpand" style="font-size:130%; color:blue; text-decoration:none"
223
+ href="#" onclick="_DW_toggleSidebar('simple-build-tool', this, ''); return false;"
224
+ title="Hide sidebar"><b>&lsaquo;&lsaquo;</b></a>
225
+ </div>
226
+ <div class="ifCollapse" style="padding:0 2px">
227
+ <a style="font-size:130%; color:blue; text-decoration:none"
228
+ href="#" onclick="_DW_toggleSidebar('simple-build-tool', this, ''); return false;"
229
+ title="Show sidebar"><b>&rsaquo;&rsaquo;</b></a>
230
+ </div>
231
+
232
+
233
+ <div id="sidebarcontainer" class="sidebartop ifExpand">
234
+ <ul><li>Getting Started </li><ul><li><a href="/p/simple-build-tool/wiki/Setup">Setup</a> - Getting <tt>sbt</tt> running on your machine. </li><li><a href="/p/simple-build-tool/wiki/RunningSbt">Basic Usage</a> - Actions and Commands </li></ul><li>Usage </li><ul><li><a href="/p/simple-build-tool/wiki/TriggeredExecution">Triggered Actions</a> </li><li><a href="/p/simple-build-tool/wiki/CrossBuild">Cross-building</a> </li><li><a href="/p/simple-build-tool/wiki/Loader">Scala and Sbt Versions</a> </li><li><a href="/p/simple-build-tool/wiki/ProjectConsole">Project Console</a> </li><li><a href="/p/simple-build-tool/wiki/IntegrationSupport">Integration</a> - Using <tt>sbt</tt> with other tools </li></ul><li>Configuration </li><ul><li><a href="/p/simple-build-tool/wiki/BuildConfiguration">Basic Configuration</a> </li><li><a href="/p/simple-build-tool/wiki/ProjectDefinitionExamples">Examples</a> </li><li><a href="/p/simple-build-tool/wiki/Forking">Forking</a> </li><li><a href="/p/simple-build-tool/wiki/Properties">Properties</a> </li><li><a href="/p/simple-build-tool/wiki/SubProjects">Sub Projects</a> </li><li><a href="/p/simple-build-tool/wiki/Paths">Paths</a> </li><li><a href="/p/simple-build-tool/wiki/CompilerPlugins">Using Compiler Plugins</a> </li><li><a href="/p/simple-build-tool/wiki/ScalaJars">Scala Jars and Dependency Management</a> </li><li><a href="/p/simple-build-tool/wiki/TestFrameworkExtensions">Extending the Test Framework</a> </li><li><a href="/p/simple-build-tool/wiki/SbtPlugins">Plugins</a> - Reusing and distributing project definitions </li><li>Managed Dependencies </li><ul><li><a href="/p/simple-build-tool/wiki/LibraryManagement">Basics</a> </li><li><a href="/p/simple-build-tool/wiki/ManagedConfigurations">Configurations</a> </li><li><a href="/p/simple-build-tool/wiki/Publishing">Publishing</a> </li></ul></ul><li>Writing Actions </li><ul><li><a href="/p/simple-build-tool/wiki/CustomActions">Creating/Modifying Actions</a> </li><li><a href="/p/simple-build-tool/wiki/ActionContent">Implementing Actions</a> </li><li><a href="/p/simple-build-tool/wiki/MethodTasks">Actions with Parameters (method tasks)</a> </li><li><a href="/p/simple-build-tool/wiki/Process">External Processes</a> </li></ul><li>Other Project Types </li><ul><li>Web Applications </li><ul><li><a href="/p/simple-build-tool/wiki/WebApplications">Web Applications</a> </li><li><a href="/p/simple-build-tool/wiki/WebApplicationExample">Hello Lift Example</a> </li></ul><li>Webstart Applications </li><ul><li><a href="/p/simple-build-tool/wiki/Webstart">Webstart</a> </li><li><a href="/p/simple-build-tool/wiki/WebstartExample">Example</a> </li></ul><li><a href="/p/simple-build-tool/wiki/JavaSources">Java Sources</a> </li></ul><li>Project Information </li><ul><li><a href="/p/simple-build-tool/wiki/Credits">Credits</a> </li><li><a href="/p/simple-build-tool/wiki/Roadmap">Roadmap</a> </li><li><a href="/p/simple-build-tool/wiki/Changes">Changes</a> </li><li><a href="/p/simple-build-tool/wiki/Build">Build</a> from source </li><li><a href="http://simple-build-tool.googlecode.com/svn/artifacts/latest/api/index.html" rel="nofollow">API Documentation</a> </li><li><a href="/p/simple-build-tool/wiki/ChangeDetectionAndTesting">Change Detection and Testing</a> </li></ul></ul>
235
+ </div>
236
+ <div class="round1"></div>
237
+ <div class="round2"></div>
238
+ <div class="round4"></div>
239
+ </div>
240
+ </td>
241
+
242
+
243
+ <td class="vt" id="wikimaincol" width="100%">
244
+
245
+ <div style="float:right; width:18em" id="wikimeta">
246
+ <div class="pmeta_bubble_bg">
247
+ <div class="round4"></div>
248
+ <div class="round2"></div>
249
+ <div class="round1"></div>
250
+ <div class="box-inner">
251
+ <table style="padding: 5px">
252
+ <tr><td colspan="2" style="padding-bottom:5px">Updated <span title="Tue Sep 1 07:12:52 2009">Today (7 hours ago)</span>
253
+
254
+ by <a style="white-space: nowrap" href="/u/dmharrah/">dmharrah</a>
255
+ </td></tr>
256
+
257
+ </table>
258
+ </div>
259
+ <div class="round1"></div>
260
+ <div class="round2"></div>
261
+ <div class="round4"></div>
262
+ </div>
263
+ </div>
264
+
265
+ <div id="wikiheader" style="margin-bottom:1em">
266
+
267
+ <span style="font-size:120%;font-weight:bold">Changes</span>
268
+ &nbsp;
269
+
270
+ </div>
271
+ <h3><a name="0.5.2_to_trunk"/>0.5.2 to trunk</h3><ul><li>Many logging related changes and fixes. Added <tt>FilterLogger</tt> and cleaned up interaction between <tt>Logger</tt>, scripted testing, and the builder projects. This included removing the <tt>recordingDepth</tt> hack from Logger. Logger buffering is now enabled/disabled per thread. </li><li>Fix <tt>compileOptions</tt> being fixed after the first compile </li><li>Minor fixes to output directory checking </li><li>Added <tt>defaultLoggingLevel</tt> method for setting the initial level of a project&#x27;s <tt>Logger</tt> </li><li>Cleaned up internal approach to adding extra default configurations like <tt>plugin</tt> </li><li>Added <tt>syncPathsTask</tt> for synchronizing paths to a target directory </li><li>Allow multiple instances of Jetty (new <tt>jettyRunTasks</tt> can be defined with different ports) </li><li><tt>jettyRunTask</tt> accepts configuration in a single configuration wrapper object instead of many parameters </li><li>Fix web application class loading (<a title="web application class loader problem" class=closed_ref href="/p/simple-build-tool/issues/detail?id=35">&nbsp;issue #35&nbsp;</a>) by using <tt>jettyClasspath=testClasspath---jettyRunClasspath</tt> for loading Jetty. A better way would be to have a <tt>jetty</tt> configuration and have <tt>jettyClasspath=managedClasspath(&#x27;jetty&#x27;)</tt>, but this maintains compatibility. </li><li>Copy resources to <tt>target/resources</tt> and <tt>target/test-resources</tt> using <tt>copyResources</tt> and <tt>copyTestResources</tt> tasks. Properly include all resources in web applications and classpaths (<a title="Overriding resources issue" class=closed_ref href="/p/simple-build-tool/issues/detail?id=36">&nbsp;issue #36&nbsp;</a>). <tt>mainResources</tt> and <tt>testResources</tt> are now the definitive methods for getting resources. </li><li>Updated for 2.8 (<tt>sbt</tt> now compiles against August 21, 2009 nightly build of Scala) </li><li>Fixed issue with position of <tt>^</tt> in compile errors </li><li>Changed order of repositories (local, shared, Maven Central, user, Scala Tools) </li><li>Added Maven Central to resolvers used to find Scala library/compiler in launcher </li><li>Fixed problem that prevented detecting user-specified subclasses </li><li>Fixed exit code returned when exception thrown in main thread for <tt>TrapExit</tt> </li><li>Added <tt>javap</tt> task to <tt>DefaultProject</tt>. It has tab completion on compiled project classes and the run classpath is passed to <tt>javap</tt> so that library classes are available. Examples: </li><pre class="prettyprint"> &gt; javap your.Clazz
272
+ &gt; javap -c scala.List</pre><li>Added <tt>exec</tt> task. Mixin <tt>Exec</tt> to project definition to use. This forks the command following <tt>exec</tt>. Examples: </li><pre class="prettyprint"> &gt; exec echo Hi
273
+ &gt; exec find src/main/scala -iname *.scala -exec wc -l {} ;</pre><li>Added <tt>sh</tt> task for users with a unix-style shell available (runs <tt>/bin/sh -c &lt;arguments&gt;</tt>). Mixin <tt>Exec</tt> to project definition to use. Example: </li><pre class="prettyprint"> &gt; sh find src/main/scala -iname *.scala | xargs cat | wc -l</pre><li>Improved Ivy-related code to not load unnecessary default settings </li><li>Moved repository order to be local, user repositories, Maven Central, and then Scala Tools </li><li>Fixed <a title="source package paths" class=closed_ref href="/p/simple-build-tool/issues/detail?id=39">&nbsp;issue #39&nbsp;</a> (sources were not relative in src package) </li><li>Implemented <a title="Ivy install task" class=closed_ref href="/p/simple-build-tool/issues/detail?id=38">&nbsp;issue #38&nbsp;</a> (<tt>InstallProject</tt> with &#x27;install&#x27; task) </li><li>Vesa&#x27;s patch for configuring the output of forked Scala/Java and processes </li><li>Don&#x27;t buffer logging of forked <tt>run</tt> by default </li><li>Check <tt>Project.terminateWatch</tt> to determine if triggered execution should stop for a given keypress. </li><li>Terminate triggered execution only on &#x27;enter&#x27; by default (previously, any keypress stopped it) </li></ul><h3><a name="0.5.1_to_0.5.2"/>0.5.1 to 0.5.2</h3><ul><li>Fixed problem where dependencies of <tt>sbt</tt> plugins were not on the compile classpath </li><li>Added <tt>execTask</tt> that runs an <tt>sbt.ProcessBuilder</tt> when invoked </li><li>Added implicit conversion from <tt>scala.xml.Elem</tt> to <tt>sbt.ProcessBuilder</tt> that takes the element&#x27;s text content, trims it, and splits it around whitespace to obtain the command. </li><li>Processes can now redirect standard input (see run with Boolean argument or !&lt; operator on <tt>ProcessBuilder</tt>), off by default </li><li>Made scripted framework a plugin and scripted tests now go in <tt>src/sbt-test</tt> by default </li><li>Can define and use an sbt test framework extension in a project </li><li>Fixed <tt>run</tt> action swallowing exceptions </li><li>Fixed tab completion for method tasks for multi-project builds </li><li>Check that tasks in <tt>compoundTask</tt> do not reference static tasks </li><li>Make <tt>toString</tt> of <tt>Path</tt>s in subprojects relative to root project directory </li><li><tt>crossScalaVersions</tt> is now inherited from parent if not specified </li><li>Added <tt>scala-library.jar</tt> to the <tt>javac</tt> classpath </li><li>Project dependencies are added to published <tt>ivy.xml</tt> </li><li>Added dependency tracking for Java sources using classfile parsing (with the usual limitations) </li><li>Added <tt>Process.cat</tt> that will send contents of <tt>URL</tt>s and <tt>File</tt>s to standard output. Alternatively, <tt>cat</tt> can be used on a single <tt>URL</tt> or <tt>File</tt>. Example: </li><pre class="prettyprint"> import java.net.URL
274
+ import java.io.File
275
+ val spde = new URL(&quot;http://technically.us/spde/About&quot;)
276
+ val dispatch = new URL(&quot;http://databinder.net/dispatch/About&quot;)
277
+ val build = new File(&quot;project/build.properties&quot;)
278
+ cat(spde, dispatch, build) #| &quot;grep -i scala&quot; !</pre></ul><h3><a name="0.4.6_to_0.5/0.5.1"/>0.4.6 to 0.5/0.5.1</h3><ul><li>Fixed <tt>ScalaTest</tt> framework dropping stack traces </li><li>Publish only public configurations by default </li><li>Loader now adds <tt>.m2/repository</tt> for downloading Scala jars </li><li>Can now fork the compiler and runner and the runner can use a different working directory. </li><li>Maximum compiler errors shown is now configurable </li><li>Fixed rebuilding and republishing released versions of <tt>sbt</tt> against new Scala versions (attempt #2) </li><li>Fixed snapshot reversion handling (Ivy needs changing pattern set on cache, apparently) </li><li>Fixed handling of default configuration when <tt>useMavenConfiguration</tt> is <tt>true</tt> </li><li>Cleanup on Environment, Analysis, Conditional, <tt>MapUtilities</tt>, and more... </li><li>Tests for Environment, source dependencies, library dependency management, and more... </li><li>Dependency management and multiple Scala versions </li><li>Experimental plugin for producing project bootstrapper in a self-extracting jar </li><li>Added ability to directly specify <tt>URL</tt> to use for dependency with the <tt>from(url: URL)</tt> method defined on <tt>ModuleID</tt> </li><li>Fixed <a title="provided classpath included in war file and webstart" class=closed_ref href="/p/simple-build-tool/issues/detail?id=30">&nbsp;issue #30&nbsp;</a> </li><li>Support cross-building with <tt>+</tt> when running batch actions </li><li>Additional flattening for project definitions: sources can go either in <tt>project/build/src</tt> (recursively) or <tt>project/build</tt> (flat) </li><li>Fixed manual <tt>reboot</tt> not changing the version of Scala when it is manually <tt>set</tt> </li><li>Fixed tab completion for cross-building </li><li>Fixed a class loading issue with web applications </li></ul><h3><a name="0.4.5_to_0.4.6"/>0.4.5 to 0.4.6</h3><ul><li>Publishing to ssh/sftp/filesystem repository supported </li><li>Exception traces are printed by default </li><li>Fixed warning message about no <tt>Class-Path</tt> attribute from showing up for <tt>run</tt> </li><li>Fixed <tt>package-project</tt> operation </li><li>Fixed <tt>Path.fromFile</tt> </li><li>Fixed issue with external process output being lost when sent to a <tt>BufferedLogger</tt> with <tt>parallelExecution</tt> enabled. </li><li>Preserve history across <tt>clean</tt> </li><li>Fixed issue with making relative path in jar with wrong separator </li><li>Added cross-build functionality (prefix action with <tt>+</tt>). </li><li>Added methods <tt>scalaLibraryJar</tt> and <tt>scalaCompilerJar</tt> to <tt>FileUtilities</tt> </li><li>Include project dependencies for <tt>deliver</tt>/<tt>publish</tt> </li><li>Add Scala dependencies for <tt>make-pom</tt>/<tt>deliver</tt>/<tt>publish</tt>, which requires these to depend on <tt>package</tt> </li><li>Properly add compiler jar to run/test classpaths when main sources depend on it </li><li><tt>TestFramework</tt> root <tt>ClassLoader</tt> filters compiler classes used by <tt>sbt</tt>, which is required for projects using the compiler. </li><li>Better access to dependencies: </li><ul><li><tt>mainDependencies</tt> and <tt>testDependencies</tt> provide an analysis of the dependencies of your code as determined during compilation </li><li><tt>scalaJars</tt> is deprecated, use <tt>mainDependencies.scalaJars</tt> instead (provides a <tt>PathFinder</tt>, which is generally more useful) </li></ul><li>Added <tt>jettyPort</tt> method to <tt>DefaultWebProject</tt>. </li><li>Fixed <tt>package-project</tt> to exclude <tt>project/boot</tt> and <tt>project/build/target</tt> </li><li>Support specs 1.5.0 for Scala 2.7.4 version. </li><li>Parallelization at the subtask level </li><li>Parallel test execution at the suite/specification level. </li></ul><h3><a name="0.4.3_to_0.4.5"/>0.4.3 to 0.4.5</h3><ul><li>Sorted out repository situation in loader </li><li>Added support for <tt>http_proxy</tt> environment variable </li><li>Added <tt>download</tt> method from Nathan to <tt>FileUtilities</tt> to retrieve the contents of a URL. </li><li>Added special support for compiler plugins, see <a href="/p/simple-build-tool/wiki/CompilerPlugins">CompilerPlugins</a> page. </li><li><tt>reload</tt> command in scripted tests will now properly handle success/failure </li><li>Very basic support for Java sources: Java sources under <tt>src/main/java</tt> and <tt>src/test/java</tt> will be compiled. </li><li><tt>parallelExecution</tt> defaults to value in parent project if there is one. </li><li>Added &#x27;console-project&#x27; that enters the Scala interpreter with the current <tt>Project</tt> bound to the variable <tt>project</tt>. </li><li>The default Ivy cache manager is now configured with <tt>useOrigin=true</tt> so that it doesn&#x27;t cache artifacts from the local filesystem. </li><li>For users building from trunk, if a project specifies a version of <tt>sbt</tt> that ends in <tt>-SNAPSHOT</tt>, the loader will update <tt>sbt</tt> every time it starts up. The trunk version of <tt>sbt</tt> will always end in <tt>-SNAPSHOT</tt> now. </li><li>Added automatic detection of classes with main methods for use when <tt>mainClass</tt> is not explicitly specified in the project definition. If exactly one main class is detected, it is used for <tt>run</tt> and <tt>package</tt>. If multiple main classes are detected, the user is prompted for which one to use for <tt>run</tt>. For <tt>package</tt>, no <tt>Main-Class</tt> attribute is automatically added and a warning is printed. </li><li>Updated build to cross-compile against Scala 2.7.4. </li><li>Fixed <tt>proguard</tt> task in <tt>sbt</tt>&#x27;s project definition </li><li>Added <tt>manifestClassPath</tt> method that accepts the value for the <tt>Class-Path</tt> attribute </li><li>Added <tt>PackageOption</tt> called <tt>ManifestAttributes</tt> that accepts <tt>(java.util.jar.Attributes.Name, String)</tt> or <tt>(String, String)</tt> pairs and adds them to the main manifest attributes </li><li>Fixed some situations where characters would not be echoed at prompts other than main prompt. </li><li>Fixed <a title="Does not use system proxy?" class=closed_ref href="/p/simple-build-tool/issues/detail?id=20">&nbsp;issue #20&nbsp;</a> (use <tt>http_proxy</tt> environment variable) </li><li>Implemented <a title="Utilities to run arbitrary shell commands" class=closed_ref href="/p/simple-build-tool/issues/detail?id=21">&nbsp;issue #21&nbsp;</a> (native process wrapper) </li><li>Fixed <a title="Dependency issue on updating Scala version to 2.7.4 via build.properties" class=closed_ref href="/p/simple-build-tool/issues/detail?id=22">&nbsp;issue #22&nbsp;</a> (rebuilding and republishing released versions of <tt>sbt</tt> against new Scala versions, specifically Scala 2.7.4) </li><li>Implemented <a title="Repositories defined in parent repository don't seem to be passed to child projects" class=closed_ref href="/p/simple-build-tool/issues/detail?id=23">&nbsp;issue #23&nbsp;</a> (inherit inline repositories declared in parent project) </li></ul><h3><a name="0.4_to_0.4.3"/>0.4 to 0.4.3</h3><ul><li>Direct dependencies on Scala libraries are checked for version equality with <tt>scala.version</tt> </li><li>Transitive dependencies on <tt>scala-library</tt> and <tt>scala-compiler</tt> are filtered </li><ul><li>They are fixed by <tt>scala.version</tt> and provided on the classpath by <tt>sbt</tt> </li><li>To access them, use the <tt>scalaJars</tt> method, <tt>classOf[ScalaObject].getProtectionDomain.getCodeSource</tt>, or mainCompileConditional.analysis.allExternals </li></ul><li>The configurations checked/filtered as described above are configurable. Nonstandard configurations are not checked by default. </li><li>Version of <tt>sbt</tt> and Scala printed on startup </li><li>Launcher asks if you want to try a different version if <tt>sbt</tt> or Scala could not be retrieved. </li><li>After changing <tt>scala.version</tt> or <tt>sbt.version</tt> with <tt>set</tt>, note is printed that <tt>reboot</tt> is required. </li><li>Moved managed dependency actions to <tt>BasicManagedProject</tt> (<tt>update</tt> is now available on <tt>ParentProject</tt>) </li><li>Cleaned up <tt>sbt</tt>&#x27;s build so that you just need to do <tt>update</tt> and <tt>full-build</tt> to build from source. The trunk version of <tt>sbt</tt> will be available for use from the loader. </li><ul><li>The loader is now a subproject. </li><li>For development, you&#x27;ll still want the usual actions (such as <tt>package</tt>) for the main builder and <tt>proguard</tt> to build the loader. </li></ul><li>Fixed analysis plugin improperly including traits/abstract classes in subclass search </li><li><tt>ScalaProject</tt>s already had everything required to be parent projects: flipped the switch to enable it </li><li>Proper method task support in scripted tests (<tt>package</tt> group tests rightly pass again) </li><li>Improved tests in loader that check that all necessary libraries were downloaded properly </li></ul><h3><a name="0.3.7_to_0.4"/>0.3.7 to 0.4</h3><ul><li>Fixed issue with <tt>build.properties</tt> being unnecessarily updated in sub-projects when loading. </li><li>Added method to compute the SHA-1 hash of a <tt>String</tt> </li><li>Added pack200 methods </li><li>Added initial process interface </li><li>Added initial webstart support </li><li>Added gzip methods </li><li>Added <tt>sleep</tt> and <tt>newer</tt> commands to scripted testing. </li><li>Scripted tests now test the version of <tt>sbt</tt> being built instead of the version doing the building. </li><li><tt>testResources</tt> is put on the test classpath instead of <tt>testResourcesPath</tt> </li><li>Added <tt>jetty-restart</tt>, which does <tt>jetty-stop</tt> and then <tt>jetty-run</tt> </li><li>Added automatic reloading of default web application </li><li>Changed packaging behaviors (still likely to change) </li><li>Inline configurations now allowed (can be used with configurations in inline XML) </li><li>Split out some code related to managed dependencies from <tt>BasicScalaProject</tt> to new class <tt>BasicManagedProject</tt> </li><li>Can specify that maven-like configurations should be automatically declared </li><li>Fixed problem with nested modules being detected as tests </li><li><tt>testResources</tt>, <tt>integrationTestResources</tt>, and <tt>mainResources</tt> should now be added to appropriate classpaths </li><li>Added project organization as a property that defaults to inheriting from the parent project. </li><li>Project creation now prompts for the organization. </li><li>Added method tasks, which are top-level actions with parameters. </li><li>Made <tt>help</tt>, <tt>actions</tt>, and <tt>methods</tt> commands available to batch-style invocation. </li><li>Applied Mikko&#x27;s two fixes for webstart and fixed problem with pack200+sign. Also, fixed nonstandard behavior when gzip enabled. </li><li>Added <tt>control</tt> method to <tt>Logger</tt> for action lifecycle logging </li><li>Made standard logging level convenience methods final </li><li>Made <tt>BufferedLogger</tt> have a per-actor buffer instead of a global buffer </li><li>Added a <tt>SynchronizedLogger</tt> and a <tt>MultiLogger</tt> (intended to be used with the yet unwritten <tt>FileLogger</tt>) </li><li>Changed method of atomic logging to be a method <tt>logAll</tt> accepting <tt>List[LogEvent]</tt> instead of <tt>doSynchronized</tt> </li><li>Improved action lifecycle logging </li><li>Parallel logging now provides immediate feedback about starting an action </li><li>General cleanup, including removing unused classes and methods and reducing dependencies between classes </li><li><tt>run</tt> is now a method task that accepts options to pass to the <tt>main</tt> method (<tt>runOptions</tt> has been removed, <tt>runTask</tt> is no longer interactive, and <tt>run</tt> no longer starts a console if <tt>mainClass</tt> is undefined) </li><li>Major task execution changes: </li><ul><li>Tasks automatically have implicit dependencies on tasks with the same name in dependent projects </li><li>Implicit dependencies on interactive tasks are ignored, explicit dependencies produce an error </li><li>Interactive tasks must be executed directly on the project on which they are defined </li><li>Method tasks accept input arguments (<tt>Array[String]</tt>) and dynamically create the task to run </li><li>Tasks can depend on tasks in other projects </li><li>Tasks are run in parallel breadth-first style </li></ul><li>Added <tt>test-only</tt> method task, which restricts the tests to run to only those passed as arguments. </li><li>Added <tt>test-failed</tt> method task, which restricts the tests to run. First, only tests passed as arguments are run. If no tests are passed, no filtering is done. Then, only tests that failed the previous run are run. </li><li>Added <tt>test-quick</tt> method task, which restricts the tests to run. First, only tests passed as arguments are run. If no tests are passed, no filtering is done. Then, only tests that failed the previous run or had a dependency change are run. </li><li>Added launcher that allows declaring version of sbt/scala to build project with. </li><li>Added tab completion with ~ </li><li>Added basic tab completion for method tasks, including <tt>test-*</tt> </li><li>Changed default pack options to be the default options of Pack200.Packer </li><li>Fixed ~ behavior when action doesn&#x27;t exist </li></ul><h3><a name="0.3.6_to_0.3.7"/>0.3.6 to 0.3.7</h3><ul><li>Improved classpath methods </li><li>Refactored various features into separate project traits </li><li><tt>ParentProject</tt> can now specify dependencies </li><li>Support for <tt>optional</tt> scope </li><li>More API documentation </li><li>Test resource paths provided on classpath for testing </li><li>Added some missing read methods in <tt>FileUtilities</tt> </li><li>Added scripted test framework </li><li>Change detection using hashes of files </li><li>Fixed problem with manifests not being generated (<a title="Main-Class attribute not set" class=closed_ref href="/p/simple-build-tool/issues/detail?id=14">&nbsp;bug #14&nbsp;</a>) </li><li>Fixed issue with scala-tools repository not being included by default (again) </li><li>Added option to set ivy cache location (mainly for testing) </li><li>trace is no longer a logging level but a flag enabling/disabling stack traces </li><li>Project.loadProject and related methods now accept a Logger to use </li><li>Made hidden files and files that start with <tt>&#x27;.&#x27;</tt> excluded by default (<tt>&#x27;.*&#x27;</tt> is required because subversion seems to not mark <tt>.svn</tt> directories hidden on Windows) </li><li>Implemented exit codes </li><li>Added continuous compilation command <tt>cc</tt> </li></ul><h3><a name="0.3.5_to_0.3.6"/>0.3.5 to 0.3.6</h3><ul><li>Fixed <a title="path parsing broken" class=closed_ref href="/p/simple-build-tool/issues/detail?id=12">&nbsp;bug #12&nbsp;</a>. </li><li>Compiled with 2.7.2. </li></ul><h3><a name="0.3.2_to_0.3.5"/>0.3.2 to 0.3.5</h3><ul><li>Fixed <a title="build.properties keeps getting modified" class=closed_ref href="/p/simple-build-tool/issues/detail?id=11">&nbsp;bug #11&nbsp;</a>. </li><li>Fixed problem with dependencies where source jars would be used instead of binary jars. </li><li>Fixed scala-tools not being used by default for inline configurations. </li><li>Small dependency management error message correction </li><li>Slight refactoring for specifying whether scala-tools releases gets added to configured resolvers </li><li>Separated repository/dependency overriding so that repositories can be specified inline for use with <tt>ivy.xml</tt> or <tt>pom.xml</tt> files </li><li>Added ability to specify Ivy XML configuration in Scala. </li><li>Added <tt>clean-cache</tt> action for deleting Ivy&#x27;s cache </li><li>Some initial work towards accessing a resource directory from tests </li><li>Initial tests for <tt>Path</tt> </li><li>Some additional <tt>FileUtilities</tt> methods, some <tt>FileUtilities</tt> method adjustments and some initial tests for <tt>FileUtilities</tt> </li><li>A basic framework for testing <tt>ReflectUtilities</tt>, not run by default because of run time </li><li>Minor cleanup to <tt>Path</tt> and added non-empty check to path components </li><li>Catch additional exceptions in <tt>TestFramework</tt> </li><li>Added <tt>copyTask</tt> task creation method. </li><li>Added <tt>jetty-run</tt> action and added ability to package war files. </li><li>Added <tt>jetty-stop</tt> action. </li><li>Added <tt>console-quick</tt> action that is the same as <tt>console</tt> but doesn&#x27;t compile sources first. </li><li>Moved some custom <tt>ClassLoader</tt>s to <tt>ClasspathUtilities</tt> and improved a check. </li><li>Added ability to specify hooks to call before <tt>sbt</tt> shuts down. </li><li>Added <tt>zip</tt>, <tt>unzip</tt> methods to <tt>FileUtilities</tt> </li><li>Added <tt>append</tt> equivalents to <tt>write*</tt> methods in <tt>FileUtilites</tt> </li><li>Added first draft of integration testing </li><li>Added batch command <tt>compile-stats</tt> </li><li>Added methods to create tasks that have basic conditional execution based on declared sources/products of the task </li><li>Added <tt>newerThan</tt> and <tt>olderThan</tt> methods to <tt>Path</tt> </li><li>Added <tt>reload</tt> action to reread the project definition without losing the performance benefits of an already running jvm </li><li>Added <tt>help</tt> action to tab completion </li><li>Added handling of (effectively empty) scala source files that create no class files: they are always interpreted as modified. </li><li>Added prompt to retry project loading if compilation fails </li><li><tt>package</tt> action now uses <tt>fileTask</tt> so that it only executes if files are out of date </li><li>fixed <tt>ScalaTest</tt> framework wrapper so that it fails the <tt>test</tt> action if tests fail </li><li>Inline dependencies can now specify configurations </li></ul><h3><a name="0.3.1_to_0.3.2"/>0.3.1 to 0.3.2</h3><ul><li>Compiled jar with Java 1.5. </li></ul><h3><a name="0.3_to_0.3.1"/>0.3 to 0.3.1</h3><ul><li>Fixed bugs #8, #9, and #10. </li></ul><h3><a name="0.2.3_to_0.3"/>0.2.3 to 0.3</h3><ul><li>Version change only for first release. </li></ul><h3><a name="0.2.2_to_0.2.3"/>0.2.2 to 0.2.3</h3><ul><li>Added tests for <tt>Dag</tt>, <tt>NameFilter</tt>, <tt>Version</tt> </li><li>Fixed handling of trailing <tt>*</tt>s in <tt>GlobFilter</tt> and added some error-checking for control characters, which <tt>Pattern</tt> doesn&#x27;t seem to like </li><li>Fixed <tt>Analysis.allProducts</tt> implementation </li><ul><li>It previously returned the sources instead of the generated classes </li><li>Will only affect the count of classes (it should be correct now) and the debugging of missed classes (erroneously listed classes as missed) </li></ul><li>Made some implied preconditions on <tt>BasicVersion</tt> and <tt>OpaqueVersion</tt> explicit </li><li>Made increment version behavior in <tt>ScalaProject</tt> easier to overload </li><li>Added <tt>Seq[..Option]</tt> alternative to <tt>...Option*</tt> for tasks </li><li>Documentation generation fixed to use latest value of version </li><li>Fixed <tt>BasicVersion.incrementMicro</tt> </li><li>Fixed test class loading so that <tt>sbt</tt> can test the version of <tt>sbt</tt> being developed (previously, the classes from the executing version of <tt>sbt</tt> were tested) </li></ul><h3><a name="0.2.1_to_0.2.2"/>0.2.1 to 0.2.2</h3><ul><li>Package name is now a call-by-name parameter for the package action </li><li>Fixed release action calling compile multiple times </li></ul><h3><a name="0.2.0_to_0.2.1"/>0.2.0 to 0.2.1</h3><ul><li>Added some action descriptions </li><li>jar name now comes from normalized name (lowercased and spaces to dashes) </li><li>Some cleanups related to creating filters </li><li>Path should only &#x27;get&#x27; itself if the underlying file exists to be consistent with other <tt>PathFinders</tt> </li><li>Added <tt>---</tt> operator for <tt>PathFinder</tt> that excludes paths from the <tt>PathFinder</tt> argument </li><li>Removed <tt>***</tt> operator on <tt>PathFinder</tt> </li><li><tt>**</tt> operator on <tt>PathFinder</tt> matches all descendents or self that match the <tt>NameFilter</tt> argument </li><li>The above should fix bug <tt>#6</tt> </li><li>Added version increment and release actions. </li><li>Can now build sbt with sbt. Build scripts <tt>build</tt> and <tt>clean</tt> will still exist. </li></ul><h3><a name="0.1.9_to_0.2.0"/>0.1.9 to 0.2.0</h3><ul><li>Implemented typed properties and access to system properties </li><li>Renamed <tt>metadata</tt> directory to <tt>project</tt> </li><li>Information previously in <tt>info</tt> file now obtained by properties: </li><ul><li><tt>info.name --&gt; name</tt> </li><li><tt>info.currentVersion --&gt; version</tt> </li></ul><li>Concrete <tt>Project</tt> subclasses should have a constructor that accepts a single argument of type <tt>ProjectInfo</tt> (argument <tt>dependencies: Iterable[Project]</tt> has been merged into <tt>ProjectInfo</tt>) </li></ul><h3><a name="0.1.8_to_0.1.9"/>0.1.8 to 0.1.9</h3><ul><li>Better default implementation of <tt>allSources</tt>. </li><li>Generate warning if two jars on classpath have the same name. </li><li>Upgraded to specs 1.4.0 </li><li>Upgraded to <tt>ScalaCheck</tt> 1.5 </li><li>Changed some update options to be final vals instead of objects. </li><li>Added some more API documentation. </li><li>Removed release action. </li><li>Split compilation into separate main and test compilations. </li><li>A failure in a <tt>ScalaTest</tt> run now fails the test action. </li><li>Implemented reporters for <tt>compile/scaladoc</tt>, <tt>ScalaTest</tt>, <tt>ScalaCheck</tt>, and <tt>specs</tt> that delegate to the appropriate <tt>sbt.Logger</tt>. </li></ul><h3><a name="0.1.7_to_0.1.8"/>0.1.7 to 0.1.8</h3><ul><li>Improved configuring of tests to exclude. </li><li>Simplified version handling. </li><li>Task <tt>&amp;&amp;</tt> operator properly handles dependencies of tasks it combines. </li><li>Changed method of inline library dependency declarations to be simpler. </li><li>Better handling of errors in parallel execution. </li></ul><h3><a name="0.1.6_to_0.1.7"/>0.1.6 to 0.1.7</h3><ul><li>Added graph action to generate dot files (for graphiz) from dependency information (work in progress). </li><li>Options are now passed to tasks as varargs. </li><li>Redesigned <tt>Path</tt> properly, including <tt>PathFinder</tt> returning a <tt>Set[Path]</tt> now instead of <tt>Iterable[Path]</tt>. </li><li>Moved paths out of <tt>ScalaProject</tt> and into <tt>BasicProjectPaths</tt> to keep path definitions separate from task definitions. </li><li>Added initial support for managing third-party libraries through the <tt>update</tt> task, which must be explicitly called (it is not a dependency of compile or any other task). This is experimental, undocumented, and known to be incomplete. </li><li>Parallel execution implementation at the project level, disabled by default. To enable, add: </li><pre class="prettyprint"> override def parallelExecution = true</pre></ul><blockquote>to your project definition. In order for logging to make sense, all project logging is buffered until the project is finished executing. Still to be done is some sort of notification of project execution (which ones are currently executing, how many remain)
279
+ </blockquote><ul><li><tt>run</tt> and <tt>console</tt> are now specified as &quot;interactive&quot; actions, which means they are only executed on the project in which they are defined when called directly, and not on all dependencies. Their dependencies are still run on dependent projects. </li><li>Generalized conditional tasks a bit. Of note is that analysis is no longer required to be in metadata/analysis, but is now in target/analysis by default. </li><li>Message now displayed when project definition is recompiled on startup </li><li>Project no longer inherits from Logger, but now has a log member. </li><li>Dependencies passed to <tt>project</tt> are checked for null (may help with errors related to initialization/circular dependencies) </li><li>Task dependencies are checked for null </li><li>Projects in a multi-project configuration are checked to ensure that output paths are different (check can be disabled) </li><li>Made <tt>update</tt> task globally synchronized because Ivy is not thread-safe. </li><li>Generalized test framework, directly invoking frameworks now (used reflection before). </li><li>Moved license files to licenses/ </li><li>Added support for <tt>specs</tt> and some support for <tt>ScalaTest</tt> (the test action doesn&#x27;t fail if <tt>ScalaTest</tt> tests fail). </li><li>Added <tt>specs</tt>, <tt>ScalaCheck</tt>, <tt>ScalaTest</tt> jars to lib/ </li><ul><li>These are now required for compilation, but are optional at runtime. </li><li>Added the appropriate licenses and notices. </li></ul><li>Options for <tt>update</tt> action are now taken from updateOptions member. </li><li>Fixed <tt>SbtManager</tt> inline dependency manager to work properly. </li><li>Improved Ivy configuration handling (not compiled with test dependencies yet though). </li><li>Added case class implementation of <tt>SbtManager</tt> called <tt>SimpleManager</tt>. </li><li>Project definitions not specifying dependencies can now use just a single argument constructor. </li></ul><h3><a name="0.1.5_to_0.1.6"/>0.1.5 to 0.1.6</h3><ul><li><tt>run</tt> and <tt>console</tt> handle <tt>System.exit</tt> and multiple threads in user code under certain circumstances (see <a href="/p/simple-build-tool/wiki/RunningProjectCode">RunningProjectCode</a>). </li></ul><h3><a name="0.1.4_to_0.1.5"/>0.1.4 to 0.1.5</h3><ul><li>Generalized interface with plugin (see <tt>AnalysisCallback</tt>) </li><li>Split out task implementations and paths from <tt>Project</tt> to <tt>ScalaProject</tt> </li><li>Subproject support (changed required project constructor signature: see <tt>sbt/DefaultProject.scala</tt>) </li><ul><li>Can specify dependencies between projects </li><li>Execute tasks across multiple projects </li><li>Classpath of all dependencies included when compiling </li><li>Proper inter-project source dependency handling </li><li>Can change to a project in an interactive session to work only on that project (and its dependencies) </li></ul><li>External dependency handling </li><ul><li>Tracks non-source dependencies (compiled classes and jars) </li><li>Requires each class to be provided by exactly one classpath element (This means you cannot have two versions of the same class on the classpath, e.g. from two versions of a library) </li><li>Changes in a project propagate the right source recompilations in dependent projects </li><li>Consequences: </li><ul><li>Recompilation when changing java/scala version </li><li>Recompilation when upgrading libraries (again, as indicated in the second point, situations where you have library-1.0.jar and library-2.0.jar on the classpath at the same time are not handled predictably. Replacing library-1.0.jar with library-2.0.jar should work as expected.) </li><li>Changing sbt version will recompile project definitions </li></ul></ul></ul><h3><a name="0.1.3_to_0.1.4"/>0.1.3 to 0.1.4</h3><ul><li>Autodetection of Project definitions. </li><li>Simple tab completion/history in an interactive session with JLine </li><li>Added descriptions for most actions </li></ul><h3><a name="0.1.2_to_0.1.3"/>0.1.2 to 0.1.3</h3><ul><li>Dependency management between tasks and auto-discovery tasks. </li><li>Should work on Windows. </li></ul><h3><a name="0.1.1_to_0.1.2"/>0.1.1 to 0.1.2</h3><ul><li>Should compile/build on Java 1.5 </li><li>Fixed run action implementation to include scala library on classpath </li><li>Made project configuration easier (see <a href="/p/simple-build-tool/wiki/BuildConfiguration">BuildConfiguration</a> in the Wiki) </li></ul><h3><a name="0.1_to_0.1.1"/>0.1 to 0.1.1</h3><ul><li>Fixed handling of source files without a package </li><li>Added easy project setup </li></ul>
280
+ </td>
281
+ </tr>
282
+ </table>
283
+ </div>
284
+
285
+ <br>
286
+ <div class="artifactcomment">
287
+ <img src="http://www.gstatic.com/codesite/ph/images/triangle.gif"><a href="https://www.google.com/accounts/ServiceLogin?service=code&ltmpl=phosting&continue=http%3A%2F%2Fcode.google.com%2Fp%2Fsimple-build-tool%2Fwiki%2FChanges&amp;followup=http%3A%2F%2Fcode.google.com%2Fp%2Fsimple-build-tool%2Fwiki%2FChanges"
288
+ >Sign in</a> to add a comment
289
+ </div>
290
+
291
+ <script src="http://www.gstatic.com/codesite/ph/15757402407652699001/js/dwiki_scripts_20081003.js"></script>
292
+
293
+ <script src="http://www.gstatic.com/codesite/ph/15757402407652699001/js/prettify/prettify.js"></script>
294
+ <script type="text/javascript">
295
+ prettyPrint();
296
+ </script>
297
+ <script type="text/javascript" src="http://www.gstatic.com/codesite/ph/15757402407652699001/js/dit_scripts_20081013.js"></script>
298
+
299
+ <script type="text/javascript" src="http://www.gstatic.com/codesite/ph/15757402407652699001/js/core_scripts_20081103.js"></script>
300
+ <script type="text/javascript" src="/js/codesite_product_dictionary_ph.pack.04102009.js"></script>
301
+
302
+ </div>
303
+ <div id="footer" dir="ltr">
304
+ <div class="text">
305
+ &copy;2009 Google -
306
+ <a href="/">Code Home</a> -
307
+ <a href="/tos.html">Terms of Service</a> -
308
+ <a href="http://www.google.com/privacy.html">Privacy Policy</a> -
309
+ <a href="/more/">Site Directory</a> -
310
+ <a href="/p/support/">Project Hosting Help</a>
311
+
312
+ </div>
313
+ </div>
314
+
315
+ <div class="hostedBy" style="margin-top: -20px;">
316
+ <span style="vertical-align: top;">Hosted by</span>
317
+ <a href="/hosting/">
318
+ <img src="http://www.gstatic.com/codesite/ph/images/google_code_tiny.png" width="107" height="24" alt="Google Code">
319
+ </a>
320
+ </div>
321
+
322
+ </body>
323
+ </html>
324
+
data/spec/dget_spec.rb ADDED
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Dget" do
4
+ it "fails" do
5
+ fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'dget'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestDGet < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/dget'