bpm 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/.gitmodules +0 -0
- data/Gemfile +16 -0
- data/README.md +55 -0
- data/TODO.md +3 -0
- data/bin/bpm +8 -0
- data/bpm.gemspec +41 -0
- data/lib/bpm.rb +18 -0
- data/lib/bpm/cli.rb +6 -0
- data/lib/bpm/cli/base.rb +358 -0
- data/lib/bpm/cli/owner.rb +46 -0
- data/lib/bpm/credentials.rb +36 -0
- data/lib/bpm/default.json +9 -0
- data/lib/bpm/generator.rb +69 -0
- data/lib/bpm/init_generator.rb +43 -0
- data/lib/bpm/libgems_ext.rb +11 -0
- data/lib/bpm/libgems_ext/config_file.rb +33 -0
- data/lib/bpm/libgems_ext/dependency_installer.rb +150 -0
- data/lib/bpm/libgems_ext/installer.rb +39 -0
- data/lib/bpm/libgems_ext/libgems.rb +39 -0
- data/lib/bpm/libgems_ext/spec_fetcher.rb +11 -0
- data/lib/bpm/local.rb +76 -0
- data/lib/bpm/package.rb +277 -0
- data/lib/bpm/pipeline.rb +100 -0
- data/lib/bpm/pipeline/directive_processor.rb +47 -0
- data/lib/bpm/pipeline/generated_asset.rb +68 -0
- data/lib/bpm/pipeline/transport_processor.rb +32 -0
- data/lib/bpm/project.rb +427 -0
- data/lib/bpm/project_generator.rb +34 -0
- data/lib/bpm/remote.rb +104 -0
- data/lib/bpm/repository.rb +18 -0
- data/lib/bpm/server.rb +44 -0
- data/lib/bpm/version.rb +3 -0
- data/spec/cli/add_spec.rb +159 -0
- data/spec/cli/build_spec.rb +87 -0
- data/spec/cli/fetch_spec.rb +135 -0
- data/spec/cli/fetched_spec.rb +52 -0
- data/spec/cli/init_spec.rb +50 -0
- data/spec/cli/list_spec.rb +74 -0
- data/spec/cli/login_spec.rb +110 -0
- data/spec/cli/new_spec.rb +92 -0
- data/spec/cli/owner_spec.rb +114 -0
- data/spec/cli/push_spec.rb +73 -0
- data/spec/cli/remove_spec.rb +84 -0
- data/spec/cli/unpack_spec.rb +72 -0
- data/spec/cli/unyank_spec.rb +73 -0
- data/spec/cli/yank_spec.rb +73 -0
- data/spec/credentials_spec.rb +23 -0
- data/spec/fixtures/badrake-0.8.7.spd +0 -0
- data/spec/fixtures/builder-3.0.0.spd +0 -0
- data/spec/fixtures/bundler-1.1.pre.spd +0 -0
- data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
- data/spec/fixtures/core-test-0.4.9.spd +0 -0
- data/spec/fixtures/core-test/bin/cot +3 -0
- data/spec/fixtures/core-test/lib/main.js +1 -0
- data/spec/fixtures/core-test/package.json +46 -0
- data/spec/fixtures/core-test/resources/runner.css +1 -0
- data/spec/fixtures/core-test/tests/test.js +1 -0
- data/spec/fixtures/custom_generator-1.0.spd +0 -0
- data/spec/fixtures/custom_generator/lib/main.js +1 -0
- data/spec/fixtures/custom_generator/package.json +12 -0
- data/spec/fixtures/custom_generator/templates/init/project.json +19 -0
- data/spec/fixtures/custom_generator/templates/project/app.js +1 -0
- data/spec/fixtures/custom_generator/templates/project/lib/main.js +0 -0
- data/spec/fixtures/custom_generator/templates/project_generator.rb +20 -0
- data/spec/fixtures/hello_world/LICENSE +19 -0
- data/spec/fixtures/hello_world/README.md +21 -0
- data/spec/fixtures/hello_world/assets/bpm_packages.js +13 -0
- data/spec/fixtures/hello_world/assets/bpm_styles.css +14 -0
- data/spec/fixtures/hello_world/assets/papa-smurf.jpg +0 -0
- data/spec/fixtures/hello_world/hello_world.json +20 -0
- data/spec/fixtures/hello_world/lib/main.js +9 -0
- data/spec/fixtures/hello_world/packages/custom_package/assets/dummy.txt +1 -0
- data/spec/fixtures/hello_world/packages/custom_package/css/sample_styles.css +3 -0
- data/spec/fixtures/hello_world/packages/custom_package/custom_dir/basic-module.js +1 -0
- data/spec/fixtures/hello_world/packages/custom_package/lib/main.js +1 -0
- data/spec/fixtures/hello_world/packages/custom_package/package.json +22 -0
- data/spec/fixtures/hello_world/tests/main-test.js +8 -0
- data/spec/fixtures/highline-1.6.1.spd +0 -0
- data/spec/fixtures/ivory-0.0.1.spd +0 -0
- data/spec/fixtures/jquery-1.4.3.spd +0 -0
- data/spec/fixtures/optparse-1.0.1.spd +0 -0
- data/spec/fixtures/rake-0.8.6.spd +0 -0
- data/spec/fixtures/rake-0.8.7.spd +0 -0
- data/spec/fixtures/simple_hello/assets/bpm_packages.js +1 -0
- data/spec/fixtures/simple_hello/lib/main.js +1 -0
- data/spec/fixtures/spade-0.5.0.spd +0 -0
- data/spec/fixtures/src/README.txt +1 -0
- data/spec/fixtures/src/bundler-1.1.pre/.gitignore +22 -0
- data/spec/fixtures/src/bundler-1.1.pre/CHANGELOG.md +646 -0
- data/spec/fixtures/src/bundler-1.1.pre/ISSUES.md +47 -0
- data/spec/fixtures/src/bundler-1.1.pre/LICENSE +21 -0
- data/spec/fixtures/src/bundler-1.1.pre/README.md +29 -0
- data/spec/fixtures/src/bundler-1.1.pre/UPGRADING.md +103 -0
- data/spec/fixtures/src/bundler-1.1.pre/bin/bundle +20 -0
- data/spec/fixtures/src/bundler-1.1.pre/lib/bundler.js +23 -0
- data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/definition.js +14 -0
- data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/dependency.js +15 -0
- data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/dsl.js +9 -0
- data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/ui.js +6 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/bundle-config.ronn +90 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/bundle-exec.ronn +111 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/bundle-install.ronn +314 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/bundle-package.ronn +59 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/bundle-update.ronn +176 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/bundle.ronn +80 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/gemfile.5.ronn +279 -0
- data/spec/fixtures/src/bundler-1.1.pre/man/index.txt +6 -0
- data/spec/fixtures/src/bundler-1.1.pre/package.json +19 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/bin/cake +0 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/bin/coffee +0 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/lib/coffee.js +0 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/lib/coffee/base.js +0 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/lib/coffee/mocha/chai.js +0 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/package.json +19 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/qunit/coffee/test.js +0 -0
- data/spec/fixtures/src/coffee-1.0.1.pre/qunit/test.js +0 -0
- data/spec/fixtures/src/jquery/lib/main.js +7179 -0
- data/spec/fixtures/src/jquery/package.json +15 -0
- data/spec/fixtures/src/rake-0.8.6/CHANGES +436 -0
- data/spec/fixtures/src/rake-0.8.6/MIT-LICENSE +21 -0
- data/spec/fixtures/src/rake-0.8.6/README +196 -0
- data/spec/fixtures/src/rake-0.8.6/Rakefile +430 -0
- data/spec/fixtures/src/rake-0.8.6/TODO +20 -0
- data/spec/fixtures/src/rake-0.8.6/bin/rake +31 -0
- data/spec/fixtures/src/rake-0.8.6/doc/command_line_usage.rdoc +102 -0
- data/spec/fixtures/src/rake-0.8.6/doc/example/Rakefile1 +38 -0
- data/spec/fixtures/src/rake-0.8.6/doc/example/Rakefile2 +35 -0
- data/spec/fixtures/src/rake-0.8.6/doc/example/a.c +6 -0
- data/spec/fixtures/src/rake-0.8.6/doc/example/b.c +6 -0
- data/spec/fixtures/src/rake-0.8.6/doc/example/main.c +11 -0
- data/spec/fixtures/src/rake-0.8.6/doc/glossary.rdoc +51 -0
- data/spec/fixtures/src/rake-0.8.6/doc/jamis.rb +591 -0
- data/spec/fixtures/src/rake-0.8.6/doc/proto_rake.rdoc +127 -0
- data/spec/fixtures/src/rake-0.8.6/doc/rake.1.gz +0 -0
- data/spec/fixtures/src/rake-0.8.6/doc/rakefile.rdoc +534 -0
- data/spec/fixtures/src/rake-0.8.6/doc/rational.rdoc +151 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.5.rdoc +53 -0
- data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.6.rdoc +55 -0
- data/spec/fixtures/src/rake-0.8.6/install.rb +88 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake.rb +2502 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/alt_system.rb +108 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/classic_namespace.rb +8 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/clean.rb +33 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/compositepublisher.rb +24 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/ftptools.rb +153 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/publisher.rb +75 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/sshpublisher.rb +47 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/sys.rb +209 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/gempackagetask.rb +97 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/loaders/makefile.rb +42 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/packagetask.rb +184 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/rake_test_loader.rb +5 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/rdoctask.rb +209 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/ruby182_test_unit_fix.rb +23 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/runtest.rb +23 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/tasklib.rb +23 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/testtask.rb +161 -0
- data/spec/fixtures/src/rake-0.8.6/lib/rake/win32.rb +55 -0
- data/spec/fixtures/src/rake-0.8.6/package.json +18 -0
- data/spec/fixtures/src/rake-0.8.6/test/capture_stdout.rb +26 -0
- data/spec/fixtures/src/rake-0.8.7/CHANGES +440 -0
- data/spec/fixtures/src/rake-0.8.7/MIT-LICENSE +21 -0
- data/spec/fixtures/src/rake-0.8.7/README +196 -0
- data/spec/fixtures/src/rake-0.8.7/Rakefile +430 -0
- data/spec/fixtures/src/rake-0.8.7/TODO +20 -0
- data/spec/fixtures/src/rake-0.8.7/bin/rake +31 -0
- data/spec/fixtures/src/rake-0.8.7/doc/command_line_usage.rdoc +102 -0
- data/spec/fixtures/src/rake-0.8.7/doc/example/Rakefile1 +38 -0
- data/spec/fixtures/src/rake-0.8.7/doc/example/Rakefile2 +35 -0
- data/spec/fixtures/src/rake-0.8.7/doc/example/a.c +6 -0
- data/spec/fixtures/src/rake-0.8.7/doc/example/b.c +6 -0
- data/spec/fixtures/src/rake-0.8.7/doc/example/main.c +11 -0
- data/spec/fixtures/src/rake-0.8.7/doc/glossary.rdoc +51 -0
- data/spec/fixtures/src/rake-0.8.7/doc/jamis.rb +591 -0
- data/spec/fixtures/src/rake-0.8.7/doc/proto_rake.rdoc +127 -0
- data/spec/fixtures/src/rake-0.8.7/doc/rake.1.gz +0 -0
- data/spec/fixtures/src/rake-0.8.7/doc/rakefile.rdoc +534 -0
- data/spec/fixtures/src/rake-0.8.7/doc/rational.rdoc +151 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.5.rdoc +53 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.6.rdoc +55 -0
- data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.7.rdoc +55 -0
- data/spec/fixtures/src/rake-0.8.7/install.rb +88 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake.rb +2506 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/alt_system.rb +108 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/classic_namespace.rb +8 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/clean.rb +33 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/compositepublisher.rb +24 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/ftptools.rb +153 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/publisher.rb +75 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/sshpublisher.rb +47 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/sys.rb +209 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/gempackagetask.rb +97 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/loaders/makefile.rb +42 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/packagetask.rb +184 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/rake_test_loader.rb +5 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/rdoctask.rb +209 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/ruby182_test_unit_fix.rb +23 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/runtest.rb +23 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/tasklib.rb +23 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/testtask.rb +161 -0
- data/spec/fixtures/src/rake-0.8.7/lib/rake/win32.rb +55 -0
- data/spec/fixtures/src/rake-0.8.7/package.json +18 -0
- data/spec/fixtures/src/rake-0.8.7/test/capture_stdout.rb +26 -0
- data/spec/fixtures/src/spade/lib/main.js +1 -0
- data/spec/fixtures/src/spade/package.json +15 -0
- data/spec/fixtures/transporter/lib/main.js +3 -0
- data/spec/fixtures/transporter/packages/transport/lib/wrapper.js +5 -0
- data/spec/fixtures/transporter/packages/transport/package.json +21 -0
- data/spec/fixtures/transporter/transporter.json +18 -0
- data/spec/gauntlet_spec.rb +33 -0
- data/spec/package_spec.rb +319 -0
- data/spec/pipeline_spec.rb +213 -0
- data/spec/project_spec.rb +130 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/cli.rb +93 -0
- data/spec/support/env.rb +18 -0
- data/spec/support/fake.rb +53 -0
- data/spec/support/fake_gem_server.rb +72 -0
- data/spec/support/fake_gemcutter.rb +50 -0
- data/spec/support/matchers.rb +32 -0
- data/spec/support/path.rb +63 -0
- data/spec/support/project.rb +43 -0
- data/templates/init/assets/bpm_packages.js +7 -0
- data/templates/init/assets/bpm_styles.css +7 -0
- data/templates/init/project.json +16 -0
- data/templates/project/LICENSE +19 -0
- data/templates/project/README.md +21 -0
- data/templates/project/app.js +1 -0
- data/templates/project/index.html +13 -0
- metadata +627 -0
@@ -0,0 +1,151 @@
|
|
1
|
+
= Why rake?
|
2
|
+
|
3
|
+
Ok, let me state from the beginning that I never intended to write this
|
4
|
+
code. I'm not convinced it is useful, and I'm not convinced anyone
|
5
|
+
would even be interested in it. All I can say is that Why's onion truck
|
6
|
+
must by been passing through the Ohio valley.
|
7
|
+
|
8
|
+
What am I talking about? ... A Ruby version of Make.
|
9
|
+
|
10
|
+
See, I can sense you cringing already, and I agree. The world certainly
|
11
|
+
doesn't need yet another reworking of the "make" program. I mean, we
|
12
|
+
already have "ant". Isn't that enough?
|
13
|
+
|
14
|
+
It started yesterday. I was helping a coworker fix a problem in one of
|
15
|
+
the Makefiles we use in our project. Not a particularly tough problem,
|
16
|
+
but during the course of the conversation I began lamenting some of the
|
17
|
+
shortcomings of make. In particular, in one of my makefiles I wanted to
|
18
|
+
determine the name of a file dynamically and had to resort to some
|
19
|
+
simple scripting (in Ruby) to make it work. "Wouldn't it be nice if you
|
20
|
+
could just use Ruby inside a Makefile" I said.
|
21
|
+
|
22
|
+
My coworker (a recent convert to Ruby) agreed, but wondered what it
|
23
|
+
would look like. So I sketched the following on the whiteboard...
|
24
|
+
|
25
|
+
"What if you could specify the make tasks in Ruby, like this ..."
|
26
|
+
|
27
|
+
task "build" do
|
28
|
+
java_compile(...args, etc ...)
|
29
|
+
end
|
30
|
+
|
31
|
+
"The task function would register "build" as a target to be made,
|
32
|
+
and the block would be the action executed whenever the build
|
33
|
+
system determined that it was time to do the build target."
|
34
|
+
|
35
|
+
We agreed that would be cool, but writing make from scratch would be WAY
|
36
|
+
too much work. And that was the end of that!
|
37
|
+
|
38
|
+
... Except I couldn't get the thought out of my head. What exactly
|
39
|
+
would be needed to make the about syntax work as a make file? Hmmm, you
|
40
|
+
would need to register the tasks, you need some way of specifying
|
41
|
+
dependencies between tasks, and some way of kicking off the process.
|
42
|
+
Hey! What if we did ... and fifteen minutes later I had a working
|
43
|
+
prototype of Ruby make, complete with dependencies and actions.
|
44
|
+
|
45
|
+
I showed the code to my coworker and we had a good laugh. It was just
|
46
|
+
about a page worth of code that reproduced an amazing amount of the
|
47
|
+
functionality of make. We were both truely stunned with the power of
|
48
|
+
Ruby.
|
49
|
+
|
50
|
+
But it didn't do everything make did. In particular, it didn't have
|
51
|
+
timestamp based file dependencies (where a file is rebuilt if any of its
|
52
|
+
prerequisite files have a later timestamp). Obviously THAT would be a
|
53
|
+
pain to add and so Ruby Make would remain an interesting experiment.
|
54
|
+
|
55
|
+
... Except as I walked back to my desk, I started thinking about what
|
56
|
+
file based dependecies would really need. Rats! I was hooked again,
|
57
|
+
and by adding a new class and two new methods, file/timestamp
|
58
|
+
dependencies were implemented.
|
59
|
+
|
60
|
+
Ok, now I was really hooked. Last night (during CSI!) I massaged the
|
61
|
+
code and cleaned it up a bit. The result is a bare-bones replacement
|
62
|
+
for make in exactly 100 lines of code.
|
63
|
+
|
64
|
+
For the curious, you can see it at ...
|
65
|
+
* doc/proto_rake.rdoc
|
66
|
+
|
67
|
+
Oh, about the name. When I wrote the example Ruby Make task on my
|
68
|
+
whiteboard, my coworker exclaimed "Oh! I have the perfect name: Rake ...
|
69
|
+
Get it? Ruby-Make. Rake!" He said he envisioned the tasks as leaves
|
70
|
+
and Rake would clean them up ... or something like that. Anyways, the
|
71
|
+
name stuck.
|
72
|
+
|
73
|
+
Some quick examples ...
|
74
|
+
|
75
|
+
A simple task to delete backup files ...
|
76
|
+
|
77
|
+
task :clean do
|
78
|
+
Dir['*~'].each {|fn| rm fn rescue nil}
|
79
|
+
end
|
80
|
+
|
81
|
+
Note that task names are symbols (they are slightly easier to type
|
82
|
+
than quoted strings ... but you may use quoted string if you would
|
83
|
+
rather). Rake makes the methods of the FileUtils module directly
|
84
|
+
available, so we take advantage of the <tt>rm</tt> command. Also note
|
85
|
+
the use of "rescue nil" to trap and ignore errors in the <tt>rm</tt>
|
86
|
+
command.
|
87
|
+
|
88
|
+
To run it, just type "rake clean". Rake will automatically find a
|
89
|
+
Rakefile in the current directory (or above!) and will invoke the
|
90
|
+
targets named on the command line. If there are no targets explicitly
|
91
|
+
named, rake will invoke the task "default".
|
92
|
+
|
93
|
+
Here's another task with dependencies ...
|
94
|
+
|
95
|
+
task :clobber => [:clean] do
|
96
|
+
rm_r "tempdir"
|
97
|
+
end
|
98
|
+
|
99
|
+
Task :clobber depends upon task :clean, so :clean will be run before
|
100
|
+
:clobber is executed.
|
101
|
+
|
102
|
+
Files are specified by using the "file" command. It is similar to the
|
103
|
+
task command, except that the task name represents a file, and the task
|
104
|
+
will be run only if the file doesn't exist, or if its modification time
|
105
|
+
is earlier than any of its prerequisites.
|
106
|
+
|
107
|
+
Here is a file based dependency that will compile "hello.cc" to
|
108
|
+
"hello.o".
|
109
|
+
|
110
|
+
file "hello.cc"
|
111
|
+
file "hello.o" => ["hello.cc"] do |t|
|
112
|
+
srcfile = t.name.sub(/\.o$/, ".cc")
|
113
|
+
sh %{g++ #{srcfile} -c -o #{t.name}}
|
114
|
+
end
|
115
|
+
|
116
|
+
I normally specify file tasks with string (rather than symbols). Some
|
117
|
+
file names can't be represented by symbols. Plus it makes the
|
118
|
+
distinction between them more clear to the casual reader.
|
119
|
+
|
120
|
+
Currently writing a task for each and every file in the project would be
|
121
|
+
tedious at best. I envision a set of libraries to make this job
|
122
|
+
easier. For instance, perhaps something like this ...
|
123
|
+
|
124
|
+
require 'rake/ctools'
|
125
|
+
Dir['*.c'].each do |fn|
|
126
|
+
c_source_file(fn)
|
127
|
+
end
|
128
|
+
|
129
|
+
where "c_source_file" will create all the tasks need to compile all the
|
130
|
+
C source files in a directory. Any number of useful libraries could be
|
131
|
+
created for rake.
|
132
|
+
|
133
|
+
That's it. There's no documentation (other than whats in this
|
134
|
+
message). Does this sound interesting to anyone? If so, I'll continue
|
135
|
+
to clean it up and write it up and publish it on RAA. Otherwise, I'll
|
136
|
+
leave it as an interesting excerise and a tribute to the power of Ruby.
|
137
|
+
|
138
|
+
Why /might/ rake be interesting to Ruby programmers. I don't know,
|
139
|
+
perhaps ...
|
140
|
+
|
141
|
+
* No weird make syntax (only weird Ruby syntax :-)
|
142
|
+
* No need to edit or read XML (a la ant)
|
143
|
+
* Platform independent build scripts.
|
144
|
+
* Will run anywhere Ruby exists, so no need to have "make" installed.
|
145
|
+
If you stay away from the "sys" command and use things like
|
146
|
+
'ftools', you can have a perfectly platform independent
|
147
|
+
build script. Also rake is only 100 lines of code, so it can
|
148
|
+
easily be packaged along with the rest of your code.
|
149
|
+
|
150
|
+
So ... Sorry for the long rambling message. Like I said, I never
|
151
|
+
intended to write this code at all.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
= Rake 0.4.14 Released
|
2
|
+
|
3
|
+
== Changes
|
4
|
+
|
5
|
+
Version 0.4.14 is a compatibility fix to allow Rake's test task to
|
6
|
+
work under Ruby 1.8.2. A change in the Test::Unit autorun feature
|
7
|
+
prevented Rake from running any tests. This release fixes the
|
8
|
+
problem.
|
9
|
+
|
10
|
+
Rake 0.4.14 is the recommended release for anyone using Ruby 1.8.2.
|
11
|
+
|
12
|
+
== What is Rake
|
13
|
+
|
14
|
+
Rake is a build tool similar to the make program in many ways. But
|
15
|
+
instead of cryptic make recipes, Rake uses standard Ruby code to
|
16
|
+
declare tasks and dependencies. You have the full power of a modern
|
17
|
+
scripting language built right into your build tool.
|
18
|
+
|
19
|
+
== Availability
|
20
|
+
|
21
|
+
Home Page:: http://rake.rubyforge.org/
|
22
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
23
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
= Rake 0.4.15 Released
|
2
|
+
|
3
|
+
== Changes
|
4
|
+
|
5
|
+
Version 0.4.15 is a bug fix update for the Ruby 1.8.2 compatibility
|
6
|
+
changes. This release includes:
|
7
|
+
|
8
|
+
* Fixed a bug that prevented the TESTOPTS flag from working with the
|
9
|
+
revised for 1.8.2 test task.
|
10
|
+
|
11
|
+
* Updated the docs on --trace to indicate that it also enables a full
|
12
|
+
backtrace on errors.
|
13
|
+
|
14
|
+
* Several fixes for new warnings generated.
|
15
|
+
|
16
|
+
== Mini-Roadmap
|
17
|
+
|
18
|
+
I will continue to issue Rake updates in the 0.4.xx series as new
|
19
|
+
Ruby-1.8.2 issues become manifest. Once the codebase stabilizes, I
|
20
|
+
will release a 0.5.0 version incorporating all the changes. If you
|
21
|
+
are not using Ruby-1.8.2 and wish to avoid version churn, I recommend
|
22
|
+
staying with a release prior to Rake-0.4.14.
|
23
|
+
|
24
|
+
== What is Rake
|
25
|
+
|
26
|
+
Rake is a build tool similar to the make program in many ways. But
|
27
|
+
instead of cryptic make recipes, Rake uses standard Ruby code to
|
28
|
+
declare tasks and dependencies. You have the full power of a modern
|
29
|
+
scripting language built right into your build tool.
|
30
|
+
|
31
|
+
== Availability
|
32
|
+
|
33
|
+
Home Page:: http://rake.rubyforge.org/
|
34
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
35
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
= Rake 0.5.0 Released
|
2
|
+
|
3
|
+
It has been a long time in coming, but we finally have a new version
|
4
|
+
of Rake available.
|
5
|
+
|
6
|
+
== Changes
|
7
|
+
|
8
|
+
* Fixed bug where missing intermediate file dependencies could cause
|
9
|
+
an abort with --trace or --dry-run. (Brian Candler)
|
10
|
+
|
11
|
+
* Recursive rules are now supported (Tilman Sauerbeck).
|
12
|
+
|
13
|
+
* Added tar.gz and tar.bz2 support to package task (Tilman Sauerbeck).
|
14
|
+
|
15
|
+
* Added warning option for the Test Task (requested by Eric Hodel).
|
16
|
+
|
17
|
+
* The jamis rdoc template is only used if it exists.
|
18
|
+
|
19
|
+
* Added fix for Ruby 1.8.2 test/unit and rails problem.
|
20
|
+
|
21
|
+
* Added contributed rake man file. (Jani Monoses)
|
22
|
+
|
23
|
+
* Fixed documentation that was lacking the Rake module name (Tilman
|
24
|
+
Sauerbeck).
|
25
|
+
|
26
|
+
== What is Rake
|
27
|
+
|
28
|
+
Rake is a build tool similar to the make program in many ways. But
|
29
|
+
instead of cryptic make recipes, Rake uses standard Ruby code to
|
30
|
+
declare tasks and dependencies. You have the full power of a modern
|
31
|
+
scripting language built right into your build tool.
|
32
|
+
|
33
|
+
== Availability
|
34
|
+
|
35
|
+
The easiest way to get and install rake is via RubyGems ...
|
36
|
+
|
37
|
+
gem install rake (you may need root/admin privileges)
|
38
|
+
|
39
|
+
Otherwise, you can get it from the more traditional places:
|
40
|
+
|
41
|
+
Home Page:: http://rake.rubyforge.org/
|
42
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
43
|
+
|
44
|
+
== Thanks
|
45
|
+
|
46
|
+
Lots of people provided input to this release. Thanks to Tilman
|
47
|
+
Sauerbeck for numerous patches, documentation fixes and suggestions.
|
48
|
+
And for also pushing me to get this release out. Also, thanks to
|
49
|
+
Brian Candler for the finding and fixing --trace/dry-run fix. That
|
50
|
+
was an obscure bug. Also to Eric Hodel for some good suggestions.
|
51
|
+
|
52
|
+
-- Jim Weirich
|
53
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
= Rake 0.5.0 Released
|
2
|
+
|
3
|
+
Although it has only been two weeks since the last release, we have
|
4
|
+
enough updates to the Rake program to make it time for another
|
5
|
+
release.
|
6
|
+
|
7
|
+
== Changes
|
8
|
+
|
9
|
+
Here are the changes for version 0.5.3 ...
|
10
|
+
|
11
|
+
* FileLists have been extensively changed so that they mimic the
|
12
|
+
behavior of real arrays even more closely. In particular,
|
13
|
+
operations on FileLists that return a new collection (e.g. collect,
|
14
|
+
reject) will now return a FileList rather than an array. In
|
15
|
+
addition, several places where FileLists were not properly expanded
|
16
|
+
before use have been fixed.
|
17
|
+
|
18
|
+
* A method (+ext+) to simplify the handling of file extensions was
|
19
|
+
added to String and to Array.
|
20
|
+
|
21
|
+
* The 'testrb' script in test/unit tends to silently swallow syntax
|
22
|
+
errors in test suites. Because of that, the default test loader is
|
23
|
+
now a rake-provided script. You can still use 'testrb' by setting
|
24
|
+
the loader flag in the test task to :testrb. (See the API documents
|
25
|
+
for TestTask for all the loader flag values).
|
26
|
+
|
27
|
+
* FileUtil methods (e.g. cp, mv, install) are now declared to be
|
28
|
+
private. This will cut down on the interference with user defined
|
29
|
+
methods of the same name.
|
30
|
+
|
31
|
+
* Fixed the verbose flag in the TestTask so that the test code is
|
32
|
+
controlled by the flag. Also shortened up some failure messages.
|
33
|
+
(Thanks to Tobias Luetke for the suggestion).
|
34
|
+
|
35
|
+
* Rules will now properly detect a task that can generate a source
|
36
|
+
file. Previously rules would only consider source files that were
|
37
|
+
already present.
|
38
|
+
|
39
|
+
* Added an +import+ command that allows Rake to dynamically import
|
40
|
+
dependendencies into a running Rake session. The +import+ command
|
41
|
+
can run tasks to update the dependency file before loading them.
|
42
|
+
Dependency files can be in rake or make format, allowing rake to
|
43
|
+
work with tools designed to generate dependencies for make.
|
44
|
+
|
45
|
+
== What is Rake
|
46
|
+
|
47
|
+
Rake is a build tool similar to the make program in many ways. But
|
48
|
+
instead of cryptic make recipes, Rake uses standard Ruby code to
|
49
|
+
declare tasks and dependencies. You have the full power of a modern
|
50
|
+
scripting language built right into your build tool.
|
51
|
+
|
52
|
+
== Availability
|
53
|
+
|
54
|
+
The easiest way to get and install rake is via RubyGems ...
|
55
|
+
|
56
|
+
gem install rake (you may need root/admin privileges)
|
57
|
+
|
58
|
+
Otherwise, you can get it from the more traditional places:
|
59
|
+
|
60
|
+
Home Page:: http://rake.rubyforge.org/
|
61
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
62
|
+
|
63
|
+
== Thanks
|
64
|
+
|
65
|
+
As usual, it was input from users that drove a alot of these changes.
|
66
|
+
Thanks to ...
|
67
|
+
|
68
|
+
* Brian Gernhardt for the rules fix (especially for the patience to
|
69
|
+
explain the problem to me until I got what he was talking about).
|
70
|
+
* Stefan Lang for pointing out problems in the dark corners of the
|
71
|
+
FileList implementation.
|
72
|
+
* Alexey Verkhovsky pointing out the silently swallows syntax errors
|
73
|
+
in tests.
|
74
|
+
* Tobias Luetke for beautifying the test task output.
|
75
|
+
* Sam Roberts for some of the ideas behind dependency loading.
|
76
|
+
|
77
|
+
-- Jim Weirich
|
78
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
= Rake 0.5.4 Released
|
2
|
+
|
3
|
+
Time for some minor bug fixes and small enhancements
|
4
|
+
|
5
|
+
== Changes
|
6
|
+
|
7
|
+
Here are the changes for version 0.5.3 ...
|
8
|
+
|
9
|
+
* Added double quotes to the test runner. This allows the location of
|
10
|
+
the tests (and runner) to be in a directory path that contains
|
11
|
+
spaces (e.g. "C:/Program Files/ruby/bin").
|
12
|
+
|
13
|
+
* Added .svn to default ignore list. Now subversion project metadata
|
14
|
+
is automatically ignored by Rake's FileList.
|
15
|
+
|
16
|
+
* Updated FileList#include to support nested arrays and filelists.
|
17
|
+
FileLists are flat lists of file names. Using a FileList in an
|
18
|
+
include will flatten out the nested file names.
|
19
|
+
|
20
|
+
== What is Rake
|
21
|
+
|
22
|
+
Rake is a build tool similar to the make program in many ways. But
|
23
|
+
instead of cryptic make recipes, Rake uses standard Ruby code to
|
24
|
+
declare tasks and dependencies. You have the full power of a modern
|
25
|
+
scripting language built right into your build tool.
|
26
|
+
|
27
|
+
== Availability
|
28
|
+
|
29
|
+
The easiest way to get and install rake is via RubyGems ...
|
30
|
+
|
31
|
+
gem install rake (you may need root/admin privileges)
|
32
|
+
|
33
|
+
Otherwise, you can get it from the more traditional places:
|
34
|
+
|
35
|
+
Home Page:: http://rake.rubyforge.org/
|
36
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
37
|
+
|
38
|
+
== Thanks
|
39
|
+
|
40
|
+
As usual, it was input from users that drove a alot of these changes.
|
41
|
+
Thanks to ...
|
42
|
+
|
43
|
+
* Tilman Sauerbeck for the nested FileList suggestion.
|
44
|
+
* Josh Knowles for pointing out the spaces in directory name problem.
|
45
|
+
|
46
|
+
-- Jim Weirich
|
@@ -0,0 +1,141 @@
|
|
1
|
+
= Rake 0.6.0 Released
|
2
|
+
|
3
|
+
Its time for some long requested enhancements and lots of bug fixes
|
4
|
+
... And a whole new web page.
|
5
|
+
|
6
|
+
== New Web Page
|
7
|
+
|
8
|
+
The primary documentation for rake has moved from the RubyForge based
|
9
|
+
wiki to its own Hieraki based web site. Constant spam on the wiki
|
10
|
+
made it a difficult to keep clean. The new site will be easier to
|
11
|
+
update and organize.
|
12
|
+
|
13
|
+
Check out the new documentation at: http://docs.rubyrake.org
|
14
|
+
|
15
|
+
We will be adding new documentation to the site as time goes on.
|
16
|
+
|
17
|
+
In addition to the new docs page, make sure you check out Martin
|
18
|
+
Fowlers article on rake at http://martinfowler.com/articles/rake.html
|
19
|
+
|
20
|
+
== Changes
|
21
|
+
|
22
|
+
=== New Features
|
23
|
+
|
24
|
+
* Multiple prerequisites on Rake rules now allowed. However, keep the
|
25
|
+
following in mind:
|
26
|
+
|
27
|
+
1. All the prerequisites of a rule must be available before a rule
|
28
|
+
is triggered, where "enabled" means (a) an existing file, (b) a
|
29
|
+
defined rule, or (c) another rule which also must be
|
30
|
+
trigger-able.
|
31
|
+
2. Rules are checked in order of definition, so it is important to
|
32
|
+
order your rules properly. If a file can be created by two
|
33
|
+
different rules, put the more specific rule first (otherwise the
|
34
|
+
more general rule will trigger first and the specific one will
|
35
|
+
never be triggered).
|
36
|
+
3. The <tt>source</tt> method now returns the name of the first
|
37
|
+
prerequisite listed in the rule. <tt>sources</tt> returns the
|
38
|
+
names of all the rule prerequisites, ordered as they are defined
|
39
|
+
in the rule. If the task has other prerequisites not defined in
|
40
|
+
the rule (but defined in an explicit task definition), then they
|
41
|
+
will _not_ be included in the sources list.
|
42
|
+
|
43
|
+
* FileLists may now use the egrep command. This popular enhancement
|
44
|
+
is now a core part of the FileList object. If you want to get a
|
45
|
+
list of all your to-dos, fixmes and TBD comments, add the following
|
46
|
+
to your Rakefile.
|
47
|
+
|
48
|
+
desc "Look for TODO and FIXME tags in the code"
|
49
|
+
task :todo do
|
50
|
+
FileList['**/*.rb'].egrep /#.*(FIXME|TODO|TBD)/
|
51
|
+
end
|
52
|
+
|
53
|
+
* The <tt>investigation</tt> method was added to task object to dump
|
54
|
+
out some important values. This makes it a bit easier to debug Rake
|
55
|
+
tasks.
|
56
|
+
|
57
|
+
For example, if you are having problems with a particular task, just
|
58
|
+
print it out:
|
59
|
+
|
60
|
+
task :huh do
|
61
|
+
puts Rake::Task['huh'].investigation
|
62
|
+
end
|
63
|
+
|
64
|
+
* The Rake::TestTask class now supports a "ruby_opts" option to pass
|
65
|
+
arbitrary ruby options to a test subprocess.
|
66
|
+
|
67
|
+
=== Some Incompatibilities
|
68
|
+
|
69
|
+
* When using the <tt>ruby</tt> command to start a Ruby subprocess, the
|
70
|
+
Ruby interpreter that is currently running rake is used by default.
|
71
|
+
This makes it easier to use rake in an environment with multiple
|
72
|
+
ruby installation. (Previously, the first ruby command found in the
|
73
|
+
PATH was used).
|
74
|
+
|
75
|
+
If you wish to chose a different Ruby interpreter, you can
|
76
|
+
explicitly choose the interpreter via the <tt>sh</tt> command.
|
77
|
+
|
78
|
+
* The major rake classes (Task, FileTask, FileCreationTask, RakeApp)
|
79
|
+
have been moved out of the toplevel scope and are now accessible as
|
80
|
+
Rake::Task, Rake::FileTask, Rake::FileCreationTask and
|
81
|
+
Rake::Application. If your Rakefile
|
82
|
+
directly references any one of these tasks, you may:
|
83
|
+
|
84
|
+
1. Update your Rakefile to use the new classnames
|
85
|
+
2. Use the --classic-namespace option on the rake command to get the
|
86
|
+
old behavior,
|
87
|
+
3. Add <code>require 'rake/classic_namespace'</code> to the
|
88
|
+
Rakefile to get the old behavior.
|
89
|
+
|
90
|
+
<tt>rake</tt> will print a rather annoying warning whenever a
|
91
|
+
deprecated class name is referenced without enabling classic
|
92
|
+
namespace.
|
93
|
+
|
94
|
+
=== Bug Fixes
|
95
|
+
|
96
|
+
* Several unit tests and functional tests were fixed to run better
|
97
|
+
under windows.
|
98
|
+
|
99
|
+
* Directory tasks are now a specialized version of a File task. A
|
100
|
+
directory task will only be triggered if it doesn't exist. It will
|
101
|
+
not be triggered if it is out of date w.r.t. any of its
|
102
|
+
prerequisites.
|
103
|
+
|
104
|
+
* Fixed a bug in the Rake::GemPackageTask class so that the gem now
|
105
|
+
properly contains the platform name.
|
106
|
+
|
107
|
+
* Fixed a bug where a prerequisite on a <tt>file</tt> task would cause
|
108
|
+
an exception if the prerequisite did not exist.
|
109
|
+
|
110
|
+
== What is Rake
|
111
|
+
|
112
|
+
Rake is a build tool similar to the make program in many ways. But
|
113
|
+
instead of cryptic make recipes, Rake uses standard Ruby code to
|
114
|
+
declare tasks and dependencies. You have the full power of a modern
|
115
|
+
scripting language built right into your build tool.
|
116
|
+
|
117
|
+
== Availability
|
118
|
+
|
119
|
+
The easiest way to get and install rake is via RubyGems ...
|
120
|
+
|
121
|
+
gem install rake (you may need root/admin privileges)
|
122
|
+
|
123
|
+
Otherwise, you can get it from the more traditional places:
|
124
|
+
|
125
|
+
Home Page:: http://rake.rubyforge.org/
|
126
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=50
|
127
|
+
|
128
|
+
== Thanks
|
129
|
+
|
130
|
+
As usual, it was input from users that drove a alot of these changes.
|
131
|
+
The following people either contributed patches, made suggestions or
|
132
|
+
made otherwise helpful comments. Thanks to ...
|
133
|
+
|
134
|
+
* Greg Fast (better ruby_opt test options)
|
135
|
+
* Kelly Felkins (requested by better namespace support)
|
136
|
+
* Martin Fowler (suggested Task.investigation)
|
137
|
+
* Stuart Jansen (send initial patch for multiple prerequisites).
|
138
|
+
* Masao Mutch (better support for non-ruby Gem platforms)
|
139
|
+
* Philipp Neubeck (patch for file task exception fix)
|
140
|
+
|
141
|
+
-- Jim Weirich
|