buildr 1.4.7 → 1.4.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +41 -0
- data/Rakefile +0 -6
- data/addon/buildr/bnd.rb +13 -3
- data/addon/buildr/checkstyle.rb +1 -1
- data/addon/buildr/git_auto_version.rb +33 -0
- data/addon/buildr/{gwt.rake → gwt.rb} +0 -0
- data/addon/buildr/jacoco.rb +194 -0
- data/buildr.buildfile +1 -1
- data/buildr.gemspec +23 -16
- data/doc/_layouts/default.html +0 -2
- data/doc/contributing.textile +47 -0
- data/doc/download.textile +24 -0
- data/doc/index.textile +43 -23
- data/doc/languages.textile +65 -6
- data/doc/more_stuff.textile +12 -0
- data/doc/packaging.textile +2 -0
- data/doc/settings_profiles.textile +1 -1
- data/lib/buildr.rb +0 -4
- data/lib/buildr/core/application.rb +41 -8
- data/lib/buildr/core/build.rb +102 -1
- data/lib/buildr/core/cc.rb +14 -8
- data/lib/buildr/core/generate.rb +148 -7
- data/lib/buildr/core/util.rb +3 -3
- data/lib/buildr/ide/eclipse.rb +114 -0
- data/lib/buildr/ide/idea.rb +95 -1
- data/lib/buildr/java/commands.rb +1 -1
- data/lib/buildr/java/rjb.rb +5 -4
- data/lib/buildr/packaging/artifact.rb +1 -1
- data/lib/buildr/packaging/ziptask.rb +2 -2
- data/lib/buildr/scala.rb +1 -1
- data/lib/buildr/scala/bdd.rb +9 -2
- data/lib/buildr/scala/compiler.rb +94 -4
- data/lib/buildr/scala/doc.rb +17 -5
- data/lib/buildr/scala/tests.rb +15 -4
- data/lib/buildr/version.rb +1 -1
- data/rakelib/all-in-one.rake +50 -47
- data/rakelib/checks.rake +4 -4
- data/rakelib/doc.rake +85 -88
- data/rakelib/metrics.rake +9 -9
- data/rakelib/package.rake +13 -34
- data/rakelib/release.rake +11 -12
- data/rakelib/rspec.rake +71 -76
- data/rakelib/stage.rake +25 -51
- data/spec/addon/bnd_spec.rb +61 -7
- data/spec/core/build_spec.rb +117 -0
- data/spec/core/cc_spec.rb +36 -22
- data/spec/core/common_spec.rb +3 -2
- data/spec/core/compile_spec.rb +3 -3
- data/spec/core/generate_from_eclipse_spec.rb +280 -0
- data/spec/java/bdd_spec.rb +2 -2
- data/spec/java/packaging_spec.rb +2 -1
- data/spec/packaging/archive_spec.rb +25 -2
- data/spec/packaging/artifact_spec.rb +2 -2
- data/spec/sandbox.rb +3 -2
- data/spec/scala/compiler_spec.rb +41 -0
- data/spec/scala/doc_spec.rb +22 -3
- data/spec/scala/scala.rb +2 -2
- data/spec/scala/tests_spec.rb +2 -2
- metadata +223 -194
- data/addon/buildr/jdepend.rb.orig +0 -178
- data/doc/installing.textile.orig +0 -282
- data/doc/more_stuff.textile.orig +0 -1004
- data/lib/buildr/ide/eclipse/java.rb +0 -49
- data/lib/buildr/ide/eclipse/plugin.rb +0 -67
- data/lib/buildr/ide/eclipse/scala.rb +0 -64
data/doc/download.textile
CHANGED
@@ -20,6 +20,30 @@ The source code is included in both source and binary distribution, the Gem dist
|
|
20
20
|
|
21
21
|
h2(#dist). Binaries and Source Code
|
22
22
|
|
23
|
+
h3. buildr 1.4.8 (2012-11-01)
|
24
|
+
|
25
|
+
|_. Package |_. MD5 Checksum |_. PGP |
|
26
|
+
| "buildr-1.4.8-java.gem":http://www.apache.org/dyn/closer.cgi/buildr/1.4.8/buildr-1.4.8-java.gem | "68679f89f7e0f90bb4446965d1184e0a":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8-java.gem.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8-java.gem.asc |
|
27
|
+
| "buildr-1.4.8-x86-mswin32.gem":http://www.apache.org/dyn/closer.cgi/buildr/1.4.8/buildr-1.4.8-x86-mswin32.gem | "40abdb4c2ff2bb7232822198e6882ee0":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8-x86-mswin32.gem.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8-x86-mswin32.gem.asc |
|
28
|
+
| "buildr-1.4.8.gem":http://www.apache.org/dyn/closer.cgi/buildr/1.4.8/buildr-1.4.8.gem | "0e92c281a59d3fc475f1a0184200a70f":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8.gem.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8.gem.asc |
|
29
|
+
| "buildr-1.4.8.tgz":http://www.apache.org/dyn/closer.cgi/buildr/1.4.8/buildr-1.4.8.tgz | "f19029a7dba62917978b42652328bf6c":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8.tgz.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8.tgz.asc |
|
30
|
+
| "buildr-1.4.8.zip":http://www.apache.org/dyn/closer.cgi/buildr/1.4.8/buildr-1.4.8.zip | "8a484f5ec930eba0b93fe9079fd41079":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8.zip.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.8/buildr-1.4.8.zip.asc |
|
31
|
+
|
32
|
+
p>. ("Release signing keys":http://www.apache.org/dist/buildr/1.4.8/KEYS)
|
33
|
+
|
34
|
+
|
35
|
+
h3. buildr 1.4.7 (2012-05-29)
|
36
|
+
|
37
|
+
|_. Package |_. MD5 Checksum |_. PGP |
|
38
|
+
| "buildr-1.4.7-x86-mswin32.gem":http://www.apache.org/dyn/closer.cgi/buildr/1.4.7/buildr-1.4.7-x86-mswin32.gem | "062031b8890b489673be814ca08598cb":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7-x86-mswin32.gem.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7-x86-mswin32.gem.asc |
|
39
|
+
| "buildr-1.4.7-java.gem":http://www.apache.org/dyn/closer.cgi/buildr/1.4.7/buildr-1.4.7-java.gem | "a7cfac76a53fb6deaac0b12acc02a82c":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7-java.gem.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7-java.gem.asc |
|
40
|
+
| "buildr-1.4.7.gem":http://www.apache.org/dyn/closer.cgi/buildr/1.4.7/buildr-1.4.7.gem | "85a8ddb9ae752e04c0416e2f1d30d064":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7.gem.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7.gem.asc |
|
41
|
+
| "buildr-1.4.7.tgz":http://www.apache.org/dyn/closer.cgi/buildr/1.4.7/buildr-1.4.7.tgz | "576789cb7d10216cc3b7383441fd2596":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7.tgz.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7.tgz.asc |
|
42
|
+
| "buildr-1.4.7.zip":http://www.apache.org/dyn/closer.cgi/buildr/1.4.7/buildr-1.4.7.zip | "e414f72706885a695a380693e9c530c7":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7.zip.md5 | "Sig":http://www.apache.org/dist/buildr/1.4.7/buildr-1.4.7.zip.asc |
|
43
|
+
|
44
|
+
p>. ("Release signing keys":http://www.apache.org/dist/buildr/1.4.7/KEYS)
|
45
|
+
|
46
|
+
|
23
47
|
h3. buildr 1.4.6 (2011-06-22)
|
24
48
|
|
25
49
|
|_. Package |_. MD5 Checksum |_. PGP |
|
data/doc/index.textile
CHANGED
@@ -46,29 +46,49 @@ So let's get started. You can "read the documentation online":quick_start.html,
|
|
46
46
|
|
47
47
|
h2(#news). What's New
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
*
|
52
|
-
* Added:
|
53
|
-
* Fixed: BUILDR-
|
54
|
-
*
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
*
|
68
|
-
* Fixed: BUILDR-
|
69
|
-
* Fixed: BUILDR-
|
70
|
-
|
71
|
-
|
49
|
+
Highlights from Buildr 1.4.8 (Nov 11th, 2012)
|
50
|
+
|
51
|
+
* Change: Revert to importing non-verbose FileUtils utility methods to match buildr 1.4.6 release and earlier.
|
52
|
+
* Added: Experimental support for jacoco code coverage tool.
|
53
|
+
* Fixed: BUILDR-655 - Support JDK1.7 under OSX
|
54
|
+
* Change: Updated dependency versions;
|
55
|
+
- builder (3.1.3)
|
56
|
+
- rubyforge (2.0.4)
|
57
|
+
- net-ssh (2.6.0)
|
58
|
+
- hoe (3.1.0)
|
59
|
+
- rjb (1.4.2)
|
60
|
+
- rdoc (3.12)
|
61
|
+
- xml-simple (1.1.1)
|
62
|
+
- rspec-expectations (2.11.3)
|
63
|
+
- rspec-mocks (2.11.3)
|
64
|
+
- rspec-core (2.11.1)
|
65
|
+
- rspec (2.11.0)
|
66
|
+
- rubyzip (0.9.9)
|
67
|
+
* Added: BUILDR-652 Generate buildfile from Eclipse workspace. (Niklaus Giger)
|
68
|
+
* Fixed: BUILDR-627 Support explicitly listed source files in buildr cc task. (Christopher Tiwald)
|
69
|
+
* Fixed: BUILDR-606 Transitive artifact resolution should not include artifacts in 'provided' scope in poms to
|
70
|
+
match maven behaviour. (Julio Arias)
|
71
|
+
* Change: BUILDR-640 Enable building jekyll and rdoc under more rubies. (Niklaus Giger)
|
72
|
+
* Change: Mark Buildr:Bnd.remote_repository as deprecated as dependencies appear in maven central.
|
73
|
+
* Added: BUILDR-654 Add the ability to configure the version of BND used by bnd addon. (Niklaus Giger)
|
74
|
+
* Added: Create the git_auto_version addon that automatically specifies a version for a git project based
|
75
|
+
on git describe.
|
76
|
+
* Added: Integrate with Zinc (incremental compilation wrapper for scalac 2.9+)
|
77
|
+
* Change: Default to Scala 2.9.2, ScalaTest 1.8, Scala Specs2 1.11,
|
78
|
+
ScalaCheck 1.10.0.
|
79
|
+
* Change: Scala artifact repository changed to
|
80
|
+
http://oss.sonatype.org/content/repositories/releases
|
81
|
+
* Added: BUILDR-645 Support Mercurial as a version control system (Tan Quach)
|
82
|
+
* Fixed: BUILDR-646 TGZ files do not keep their permissions when extracted
|
83
|
+
via Buildr::Unzip#extract
|
84
|
+
* Added: Add add_exploded_ear_artifact and add_exploded_ejb_artifact to the idea project extension.
|
85
|
+
* Change: Default to using Checkstyle 5.5 in the checkstyle addon.
|
86
|
+
* Fixed: Fix the add_exploded_war_artifact method on the idea project by adding in missing method
|
87
|
+
`partition_dependencies`.
|
88
|
+
* Fixed: Fix the extension of the gwt plugin so that it can be required as an addon.
|
89
|
+
* Fixed: Fix the undefined default_web_xml variable in the add_web_facet method on the idea project.
|
90
|
+
|
91
|
+
This is a partial list -- see the "CHANGELOG":CHANGELOG for full details.
|
72
92
|
|
73
93
|
h2(#notices). Credits & Notices
|
74
94
|
|
data/doc/languages.textile
CHANGED
@@ -189,7 +189,7 @@ You may also determine the version in use by querying the @Scala.version@ attrib
|
|
189
189
|
Scala.version # => '2.8.0'
|
190
190
|
{% endhighlight %}
|
191
191
|
|
192
|
-
Regardless of how the Scala version is determined, if you have the same Scala version installed on your system and the SCALA_HOME environment variable points to it, then your local installation will be used. Otherwise, Buildr will download it from the "
|
192
|
+
Regardless of how the Scala version is determined, if you have the same Scala version installed on your system and the SCALA_HOME environment variable points to it, then your local installation will be used. Otherwise, Buildr will download it from the "Sonatype repository":http://oss.sonatype.org/content/repositories/releases which is automatically enlisted when you @require@ Scala. The only drawback if you don't have a local installation is the FSC compiler won't be available.
|
193
193
|
|
194
194
|
p(tip). For Mac users, if you have installed Scala via "MacPorts":http://www.macports.org/ Buildr will look in the
|
195
195
|
@/opt/local/share/scala/@ directory if you have not set @SCALA_HOME@.
|
@@ -202,7 +202,7 @@ The Scala compiler looks for source files in the project's @src/main/scala@ dir
|
|
202
202
|
Any Java source files found in the @src/main/java@ directory will be compiled using the Scala/Java joint compiler into the @target/classes@ directory. Both the Java and the Scala sources are compiled with an inclusive classpath, meaning that you may have a Java class which depends upon a Scala class which depends upon a Java class, all within the same project. The Java sources will be compiled with the same dependencies as the Scala sources with the addition of the @scala-library.jar@ file as required for Scala interop.
|
203
203
|
|
204
204
|
Note that you cannot use the Groovy *and* the Scala joint compilers in the same project. If both are required, the Groovy joint compiler will take precedence.
|
205
|
-
|
205
|
+
|
206
206
|
If you point the @compile@ task at any other source directory, it will use the Scala compiler if any of these directories contains files with the extension @.scala@. The joint compilation of Java sources may only be pointed at an alternative directory using the feature to redefine the @_(:src, :main, :java)@ path.
|
207
207
|
|
208
208
|
When using the Scala compiler, if you don't specify the packaging type, it defaults to JAR.
|
@@ -218,18 +218,25 @@ The Scala compiler supports the following options:
|
|
218
218
|
| @:target@ | Bytecode compatibility (e.g. '1.4'). |
|
219
219
|
| @:warnings@ | Issue warnings when compiling. True when running in verbose mode. |
|
220
220
|
| @:javac@ | A hash of options passed to the @javac@ compiler verbatim. |
|
221
|
+
| @:incremental@ | If true, enables incremental compilation using Zinc. |
|
221
222
|
|
222
223
|
h4. Fast Scala Compiler
|
223
224
|
|
224
225
|
You may use @fsc@, the Fast Scala Compiler, which submits compilation jobs to a compilation daemon, by setting the environment variable @USE_FSC@ to @yes@. Note that @fsc@ _may_ cache class libraries -- don't forget to run @fsc -reset@ if you upgrade a library.
|
225
226
|
|
227
|
+
(Note @fsc@ is not compatible with @zinc@ incremental compilation.)
|
228
|
+
|
226
229
|
h4. Rebuild detection
|
227
230
|
|
231
|
+
*Scala 2.7*
|
232
|
+
|
228
233
|
The Scala 2.7 compiler task assumes that each @.scala@ source file generates a corresponding @.class@ file under @target/classes@ (or @target/test/classses@ for tests). The source may generate more @.class@ files if it contains more than one class, object, trait or for anonymous functions and closures.
|
229
234
|
|
230
235
|
For example, @src/main/scala/com/example/MyClass.scala@ should generate at least @target/classes/com/example/MyClass.class@. If that it not the case, Buildr will always recompile your sources because it will assume this is a new source file that has never been compiled before.
|
231
236
|
|
232
|
-
|
237
|
+
*Scala 2.8*
|
238
|
+
|
239
|
+
Scala 2.8 provides a substantially better interface for implementing change detection. Whenever you use Scala 2.8 (see below), Buildr will auto-detect the version and enable this feature dynamically. After the @compile@ task runs, the relevant target directory will contain a @.scala-deps@ file, generated by the Scala compiler. The manner in which this file is used can be configured using the @:make@ compiler option. The following values are available:
|
233
240
|
|
234
241
|
* @:all@ - Disables compiler-level change detection
|
235
242
|
* @:changed@ - Only build changed files without considering file dependencies
|
@@ -247,11 +254,49 @@ Effectively, this is telling the Scala compiler to ignore the information it has
|
|
247
254
|
|
248
255
|
To avoid unusual behavior, compiler-level change detection is disabled whenever the joint Scala-Java compiler is used. Thus, any @.java@ files in a project handled by the Scala compiler will cause the @:make@ option to be ignored and revert to the exclusive use of Buildr's change detection mechanism (as described above).
|
249
256
|
|
250
|
-
|
257
|
+
*Scala 2.9 and later*
|
258
|
+
|
259
|
+
Starting with Buildr 1.4.8, Buildr integrates with the "Zinc":https://github.com/typesafehub/zinc incremental compilation wrapper for @scalac@. Incremental compilation can be enabled 3 ways,
|
260
|
+
|
261
|
+
1) By setting the compiler's option directly,
|
262
|
+
|
263
|
+
{% highlight ruby %}
|
264
|
+
compile.using :incremental => true
|
265
|
+
|
266
|
+
compile.options.incremental = true # same as above
|
267
|
+
{% endhighlight %}
|
251
268
|
|
252
|
-
|
269
|
+
Note that this won't enable incremental compilation for both @compile@ and @test.compile@, you would have to set options on both. For this reason, it's recommended that you set the option on the project instead (see below).
|
253
270
|
|
254
|
-
|
271
|
+
2) By setting the project's @scalac_options.incremental@,
|
272
|
+
|
273
|
+
{% highlight ruby %}
|
274
|
+
project.scalac_options.incremental = true
|
275
|
+
{% endhighlight %}
|
276
|
+
|
277
|
+
3) By setting the global @scalac.incremental@ option,
|
278
|
+
|
279
|
+
in your @buildfile@:
|
280
|
+
|
281
|
+
{% highlight ruby %}
|
282
|
+
Buildr.settings.build['scalac.incremental'] = true
|
283
|
+
{% endhighlight %}
|
284
|
+
|
285
|
+
or in your @build.yaml@:
|
286
|
+
|
287
|
+
{% highlight yaml %}
|
288
|
+
scalac.incremental: true
|
289
|
+
{% endhighlight %}
|
290
|
+
|
291
|
+
h4. Support for different Scala versions
|
292
|
+
|
293
|
+
Buildr defaults to the latest stable Scala version available at the time of the release if neither @SCALA_HOME@ nor the @scala.version@ build property are set.
|
294
|
+
|
295
|
+
If your @SCALA_HOME@ environment variable points to an installation of Scala (2.7, 2.8, 2.9, ...), then Buildr will use that compiler and enable version-specific features.
|
296
|
+
|
297
|
+
You may select the Scala version by dynamically in different ways,
|
298
|
+
|
299
|
+
1) By reassigning @SCALA_HOME@ at the top of the buildfile (*before* @require 'buildr/scala'@):
|
255
300
|
|
256
301
|
{% highlight ruby %}
|
257
302
|
ENV['SCALA_HOME'] = ENV['SCALA28_HOME']
|
@@ -260,6 +305,20 @@ require 'buildr/scala'
|
|
260
305
|
...
|
261
306
|
{% endhighlight %}
|
262
307
|
|
308
|
+
2) By setting the @scala.version@ build property in your build.yaml file:
|
309
|
+
|
310
|
+
{% highlight yaml %}
|
311
|
+
scala.version: 2.9.1.RC1
|
312
|
+
{% endhighlight %}
|
313
|
+
|
314
|
+
3) By setting the @scala.version@ build property in your buildfile:
|
315
|
+
|
316
|
+
{% highlight ruby %}
|
317
|
+
require 'buildr/scala'
|
318
|
+
...
|
319
|
+
Buildr.settings.build['scala.version'] = '2.10-M6'
|
320
|
+
{% endhighlight %}
|
321
|
+
|
263
322
|
h3. Testing with Scala
|
264
323
|
|
265
324
|
Buildr supports two main Scala testing frameworks: "ScalaTest":http://www.artima.com/scalatest and "Specs":http://code.google.com/p/specs/. "ScalaCheck":http://code.google.com/p/scalacheck/ is also supported within the confines of either of these two frameworks. Thus, your Specs may use ScalaCheck properties, as may your ScalaTest suites.
|
data/doc/more_stuff.textile
CHANGED
@@ -349,6 +349,8 @@ You can place this code inside @buildr.rb@ in the @.buildr@ directory under your
|
|
349
349
|
|
350
350
|
h2(#eclipse). Eclipse
|
351
351
|
|
352
|
+
h3. Use Apache Buildr to create Eclipse projects
|
353
|
+
|
352
354
|
If you're using Eclipse, you can generate @.classpath@ and @.project@ from your Buildfile and use them to create a project in your workspace:
|
353
355
|
|
354
356
|
{% highlight sh %}
|
@@ -379,6 +381,16 @@ end
|
|
379
381
|
|
380
382
|
One more thing; these settings are inherited hierarchically so you may set them on a parent project if you want to share them across different projects.
|
381
383
|
|
384
|
+
h3. Use Apache Buildr to create a buildfile from an Eclipse workspace
|
385
|
+
|
386
|
+
If you're using Eclipse, you can generate a @buildfile@ from a directory which contains one (or more) Eclipse projects somewhere in its sub-directories.
|
387
|
+
|
388
|
+
{% highlight sh %}
|
389
|
+
$ buildr --generate /path/to/my_project
|
390
|
+
{% endhighlight %}
|
391
|
+
|
392
|
+
This creates a basic buildfile with a main project called 'my_project'. The buildfile contains a skeleton for compiling the Eclipse projects. If you want to automate dependency tracking via OSGi have a look at the "buildr4osgi":http://oss.intalio.com/buildr4osgi/ project. Support for building Eclipse RCP applications, running PDE tests and P2-sites is currently lacking in Buildr.
|
393
|
+
|
382
394
|
h2(#idea). IntelliJ IDEA
|
383
395
|
|
384
396
|
If you use IntelliJ IDEA, you can generate project files by issuing:
|
data/doc/packaging.textile
CHANGED
@@ -347,6 +347,8 @@ The bundle packaging format is included as an addon so the build file must expli
|
|
347
347
|
require "buildr/bnd"
|
348
348
|
|
349
349
|
repositories.remote << Buildr::Bnd.remote_repository
|
350
|
+
# uncomment the next version to override the version of bnd
|
351
|
+
# Buildr::Bnd.version = '0.0.384'
|
350
352
|
|
351
353
|
define 'myProject' do
|
352
354
|
...
|
@@ -166,7 +166,7 @@ Build settings can be retreived using the @Buildr.settings.build@ accessor.
|
|
166
166
|
|
167
167
|
h2(#variable). Non constant settings
|
168
168
|
|
169
|
-
Before loading the Buildfile, Buildr will attempt to load two other files: the @buildr.rb@ file in the @.buildr@ directory under your home directory, followed by the @buildr.rb@ file it finds in the build directory.
|
169
|
+
Before loading the Buildfile, Buildr will attempt to load two other files: the @buildr.rb@ file in the @.buildr@ directory under your home directory, followed by the @_buildr.rb@ (or @.buildr.rb@) file it finds in the build directory.
|
170
170
|
|
171
171
|
The loading order allows you to place global settings that affect all your builds in your @buildr.rb@, but also over-ride those with settings for a given project.
|
172
172
|
|
data/lib/buildr.rb
CHANGED
@@ -82,10 +82,6 @@ require 'buildr/java/doc'
|
|
82
82
|
require 'buildr/java/deprecated'
|
83
83
|
require 'buildr/ide/idea'
|
84
84
|
require 'buildr/ide/eclipse'
|
85
|
-
# Order is significant for auto-detection, from most specific to least
|
86
|
-
require 'buildr/ide/eclipse/plugin'
|
87
|
-
require 'buildr/ide/eclipse/scala'
|
88
|
-
require 'buildr/ide/eclipse/java'
|
89
85
|
|
90
86
|
# Methods defined in Buildr are both instance methods (e.g. when included in Project)
|
91
87
|
# and class methods when invoked like Buildr.artifacts().
|
@@ -387,23 +387,31 @@ module Buildr
|
|
387
387
|
end
|
388
388
|
|
389
389
|
def ask_generate_buildfile
|
390
|
-
source = choose do |menu|
|
390
|
+
source, fromEclipse = choose do |menu|
|
391
391
|
menu.header = "To use Buildr you need a buildfile. Do you want me to create one?"
|
392
|
-
menu.choice("From
|
393
|
-
menu.choice("From
|
394
|
-
menu.choice("
|
392
|
+
menu.choice("From eclipse .project files") { [Dir.pwd, true] } if Generate.has_eclipse_project?
|
393
|
+
menu.choice("From Maven2 POM file") { ['pom.xml', false] } if File.exist?('pom.xml')
|
394
|
+
menu.choice("From directory structure") { [Dir.pwd, false] }
|
395
|
+
menu.choice("Cancel") {}
|
395
396
|
end
|
396
397
|
if source
|
397
|
-
buildfile = raw_generate_buildfile(source)
|
398
|
+
buildfile = raw_generate_buildfile(source, fromEclipse)
|
398
399
|
[buildfile, File.dirname(buildfile)]
|
399
400
|
end
|
400
401
|
end
|
401
402
|
|
402
|
-
def raw_generate_buildfile(source)
|
403
|
+
def raw_generate_buildfile(source, fromEclipse=Generate.has_eclipse_project?)
|
403
404
|
# We need rakefile to be known, for settings.build to be accessible.
|
404
405
|
@rakefile = File.expand_path(DEFAULT_BUILDFILES.first)
|
405
406
|
fail "Buildfile already exists" if File.exist?(@rakefile) && !(tty_output? && agree('Buildfile exists, overwrite?'))
|
406
|
-
script =
|
407
|
+
script = nil
|
408
|
+
if fromEclipse
|
409
|
+
script = Generate.from_eclipse(source)
|
410
|
+
elsif File.directory?(source)
|
411
|
+
script = Generate.from_directory(source)
|
412
|
+
else
|
413
|
+
script = Generate.from_maven2_pom(source)
|
414
|
+
end
|
407
415
|
File.open @rakefile, 'w' do |file|
|
408
416
|
file.puts script
|
409
417
|
end
|
@@ -593,7 +601,7 @@ end
|
|
593
601
|
HighLine.use_color = false
|
594
602
|
if $stdout.isatty
|
595
603
|
begin
|
596
|
-
require 'Win32/Console/ANSI' if
|
604
|
+
require 'Win32/Console/ANSI' if RbConfig::CONFIG['host_os'] =~ /mswin|win32|dos|cygwin|mingw/i
|
597
605
|
HighLine.use_color = true
|
598
606
|
rescue LoadError
|
599
607
|
end
|
@@ -689,3 +697,28 @@ module RakeFileUtils #:nodoc:
|
|
689
697
|
EOS
|
690
698
|
end
|
691
699
|
end
|
700
|
+
|
701
|
+
|
702
|
+
# It is unclear why this needs to be included on windows but it does seem to be needed.
|
703
|
+
# But it can not be included under linux as it rewrites the install command
|
704
|
+
if Buildr::Util.win_os?
|
705
|
+
|
706
|
+
module Rake::DSL #:nodoc:
|
707
|
+
FileUtils::OPT_TABLE.each do |name, opts|
|
708
|
+
default_options = []
|
709
|
+
if opts.include?(:verbose) || opts.include?("verbose")
|
710
|
+
default_options << ':verbose => RakeFileUtils.verbose_flag == true'
|
711
|
+
end
|
712
|
+
next if default_options.empty?
|
713
|
+
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
714
|
+
def #{name}( *args, &block )
|
715
|
+
super(
|
716
|
+
*rake_merge_option(args,
|
717
|
+
#{default_options.join(', ')}
|
718
|
+
), &block)
|
719
|
+
end
|
720
|
+
EOS
|
721
|
+
end
|
722
|
+
end
|
723
|
+
|
724
|
+
end
|
data/lib/buildr/core/build.rb
CHANGED
@@ -100,6 +100,58 @@ module Buildr
|
|
100
100
|
|
101
101
|
end
|
102
102
|
|
103
|
+
module Hg #:nodoc:
|
104
|
+
module_function
|
105
|
+
|
106
|
+
# :call-seq:
|
107
|
+
# hg(*args)
|
108
|
+
#
|
109
|
+
# Executes a Mercurial (hg) command passing through the args and returns the output.
|
110
|
+
# Throws exception if the exit status is not zero. For example:
|
111
|
+
# hg 'commit'
|
112
|
+
# hg 'update', 'default'
|
113
|
+
def hg(*args)
|
114
|
+
cmd = "hg #{args.shift} #{args.map { |arg| arg.inspect }.join(' ')}"
|
115
|
+
output = `#{cmd}`
|
116
|
+
fail "Mercurial command \"#{cmd}\" failed with status #{$?.exitstatus}\n#{output}" unless $?.exitstatus == 0
|
117
|
+
return output
|
118
|
+
end
|
119
|
+
|
120
|
+
# Return a list of uncommitted / untracked files as reported by hg status
|
121
|
+
# The codes used to show the status of files are:
|
122
|
+
# M = modified
|
123
|
+
# A = added
|
124
|
+
# R = removed
|
125
|
+
# C = clean
|
126
|
+
# ! = missing (deleted by non-hg command, but still tracked)
|
127
|
+
# ? = not tracked
|
128
|
+
# I = ignored
|
129
|
+
# = origin of the previous file listed as A (added)
|
130
|
+
def uncommitted_files
|
131
|
+
`hg status`.scan(/^(A|M|R|!|\?) (\S.*)$/).map{ |match| match.last.split.last }
|
132
|
+
end
|
133
|
+
|
134
|
+
# Commit the given file with a message. The file should already be added to the Mercurial index.
|
135
|
+
def commit(file, message)
|
136
|
+
hg 'commit', '-m', message, file
|
137
|
+
end
|
138
|
+
|
139
|
+
# Update the remote branch with the local commits
|
140
|
+
# This will push the current remote destination and current branch.
|
141
|
+
def push
|
142
|
+
hg 'push'
|
143
|
+
end
|
144
|
+
|
145
|
+
# Return the name of the current local branch or nil if none.
|
146
|
+
def current_branch
|
147
|
+
hg('branch').to_s.strip
|
148
|
+
end
|
149
|
+
|
150
|
+
# Return the aliases (if any) of any remote repositories which the current local branch tracks
|
151
|
+
def remote
|
152
|
+
hg('paths').scan(/^(?:default|default-push)\s+=\s+(\S.*)/).map{ |match| match.last }
|
153
|
+
end
|
154
|
+
end
|
103
155
|
|
104
156
|
module Git #:nodoc:
|
105
157
|
module_function
|
@@ -415,6 +467,54 @@ module Buildr
|
|
415
467
|
end
|
416
468
|
|
417
469
|
|
470
|
+
class HgRelease < Release
|
471
|
+
class << self
|
472
|
+
def applies_to?
|
473
|
+
if File.exist? '.hg/requires'
|
474
|
+
true
|
475
|
+
else
|
476
|
+
curr_pwd = Dir.pwd
|
477
|
+
Dir.chdir('..') do
|
478
|
+
return false if curr_pwd == Dir.pwd # Means going up one level is not possible.
|
479
|
+
applies_to?
|
480
|
+
end
|
481
|
+
end
|
482
|
+
end
|
483
|
+
end
|
484
|
+
|
485
|
+
# Fails if one of these 2 conditions are not met:
|
486
|
+
# 1. The reository is not 'clean'; no content staged or unstaged
|
487
|
+
# 2. The repository is only a local repository and has no remote refs
|
488
|
+
def check
|
489
|
+
super
|
490
|
+
info "Working in branch '#{Hg.current_branch}'"
|
491
|
+
uncommitted = Hg.uncommitted_files
|
492
|
+
fail "Uncommitted files violate the First Principle Of Release!\n#{uncommitted.join("\n")}" unless uncommitted.empty?
|
493
|
+
fail "You are releasing from a local branch that does not track a remote!" if Hg.remote.empty?
|
494
|
+
end
|
495
|
+
|
496
|
+
# Tag this release in Mercurial
|
497
|
+
def tag_release(tag)
|
498
|
+
unless this_version == extract_version
|
499
|
+
info "Committing buildfile with version number #{extract_version}"
|
500
|
+
Hg.commit File.basename(Buildr.application.buildfile.to_s), message
|
501
|
+
Hg.push if Hg.remote
|
502
|
+
end
|
503
|
+
info "Tagging release #{tag}"
|
504
|
+
Hg.hg 'tag', tag, '-m', "[buildr] Cutting release #{tag}"
|
505
|
+
Hg.push if Hg.remote
|
506
|
+
end
|
507
|
+
|
508
|
+
# Update buildfile with next version number
|
509
|
+
def update_version_to_next
|
510
|
+
super
|
511
|
+
info "Current version is now #{extract_version}"
|
512
|
+
Hg.commit File.basename(Buildr.application.buildfile.to_s), message
|
513
|
+
Hg.push if Hg.remote
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
|
418
518
|
class GitRelease < Release
|
419
519
|
class << self
|
420
520
|
def applies_to?
|
@@ -430,7 +530,7 @@ module Buildr
|
|
430
530
|
end
|
431
531
|
end
|
432
532
|
|
433
|
-
# Fails if one of
|
533
|
+
# Fails if one of these 2 conditions are not met:
|
434
534
|
# 1. the repository is clean: no content staged or unstaged
|
435
535
|
# 2. some remote repositories are defined but the current branch does not track any
|
436
536
|
def check
|
@@ -491,6 +591,7 @@ module Buildr
|
|
491
591
|
end
|
492
592
|
end
|
493
593
|
|
594
|
+
Release.add HgRelease
|
494
595
|
Release.add SvnRelease
|
495
596
|
Release.add GitRelease
|
496
597
|
|