filament 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ 0.2.0:
2
+ Filament:
3
+ - removed old tests
4
+ - Using cmdparse gem; One action per command
5
+ - added dependency on memoize gem
6
+ - general cleanup
7
+ All Plugins:
8
+ - Plugins now extend Filament::Plugin where necessary
9
+ JavaME Plugin:
10
+ - Moved vendor-specific stuff to tasks.rb in //vendor/libraries/javame
11
+ SVN Plugin:
12
+ - Created svn plugin, should make it easier to support other version control schemes in the future
13
+
1
14
  0.1.2:
2
15
  JavaME Plugin:
3
16
  - Changed the default for obfuscating JavaME::Suite targets to false.
data/bin/filament CHANGED
@@ -1,11 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- #load "#{ENV['WR']}/tools/filament/lib/filament.rb"
4
3
  require 'filament'
5
4
 
6
- if FileTest.symlink?($0)
7
- $actions << File.basename($0).to_sym
8
- end
9
-
10
- Filament::Application.new.run
5
+ Filament::run
11
6
 
data/bin/filament-dbg CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/bin/bash
2
2
 
3
- build BUILD_TYPE=DBG $@
3
+ filament BUILD_TYPE=DBG $@
data/bin/filament-opt CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/bin/bash
2
2
 
3
- build BUILD_TYPE=OPT $@
3
+ filament BUILD_TYPE=OPT $@
data/bin/filament-test CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/bin/bash
2
2
 
3
- build BUILD_TYPE=TEST test $@
3
+ filament BUILD_TYPE=TEST test $@
@@ -21,14 +21,13 @@ module Filament
21
21
  klass.new(name, &block)
22
22
  end
23
23
 
24
- attr_reader :parent, :name, :realpath, :workspace, :package_resolver, :target_resolver, :build_context
24
+ attr_reader :parent, :name, :realpath, :workspace, :package_resolver, :target_resolver, :build_context, :scm
25
25
  alias :pathname :realpath
26
26
 
27
27
  def initialize(h)
28
28
  @parent = h[:parent]
29
29
  @workspace = h[:workspace]
30
30
 
31
-
32
31
  if @workspace.nil?
33
32
  unless @parent.nil?
34
33
  @workspace = @parent.workspace
@@ -0,0 +1,8 @@
1
+ module Filament
2
+ # A basic class that plugins should use for extension
3
+ class Plugin
4
+ def initialize(application)
5
+
6
+ end
7
+ end
8
+ end
@@ -1,8 +1,5 @@
1
1
  require 'filament/util/lazy_list'
2
2
 
3
- # TODO quick fixes..
4
- # switch to package.rb
5
-
6
3
  module Filament
7
4
  class TargetList < LazyList
8
5
  def initialize(*args)
@@ -89,9 +86,11 @@ module Filament
89
86
  alias :[] :get_output
90
87
 
91
88
  # builds this specific target (and all dependencies)
92
- def build
89
+ # after building, it executes the provided block in the build context
90
+ def build(&block)
93
91
  @package.build_context.execute do
94
92
  invoke
93
+ block.call unless block.nil?
95
94
  end
96
95
  end
97
96
 
data/lib/filament.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'pathname'
2
2
  require 'set'
3
3
 
4
+
4
5
  # rake stuff
5
6
  begin
6
7
  require 'rake'
@@ -8,11 +9,18 @@ rescue LoadError
8
9
  require 'rubygems'
9
10
  require_gem 'rake'
10
11
  end
12
+
13
+ begin
14
+ require 'cmdparse'
15
+ rescue LoadError
16
+ require 'rubygems'
17
+ require_gem 'cmdparse'
18
+ end
19
+
11
20
  require 'rake/clean'
12
21
 
13
22
  require 'filament/workspace'
14
23
  require 'filament/platform'
15
- require 'filament/plugins'
16
24
  require 'filament/package'
17
25
  require 'filament/target'
18
26
  require 'filament/artifact'
@@ -44,172 +52,127 @@ module Filament
44
52
  def verbose(on)
45
53
  RakeFileUtils.verbose(false)
46
54
  $verbose = on
47
- # if on
48
- # trace_var :$context, lambda { |c|
49
- # puts "$context is now #{c}"
50
- # }
51
- # else
52
- # untrace_var :$context
53
- # end
54
55
  end
55
56
 
56
- $actions ||= []
57
-
58
57
  class Application
59
- OPTIONS = [
60
- ['--trace', '-t', GetoptLong::NO_ARGUMENT,
61
- "Turn on invoke/execute tracing"],
62
- ]
58
+ @@plugins = []
59
+
60
+ def self.plugin(klass)
61
+ @@plugins << klass
62
+ end
63
63
 
64
- TARGET_ACTIONS = {
65
- :build => Proc.new { |targets|
66
- targets.each { |target| target.build }
67
- },
68
- :clobber => Proc.new { |targets|
69
- targets.each { |target| target.package.clobber }
70
- },
71
- :execute => Proc.new { |targets|
72
- targets.each do |target|
73
- target.build
74
- block = target[:execute]
75
- target.package.build_context.execute(&block) unless block.nil?
76
- end
77
- },
78
- }
64
+ def initialize
65
+ @cmd = CmdParse::CommandParser.new(true)
66
+ @cmd.program_name = "filament"
67
+ @cmd.program_version = [0, 2, 0]
68
+ @cmd.add_command(CmdParse::HelpCommand.new)
69
+ @cmd.add_command(CmdParse::VersionCommand.new)
70
+ @cmd.options = CmdParse::OptionParserWrapper.new do |opt|
71
+ opt.separator "Global options"
72
+ opt.on("--verbose", "Dump lots of stuff") { |t| verbose(true) }
73
+ opt.on("--trace", "Turn on tracing") { |t| $trace = true; verbose(true) }
74
+ end
75
+
76
+ @@plugins.each do |plugin|
77
+ plugin.new(self)
78
+ end
79
+ end
80
+
81
+ def subcommand(name, short_desc, &block)
82
+ subcommand = CmdParse::Command.new(name, false)
83
+ subcommand.short_desc = short_desc
84
+ subcommand.set_execution_block(&block)
85
+ @cmd.add_command(subcommand)
86
+ end
79
87
 
80
- PACKAGE_ACTIONS = {
81
-
82
- }
88
+ def run(args)
89
+ verbose(false)
90
+
91
+ this_package = $workspace.package_for_realpath(Pathname.pwd.realpath)
92
+ this_package.execute do
93
+ log "ROOT PACKAGES: #{$context[:package_resolver].root_package_names.join(', ')}"
94
+ # do it.
95
+ @cmd.parse(args)
96
+ end
97
+ end
98
+ end
99
+
100
+ class << self
101
+ def get_plugin_dirs(path)
102
+ pn = Pathname.new(path)
103
+ return pn.children.sort
104
+ end
105
+
106
+ def update_env(plugin_base_dir)
107
+ plugin_dirs = get_plugin_dirs(plugin_base_dir)
108
+ script_dirs = plugin_dirs.collect {|dir| dir + 'script' }
109
+ ENV['PATH'] = script_dirs.join(':') + ':' + ENV['PATH']
110
+ end
83
111
 
84
- def collect_other_args
85
- targets = []
86
- packages = []
87
- actions = []
112
+ def load_plugins(plugin_base_dir)
113
+ update_env(plugin_base_dir)
114
+
115
+ plugins = []
116
+ dirs = get_plugin_dirs(plugin_base_dir)
117
+ dirs.each do |child|
118
+ ln = child + 'lib'
119
+
120
+ if ln.exist?
121
+ $LOAD_PATH << ln.realpath
122
+ cn = ln + 'init.rb'
123
+ raise "cannot init filament plugin '#{child}'" unless cn.exist?
124
+ load cn.realpath
125
+ plugins << child.basename.to_s
126
+ end
127
+ end
128
+
129
+ log "PLUGINS: #{plugins.join(', ')}"
130
+ end
131
+
132
+ def partition_args
88
133
  vars = {}
134
+ args = []
89
135
  ARGV.each do |arg|
90
136
  if arg =~ /^(\w+)=(.*)$/
91
137
  vars[$1] = $2
92
- elsif arg =~ /^[^\/^:]/
93
- actions << arg.to_sym
94
138
  else
95
- targets << arg
96
- if arg =~ /^\/[^:]/
97
- packages << arg
98
- end
139
+ args << arg
99
140
  end
100
141
  end
101
142
  return { :vars => vars,
102
- :targets => targets,
103
- :packages => packages,
104
- :actions => actions }
143
+ :args => args }
105
144
  end
106
145
 
107
- def do_option(opt, value)
108
- case opt
109
- when '--trace'
110
- $trace = true
111
- verbose(true)
112
- else
113
- fail "Unknown option: #{opt}"
114
- end
115
- end
116
-
117
- def command_line_options
118
- OPTIONS.collect { |lst| lst[0..-2] }
119
- end
120
-
121
- def handle_options
122
- opts = GetoptLong.new(*command_line_options)
123
- opts.each { |opt, value| do_option(opt, value) }
124
- end
125
-
126
- def run(&block)
127
- verbose(false)
146
+ def run
147
+ h = partition_args
148
+ vars = h[:vars]
149
+ args = h[:args]
128
150
 
129
- handle_options
130
-
131
- begin
132
- other_args = collect_other_args
133
- vars = other_args[:vars]
134
-
135
- vars.each do |key, val|
136
- ENV[key] = val
137
- end
138
-
139
- actions = $actions + other_args[:actions]
140
- actions.compact!
141
-
142
- workspace_path = ENV['WR'] || Filament::find_dir(Pathname.pwd, '.workspace')
143
- $workspace = Workspace.new(workspace_path)
144
- $target_platform = (ENV['TARGET_PLATFORM'] || :mpp_sdk || :i860 || :wt2_2).to_sym
145
-
146
- build_type = (ENV['BUILD_TYPE'] || :DBG).to_sym
147
- dirs = { :TEST => 'test', # this is a folder for testing targets to use
148
- :DBG => 'dbg', # final jars, binaries, etc. are placed in these
149
- :OPT => 'opt' } # this is for obfuscated, compressed, releasable versions
150
-
151
- raise "unknown build type: '#{build_type}'" unless dirs.key?(build_type)
152
-
153
- $build_dir_prefix = "#{dirs[build_type]}/#{$target_platform.to_s}"
154
-
155
- pn = Pathname.new(__FILE__).parent.parent + 'plugins'
156
- Filament::load_plugins(pn.realpath)
157
-
158
- $workspace.load_tasks
159
- this_package = $workspace.package_for_realpath(Pathname.pwd.realpath)
160
-
161
- this_package.execute do
162
- targets = TargetList.new(*other_args[:targets])
163
- packages = PackageList.new(*other_args[:packages])
164
-
165
- if targets.empty?
166
- log "assuming default target of '#{this_package.uri}'"
167
- targets.include(this_package.uri)
168
- end
169
-
170
- if packages.empty?
171
- log "assuming default package of '#{this_package.uri}'"
172
- packages.include(this_package.uri)
173
- end
174
-
175
- if block.nil?
176
- target_blocks = []
177
- package_blocks = []
178
-
179
- actions.each do |action|
180
- if TARGET_ACTIONS.key?(action)
181
- target_blocks << TARGET_ACTIONS[action]
182
- elsif PACKAGE_ACTIONS.key?(action)
183
- package_blocks << PACKAGE_ACTIONS[action]
184
- else
185
- raise "Unknown action: #{action}"
186
- end
187
- end
188
-
189
- # some debug
190
- root_packages = $context[:package_resolver].root_packages.collect { |p| p.full_name }
191
- puts "ACTIONS: #{actions.join(', ')}"
192
- puts "PACKAGE_RESOLVER: #{root_packages.join(', ')}"
193
-
194
- target_blocks.each { |b| b.call(targets) }
195
- package_blocks.each { |b| b.call(packages) }
196
- else
197
- targets.each(&block)
198
- end
199
- end
200
- rescue Exception => ex
201
- puts "Build aborted!"
202
- puts ex.message
203
- if $trace
204
- puts ex.backtrace.join("\n")
205
- else
206
- puts ex.backtrace.find {|str| str =~ /rakefile.rb/ } || ""
207
- end
208
- exit(1)
151
+ vars.each do |key, val|
152
+ ENV[key] = val
209
153
  end
154
+
155
+ workspace_path = ENV['WORKSPACE_PATH'] || Filament::find_dir(Pathname.pwd, '.workspace')
156
+
157
+ $target_platform = (ENV['TARGET_PLATFORM'] || :mpp_sdk || :i860 || :wt2_2).to_sym
158
+ $build_type = (ENV['BUILD_TYPE'] || :DBG || :OPT || :TEST).to_sym
159
+ raise "unknown build type: '#{$build_type}'" unless [:DBG, :OPT, :TEST].member?($build_type)
160
+ # :TEST => this is a folder for testing targets to use
161
+ # :DBG => final jars, binaries, etc. are placed in these
162
+ # :OPT => this is for obfuscated, compressed, releasable versions
163
+ $build_dir_prefix = "#{$build_type.to_s.downcase}/#{$target_platform.to_s}"
164
+
165
+ pn = Pathname.new(__FILE__).parent.parent + 'plugins'
166
+ Filament::load_plugins(pn.realpath)
167
+
168
+ $workspace = Workspace.new(workspace_path)
169
+ $workspace.load_tasks
170
+
171
+ Filament::Application.new.run(args)
210
172
  end
211
173
  end
212
174
  end
213
175
 
214
176
  include Filament::Platform
215
177
  include Filament
178
+
@@ -0,0 +1,59 @@
1
+ require 'filament/plugin'
2
+
3
+ module Filament::Plugins
4
+ class Util < Plugin
5
+ def initialize(app)
6
+ app.subcommand('build', "Build the given targets") do |args|
7
+ targets = TargetList.new(*args)
8
+ targets.each { |target| target.build }
9
+ end
10
+
11
+ app.subcommand('clobber', "Clobber the generated files for the given packages") do |args|
12
+ packages = PackageList.new(*args)
13
+ packages.each { |package| package.clobber }
14
+ end
15
+
16
+ app.subcommand('execute', "Executes the target, if it is executable") do |args|
17
+ targets = TargetList.new(*args)
18
+ targets.each do |target|
19
+ target.build do
20
+ block = target[:execute]
21
+ block.call unless block.nil?
22
+ end
23
+ end
24
+ end
25
+
26
+ app.subcommand('targets', "Shows targets of given package") do |args|
27
+ packages = PackageList.new(*args)
28
+ packages.each do |package|
29
+ puts " #{package.full_name}"
30
+ package.targets.each do |target|
31
+ puts " #{target.uri}"
32
+ end
33
+ end
34
+ end
35
+
36
+ app.subcommand('prereqs', "Shows prerequisites of given packages") do |args|
37
+ targets = TargetList.new(*args)
38
+ targets.each do |target|
39
+ puts " #{target.uri}"
40
+ target.deps.each do |dep|
41
+ puts " #{dep.uri}"
42
+ end
43
+ end
44
+ end
45
+
46
+ app.subcommand('list', "Lists subpackages of given packages") do |args|
47
+ packages = PackageList.new(*args)
48
+ packages.each do |package|
49
+ package.list
50
+ end
51
+ end
52
+
53
+ app.subcommand('workspace', "Creates a filament workspace at the provided path (or the working directory)") do |args|
54
+
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -1,47 +1,4 @@
1
- class Filament::Util
2
- package_actions = {
3
- :list => Proc.new { |packages|
4
- packages.each do |package|
5
- package.list
6
- end
7
- },
8
- :update => Proc.new { |packages|
9
- packages.each do |package|
10
- package.update
11
- end
12
- },
13
- :status => Proc.new { |packages|
14
- packages.each do |package|
15
- package.status
16
- end
17
- },
18
- :commit => Proc.new { |packages|
19
- packages.each do |package|
20
- package.commit
21
- end
22
- },
23
- #Display the targets and dependencies, then exit.
24
- :targets => Proc.new { |packages|
25
- packages.each do |package|
26
- puts " #{package.full_name}"
27
- package.targets.each do |target|
28
- puts " #{target.uri}"
29
- end
30
- end
31
- }
32
- }
33
-
34
- target_actions = {
35
- :prereqs => Proc.new { |targets|
36
- targets.each do |target|
37
- puts " #{target.uri}"
38
- target.deps.each do |dep|
39
- puts " #{dep.uri}"
40
- end
41
- end
42
- }
43
- }
44
-
45
- Application::PACKAGE_ACTIONS.merge!(package_actions)
46
- Application::TARGET_ACTIONS.merge!(target_actions)
47
- end
1
+ require 'filament'
2
+ require 'filament/plugins/util'
3
+
4
+ Filament::Application::plugin(Filament::Plugins::Util)
@@ -0,0 +1,9 @@
1
+ require 'filament/plugin'
2
+
3
+ module Filament::Plugins
4
+ class Java < Plugin
5
+ def initialize(app)
6
+
7
+ end
8
+ end
9
+ end
@@ -1 +1,5 @@
1
- require 'filament/java/tools'
1
+ require 'filament'
2
+ require 'filament/java/tools'
3
+ require 'filament/plugins/java'
4
+
5
+ Filament::Application::plugin(Filament::Plugins::Java)
@@ -2,64 +2,8 @@ require 'filament/platform'
2
2
 
3
3
  module Filament::JavaME
4
4
  module Tools
5
- def self.vendor_dir(name)
6
- return "#{$workspace.realpath}/vendor/libraries/javame/#{name}"
7
- end
8
-
9
- def self.jsr_classpath(jsr)
10
- return ["#{vendor_dir('jsr')}/#{jsr}/#{jsr}.jar"]
11
- end
12
-
13
- SUN_DIR = vendor_dir('sun')
14
- MPP_DIR = vendor_dir('mpp-sdk')
15
- MOTOROLA_DIR = vendor_dir('motorola')
16
-
17
- TAGS = {
18
- :midp1 => ["#{SUN_DIR}/midpapi10.jar"],
19
- :midp2 => ["#{SUN_DIR}/midpapi20.jar"],
20
- :jsr_75 => jsr_classpath(75),
21
- :jsr_82 => jsr_classpath(82),
22
- :jsr_120 => jsr_classpath(120),
23
- :jsr_135 => jsr_classpath(135),
24
- :jsr_172 => jsr_classpath(172),
25
- :jsr_184 => jsr_classpath(184),
26
- }
27
-
28
- TARGET_PLATFORMS[:wtk2_2] = {
29
- :tags => [:wtk, :midp2, :jsr_82],
30
- :cldc_version => 1.1
31
- }
32
-
33
- TARGET_PLATFORMS[:mpp_sdk] = {
34
- :tags => [:mpp, :midp2, :jsr_82],
35
- :cldc_version => 1.1
36
- }
37
-
38
- TARGET_PLATFORMS[:a1000] = {
39
- :tags => [:midp2, :jsr_82, :jsr_120, :jsr_185, :jsr_135],
40
- :cldc_version => 1.0
41
- }
42
-
43
- TARGET_PLATFORMS[:weme] = {
44
- :tags => [:midp2, :jsr_75, :jsr_172],
45
- :cldc_version => 1.1
46
- }
47
-
48
- TARGET_PLATFORMS[:i860] = {
49
- :tags => [:iden],
50
- :cldc_version => 1.0,
51
- :classpath => ["#{MOTOROLA_DIR}/i860/i860.jar"]
52
- }
53
-
54
- TARGET_PLATFORMS[:e398] = {
55
- :tags => [:midp2, :jsr_120, :jsr_135],
56
- :cldc_version => 1.0
57
- }
58
-
59
- TARGET_PLATFORMS[:e680] = {
60
- :tags => [:midp2, :jsr_120, :jsr_135, :jsr_184, :jsr_185],
61
- :cldc_version => 1.0
62
- }
5
+ TAGS = {}
6
+ TARGET_PLATFORMS = {}
63
7
 
64
8
  class << self
65
9
  def platform(model)
@@ -0,0 +1,20 @@
1
+ require 'filament/plugin'
2
+
3
+ module Filament::Plugins
4
+ class Push < Plugin
5
+ def initialize(app)
6
+ app.subcommand('push', "Pushes deployables to selected PUSH_CONDUIT") do |args|
7
+ targets = TargetList.new(*args)
8
+ push_conduit = ENV['PUSH_CONDUIT'] || :Filter
9
+
10
+ targets.each do |target|
11
+ target.build do
12
+ klass = eval(push_conduit.to_s + 'Conduit')
13
+ conduit = klass.new
14
+ conduit.push_targets(targets)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -10,20 +10,8 @@ require 'filament/push/conduits/bluetooth_conduit'
10
10
  require 'filament/push/conduits/scp_conduit'
11
11
  require 'filament/push/conduits/filter_conduit'
12
12
 
13
- module Filament::Push::Conduits
14
- Application::TARGET_ACTIONS[:push] = Proc.new { |targets|
15
- push_conduit = ENV['PUSH_CONDUIT'] || :Filter
16
-
17
- targets.each do |target|
18
- target.build
19
- end
20
-
21
- klass = eval(push_conduit.to_s + 'Conduit')
22
- conduit = klass.new
23
-
24
- conduit.push_targets(targets)
25
- }
26
- end
13
+ require 'filament/plugins/push'
27
14
 
15
+ Filament::Application::plugin(Filament::Plugins::Push)
28
16
 
29
17
 
@@ -0,0 +1,121 @@
1
+ require 'filament/package'
2
+
3
+ module Filament
4
+ class Package
5
+ # returns true if this package is under svn control
6
+ def svn?
7
+ p = @realpath + '.svn'
8
+ return p.exist?
9
+ end
10
+
11
+ def revision
12
+ return svn_revision
13
+ end
14
+
15
+ def update
16
+ return svn_update
17
+ end
18
+
19
+ def status
20
+ return svn_status
21
+ end
22
+
23
+ def commit(msg)
24
+ return svn_commit(msg)
25
+ end
26
+
27
+ def svn_info
28
+ stream = IO.popen("svn info #{@pathname.realpath}")
29
+ return YAML.load(stream)
30
+ end
31
+
32
+ def svn_revision
33
+ return 0 unless svn?
34
+ return svn_info['Last Changed Rev'].to_i
35
+ end
36
+
37
+ def svn_url
38
+ return nil unless svn?
39
+ return svn_info['URL']
40
+ end
41
+
42
+ def svn_base_url
43
+ return url.gsub(/\/(trunk|branches\/[.^\/]*|tags\/[.^\/]*)$/, '')
44
+ end
45
+
46
+ # if this package is under version control, it will update it
47
+ # if this package has subpackages, it will update them
48
+ def svn_update
49
+ if svn?
50
+ puts full_name
51
+ system('svn update')
52
+ end
53
+ subpackages.each { |s| s.update }
54
+ end
55
+
56
+ # if this package is under version control, it will print its status
57
+ # if this package has subpackages it will print their status
58
+ def svn_status
59
+ if svn?
60
+ puts full_name
61
+ system('svn status')
62
+ end
63
+ subpackages.each { |s| s.status }
64
+ end
65
+
66
+ # if this package is under version control, it will commit it with the
67
+ # given msg
68
+ # if this package has subpackages it will commit them
69
+ def svn_commit(msg)
70
+ if svn?
71
+ puts full_name
72
+ system("svn ci -m \"#{msg}\"")
73
+ end
74
+ subpackages.each { |s| s.commit(msg) }
75
+ end
76
+
77
+ def self.build_uri(h)
78
+ uri = h[:uri]
79
+
80
+ return uri unless @uri.nil?
81
+
82
+ package_path = h[:package_path]
83
+ base_uri = h[:root_uri] || ENV['BASE_SVN_URL']
84
+
85
+ tag = h[:tag]
86
+ branch = h[:branch]
87
+
88
+ return "#{base_uri}/tags/#{package_path}/#{tag}" unless tag.nil?
89
+ return "#{base_uri}/branches/#{package_path}/#{branch}" unless branch.nil?
90
+ return "#{base_uri}/trunk/#{package_path}"
91
+ end
92
+
93
+ # checks out the package into the current wd (preserving its path)
94
+ def self.checkout(h)
95
+ uri = Package.build_uri(h)
96
+ pkg = Package.create(h)
97
+ pkg.system("svn co #{uri} .")
98
+ return pkg
99
+ end
100
+
101
+ # exports a url to a given dir
102
+ def self.export(h)
103
+ uri = Package.build_uri(h)
104
+ pkg = Package.create(h)
105
+ pkg.system("svn export #{uri} .")
106
+ return pkg
107
+ end
108
+ end
109
+ end
110
+
111
+
112
+ #class URI::Generic
113
+ # def to_package
114
+ # s = SVN.new(uri)
115
+ # raise "not an svn uri" unless s.valid?
116
+ # pkg = export(:package_path => s.path,
117
+ # :uri => s.uri,
118
+ # :root_dir => Filament::Package.CACHE_DIR)
119
+ # return pkg
120
+ # end
121
+ #end
@@ -0,0 +1,28 @@
1
+ require 'filament/package/svn'
2
+ require 'svn'
3
+
4
+ module Filament::Plugins
5
+ class SvnPlugin < Plugin
6
+ def initialize(app)
7
+ app.subcommand('update', "Updates given package and subpackages") do |args|
8
+ packages = PackageList.new(*args)
9
+ packages.each do |package|
10
+ package.update
11
+ end
12
+ end
13
+
14
+ app.subcommand('status', "Shows status given of package and subpackages") do |args|
15
+ packages = PackageList.new(*args)
16
+ packages.each do |package|
17
+ package.status
18
+ end
19
+ end
20
+
21
+ app.subcommand('checkout', "Checks out a package into the workspace") do |args|
22
+ url, package_uri = *args
23
+
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ require 'filament/plugins/svn'
2
+
3
+ Filament::Application::plugin(Filament::Plugins::SvnPlugin)
@@ -75,4 +75,12 @@ class SVN
75
75
  SVN.new("#{@uri}/#{child}")
76
76
  end
77
77
  end
78
+
79
+ def checkout(path)
80
+ raise "error checking out to #{path}" unless system("svn co #{@uri} #{path}")
81
+ end
82
+
83
+ def export(path)
84
+ raise "error exporting to #{path}" unless system("svn export #{@uri} #{path}")
85
+ end
78
86
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: filament
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.2
7
- date: 2006-03-16 00:00:00 -05:00
6
+ version: 0.2.0
7
+ date: 2006-03-17 00:00:00 -05:00
8
8
  summary: A flexible dependency-based build platform based on Rake
9
9
  require_paths:
10
10
  - lib
@@ -32,35 +32,20 @@ files:
32
32
  - bin/filament-dbg
33
33
  - bin/filament-opt
34
34
  - bin/filament-test
35
- - bin/init
36
- - tests/build
37
- - tests/gen
38
- - tests/java
39
35
  - tests/platform_test.rb
40
36
  - tests/root
41
- - tests/build/artifact_name_test.rb
42
- - tests/build/artifact_test.rb
43
- - tests/gen/java
44
- - tests/gen/java/block_test.rb
45
- - tests/gen/java/callable_test.rb
46
- - tests/gen/java/method_test.rb
47
- - tests/gen/java/statement_test.rb
48
- - tests/java/tools_test.rb
49
37
  - lib/filament
50
38
  - lib/filament.rb
51
39
  - lib/inflector.rb
52
- - lib/svn.rb
53
40
  - lib/filament/artifact.rb
54
41
  - lib/filament/context.rb
55
- - lib/filament/package
56
42
  - lib/filament/package.rb
57
43
  - lib/filament/platform.rb
58
- - lib/filament/plugins.rb
44
+ - lib/filament/plugin.rb
59
45
  - lib/filament/resolver.rb
60
46
  - lib/filament/target.rb
61
47
  - lib/filament/util
62
48
  - lib/filament/workspace.rb
63
- - lib/filament/package/svn.rb
64
49
  - lib/filament/util/filelist2.rb
65
50
  - lib/filament/util/fileutils.rb
66
51
  - lib/filament/util/lazy_list.rb
@@ -68,12 +53,17 @@ files:
68
53
  - plugins/01java
69
54
  - plugins/02javame
70
55
  - plugins/05push
56
+ - plugins/10svn
71
57
  - plugins/00util/lib
58
+ - plugins/00util/lib/filament
72
59
  - plugins/00util/lib/init.rb
60
+ - plugins/00util/lib/filament/plugins
61
+ - plugins/00util/lib/filament/plugins/util.rb
73
62
  - plugins/01java/lib
74
63
  - plugins/01java/lib/filament
75
64
  - plugins/01java/lib/init.rb
76
65
  - plugins/01java/lib/filament/java
66
+ - plugins/01java/lib/filament/plugins
77
67
  - plugins/01java/lib/filament/java/mixins
78
68
  - plugins/01java/lib/filament/java/tools
79
69
  - plugins/01java/lib/filament/java/tools.rb
@@ -82,6 +72,7 @@ files:
82
72
  - plugins/01java/lib/filament/java/tools/execute.rb
83
73
  - plugins/01java/lib/filament/java/tools/jar.rb
84
74
  - plugins/01java/lib/filament/java/tools/proguard.rb
75
+ - plugins/01java/lib/filament/plugins/java.rb
85
76
  - plugins/02javame/lib
86
77
  - plugins/02javame/lib/filament
87
78
  - plugins/02javame/lib/init.rb
@@ -105,12 +96,22 @@ files:
105
96
  - plugins/05push/lib/bluetooth.rb
106
97
  - plugins/05push/lib/filament
107
98
  - plugins/05push/lib/init.rb
99
+ - plugins/05push/lib/filament/plugins
108
100
  - plugins/05push/lib/filament/push
109
101
  - plugins/05push/lib/filament/push.rb
102
+ - plugins/05push/lib/filament/plugins/push.rb
110
103
  - plugins/05push/lib/filament/push/conduits
111
104
  - plugins/05push/lib/filament/push/conduits/bluetooth_conduit.rb
112
105
  - plugins/05push/lib/filament/push/conduits/filter_conduit.rb
113
106
  - plugins/05push/lib/filament/push/conduits/scp_conduit.rb
107
+ - plugins/10svn/lib
108
+ - plugins/10svn/lib/filament
109
+ - plugins/10svn/lib/init.rb
110
+ - plugins/10svn/lib/svn.rb
111
+ - plugins/10svn/lib/filament/package
112
+ - plugins/10svn/lib/filament/plugins
113
+ - plugins/10svn/lib/filament/package/svn.rb
114
+ - plugins/10svn/lib/filament/plugins/svn.rb
114
115
  - README
115
116
  - CHANGELOG
116
117
  test_files: []
@@ -136,3 +137,21 @@ dependencies:
136
137
  - !ruby/object:Gem::Version
137
138
  version: 0.7.0
138
139
  version:
140
+ - !ruby/object:Gem::Dependency
141
+ name: cmdparse
142
+ version_requirement:
143
+ version_requirements: !ruby/object:Gem::Version::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 2.0.0
148
+ version:
149
+ - !ruby/object:Gem::Dependency
150
+ name: memoize
151
+ version_requirement:
152
+ version_requirements: !ruby/object:Gem::Version::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 1.2.2
157
+ version:
data/bin/init DELETED
@@ -1,4 +0,0 @@
1
- #!/bin/bash
2
-
3
- export BUILD_PLUGINS=${BUILD}/plugins
4
- #export PATH=`ls -1 ${BUILD_PLUGINS} | xargs -I qq echo -n "${BUILD_PLUGINS}/qq/script:"`${PATH}
@@ -1,123 +0,0 @@
1
- require 'filament/package'
2
-
3
- module Filament
4
- class Package
5
- # returns true if this package is under svn control
6
- def svn?
7
- p = @pathname + '.svn'
8
- return p.exist?
9
- end
10
-
11
- def revision
12
- return svn_revision
13
- end
14
-
15
- def update
16
- return svn_update
17
- end
18
-
19
- def status
20
- return svn_status
21
- end
22
-
23
- def commit(msg)
24
- return svn_commit(msg)
25
- end
26
-
27
- def svn_info
28
- stream = IO.popen("svn info #{@pathname.realpath}")
29
- return YAML.load(stream)
30
- end
31
-
32
- def svn_revision
33
- return 0 unless svn?
34
- return svn_info['Last Changed Rev'].to_i
35
- end
36
-
37
- def svn_url
38
- return nil unless svn?
39
- return svn_info['URL']
40
- end
41
-
42
- def svn_base_url
43
- return url.gsub(/\/(trunk|branches\/[.^\/]*|tags\/[.^\/]*)$/, '')
44
- end
45
-
46
- # if this package is under version control, it will update it
47
- # if this package has subpackages, it will update them
48
- def svn_update
49
- if svn?
50
- puts full_name
51
- system('svn update')
52
- end
53
- subpackages.each { |s| s.update }
54
- end
55
-
56
- # if this package is under version control, it will print its status
57
- # if this package has subpackages it will print their status
58
- def svn_status
59
- if svn?
60
- puts full_name
61
- system('svn status')
62
- end
63
- subpackages.each { |s| s.status }
64
- end
65
-
66
- # if this package is under version control, it will commit it with the
67
- # given msg
68
- # if this package has subpackages it will commit them
69
- def svn_commit(msg)
70
- if svn?
71
- puts full_name
72
- system("svn ci -m \"#{msg}\"")
73
- end
74
- subpackages.each { |s| s.commit(msg) }
75
- end
76
- end
77
-
78
- def self.build_uri(h)
79
- uri = h[:uri]
80
-
81
- return uri unless @uri.nil?
82
-
83
- package_path = h[:package_path]
84
- base_uri = h[:root_uri] || ENV['BASE_SVN_URL']
85
-
86
- tag = h[:tag]
87
- branch = h[:branch]
88
-
89
- return "#{base_uri}/tags/#{package_path}/#{tag}" unless tag.nil?
90
- return "#{base_uri}/branches/#{package_path}/#{branch}" unless branch.nil?
91
- return "#{base_uri}/trunk/#{package_path}"
92
- end
93
-
94
- # checks out the package into the current wd (preserving its path)
95
- def self.checkout(h)
96
- uri = Package.build_uri(h)
97
- pkg = Package.create(h)
98
- pkg.system("svn co #{uri} .")
99
- return pkg
100
- end
101
-
102
- # exports a url to a given dir
103
- def self.export(h)
104
- uri = Package.build_uri(h)
105
- pkg = Package.create(h)
106
- pkg.system("svn export #{uri} .")
107
- return pkg
108
- end
109
-
110
- end
111
- end
112
-
113
-
114
- #class URI::Generic
115
- # def to_package
116
- # s = SVN.new(uri)
117
- # raise "not an svn uri" unless s.valid?
118
- # pkg = export(:package_path => s.path,
119
- # :uri => s.uri,
120
- # :root_dir => Filament::Package.CACHE_DIR)
121
- # return pkg
122
- # end
123
- #end
@@ -1,32 +0,0 @@
1
- module Filament
2
- def self.get_plugin_dirs(path)
3
- pn = Pathname.new(path)
4
- return pn.children.sort
5
- end
6
-
7
- def self.load_plugins(plugin_base_dir)
8
- update_env(plugin_base_dir)
9
-
10
- plugins = []
11
- dirs = get_plugin_dirs(plugin_base_dir)
12
- dirs.each do |child|
13
- ln = child + 'lib'
14
-
15
- if ln.exist?
16
- $LOAD_PATH << ln.realpath
17
- cn = ln + 'init.rb'
18
- raise "cannot init filament plugin '#{child}'" unless cn.exist?
19
- load cn.realpath
20
- plugins << child.basename.to_s
21
- end
22
- end
23
-
24
- puts "PLUGINS: #{plugins.join(', ')}"
25
- end
26
-
27
- def self.update_env(plugin_base_dir)
28
- plugin_dirs = get_plugin_dirs(plugin_base_dir)
29
- script_dirs = plugin_dirs.collect {|dir| dir + 'script' }
30
- ENV['PATH'] = script_dirs.join(':') + ':' + ENV['PATH']
31
- end
32
- end
@@ -1,85 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'build/artifact_lib'
4
-
5
- class ArtifactNameTest < Test::Unit::TestCase
6
- def test_parse
7
- bad_an = [nil,
8
- '',
9
- 'blah',
10
- ':target',
11
- 'package:target']
12
-
13
- bad_an.each do |an|
14
- assert_nil(Build::ArtifactName.parse(an))
15
- end
16
-
17
- good_an = [['//package', 'package', 'package'],
18
- ['//package/sub_package', 'package/sub_package', 'sub_package'],
19
- ['//package/sub_package:target', 'package/sub_package', 'target'],
20
- ['//package:target', 'package', 'target'],
21
- ['//j2me_util', 'j2me_util', 'j2me_util']]
22
-
23
- good_an.each do |an, pn, tn|
24
- a = Build::ArtifactName.parse(an)
25
- assert_not_nil(a, "'#{an}' should not parse to nil")
26
- assert_equal(pn, a.package)
27
- assert_equal(tn, a.target)
28
- end
29
- end
30
-
31
- def test_target_name
32
- bad_tn = [nil,
33
- '',
34
- 'blah',
35
- '//package']
36
- bad_tn.each do |tn|
37
- assert_equal(false,
38
- Build::ArtifactName.target_name?(tn),
39
- "'#{tn}' should not be a valid target name.")
40
- end
41
-
42
- good_tn = [':target']
43
- good_tn.each do |tn|
44
- assert(Build::ArtifactName.target_name?(tn),
45
- "'#{tn}' should be a valid target name.")
46
- end
47
- end
48
-
49
- def test_package_name
50
- bad_pn = [nil,
51
- '',
52
- 'blah',
53
- ':target',
54
- '//package:target']
55
- bad_pn.each do |pn|
56
- assert_equal(false,
57
- Build::ArtifactName.package_name?(pn),
58
- "'#{pn}' should not be a valid package name.")
59
- end
60
-
61
- good_pn = ['//package',
62
- '//package/sub_package']
63
-
64
- good_pn.each do |pn|
65
- assert(Build::ArtifactName.package_name?(pn),
66
- "'#{pn}' should be a valid package name.")
67
- end
68
- end
69
-
70
- def test_strip
71
- stripped = [['package', '//package'],
72
- ['package/sub_package', '//package/sub_package'],
73
- ['target', ':target'],
74
- ['blah', 'blah'],
75
- ['//package:target', '//package:target']]
76
-
77
- stripped.each do |val, arg|
78
- assert_equal(val, Build::ArtifactName.strip(arg))
79
- end
80
- end
81
-
82
- def test_fetch
83
- an = Build::ArtifactName.new(:target => 'target', :package => 'package')
84
- end
85
- end
@@ -1,23 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'build/artifact'
4
-
5
- class ArtifactTest < Test::Unit::TestCase
6
- def test_flatten_deps
7
- a1 = Build::Artifact.define_artifact(:a1, :p)
8
- a2 = Build::Artifact.define_artifact(:a2, :p)
9
- b1 = Build::Artifact.define_artifact(:b1, :p, ['//p:a1'])
10
- b2 = Build::Artifact.define_artifact(:b2, :p, ['//p:a1', '//p:a2'])
11
- c = Build::Artifact.define_artifact(:a1, :p, ['//p:b1', '//p:b2'])
12
-
13
- all_deps = Build::Artifact.flatten_deps(c).collect do |artifact|
14
- artifact.name.to_s
15
- end
16
- all_deps.sort!
17
-
18
- answer = ['//p:a1', '//p:a2', '//p:b1', '//p:b2']
19
- answer.sort!
20
-
21
- assert_equal(answer, all_deps)
22
- end
23
- end
@@ -1,42 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'gen/java/block'
4
-
5
- class JavaBlockTest < Test::Unit::TestCase
6
- include Gen::Java
7
-
8
- STATEMENTS = ['int a = 0;',
9
- 'int b = a + 2;',
10
- '//start',
11
- 'System.out.println(b);',
12
- '//end']
13
-
14
- def test_append
15
- jb = JavaBlock.new
16
- STATEMENTS.each do |s|
17
- jb << s
18
- end
19
-
20
- assert_equal(STATEMENTS,
21
- jb.statements)
22
- end
23
-
24
- def test_parse
25
- text = ""
26
- STATEMENTS.each do |s|
27
- text << s << "\n"
28
- end
29
-
30
- assert_equal(STATEMENTS,
31
- JavaBlock.parse(text).statements)
32
- end
33
-
34
- def test_to_s
35
- j = ['a = b;',
36
- 'b = c;']
37
-
38
- s = "{\n a = b;\n b = c;\n }"
39
- assert_equal(s,
40
- JavaBlock.new(:statements => j).to_s(1))
41
- end
42
- end
@@ -1,23 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'gen/java/variable'
4
- require 'gen/java/callable'
5
-
6
- class JavaCallableTest < Test::Unit::TestCase
7
- include Gen::Java
8
-
9
- def test_to_s
10
- jb = JavaBlock.new(:indent => 1,
11
- :statements => ['a = b;',
12
- 'b = c;'])
13
- a = JavaVariable.new(:int, :a)
14
- b = JavaVariable.new(:String, :b)
15
-
16
- s = "callable(int a, String b) {\n a = b;\n b = c;\n }"
17
-
18
- assert_equal(s,
19
- JavaCallable.new(:name => :callable,
20
- :params => [a, b],
21
- :block => jb).to_s(1))
22
- end
23
- end
@@ -1,25 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'gen/java/method'
4
-
5
- class JavaMethodTest < Test::Unit::TestCase
6
- include Gen::Java
7
-
8
- def test_to_s
9
- jb = JavaBlock.new(:indent => 1,
10
- :statements => ['a = b;',
11
- 'b = c;'])
12
- a = JavaVariable.new(:int, :a)
13
- b = JavaVariable.new(:String, :b)
14
-
15
- s = "private int callable(int a, String b) {\n a = b;\n b = c;\n}"
16
-
17
- assert_equal(s,
18
- JavaMethod.new(:type => :int,
19
- :visibility => :private,
20
- :name => :callable,
21
- :params => [a, b],
22
- :block => jb).to_s)
23
-
24
- end
25
- end
@@ -1,16 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'gen/java/statement'
4
-
5
- class JavaStatementTest < Test::Unit::TestCase
6
- include Gen::Java
7
-
8
- def test_comment?
9
- js = JavaStatement.new('a = b;')
10
-
11
- assert(!js.comment?, "#{js.to_s} should not be considered a comment")
12
-
13
- js = JavaStatement.new('//asdf')
14
- assert(js.comment?, "#{js.to_s} should be considered a comment")
15
- end
16
- end
@@ -1,8 +0,0 @@
1
- require 'test/unit'
2
-
3
- require 'java/tools'
4
-
5
- class JavaTest < Test::Unit::TestCase
6
- def test_something
7
- end
8
- end