cake 0.2.7 → 0.2.8

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.
Files changed (4) hide show
  1. data/bin/cake +69 -17
  2. data/lib/bake.jar +0 -0
  3. data/lib/cake.jar +0 -0
  4. metadata +4 -4
data/bin/cake CHANGED
@@ -11,6 +11,7 @@ require 'fileutils'
11
11
  require 'pp'
12
12
 
13
13
  file = File.readlink(__FILE__) rescue __FILE__
14
+ $bakedir = Dir.getwd
14
15
  $cakedir = File.dirname(File.dirname(file))
15
16
  $confdir = ".cake"
16
17
  $repo = "http://clojars.org/repo/cake/cake"
@@ -95,8 +96,12 @@ def verbose?
95
96
  debug? or $opts[:v] or $opts[:verbose]
96
97
  end
97
98
 
99
+ def config_updated?
100
+ newer?(".cake/config", ".cake/cake.pid") or newer?(".cake/config", ".cake/bake.pid")
101
+ end
102
+
98
103
  def restart?
99
- $opts[:r] or $opts[:restart] or [:stop, :restart].include?($command)
104
+ $opts[:r] or $opts[:restart] or [:stop, :restart].include?($command) or config_updated?
100
105
  end
101
106
 
102
107
  def admin_command?
@@ -109,12 +114,27 @@ def log(command, *message)
109
114
  end
110
115
  end
111
116
 
117
+ CONFIG_FILE = ".cake/config"
118
+ def config
119
+ if @config.nil?
120
+ @config = {}
121
+ File.open(CONFIG_FILE, 'r') do |file|
122
+ file.each do |line|
123
+ key, value = line.split('=', 2)
124
+ @config[key.strip] = value.strip
125
+ end
126
+ end if File.exists?(CONFIG_FILE)
127
+ end
128
+ @config
129
+ end
130
+
112
131
  class JVM
113
- attr_reader :type, :classpath, :port, :pid, :pidfile, :start_time
132
+ attr_reader :type, :classpath, :libpath, :port, :pid, :pidfile, :start_time
114
133
 
115
- def initialize(classpath)
134
+ def initialize(classpath, libpath = nil)
116
135
  @type = self.class.name.downcase
117
136
  @classpath = classpath
137
+ @libpath = libpath
118
138
  @pidfile = "#{$confdir}/#{type}.pid"
119
139
  @start_time = File.exists?(pidfile) ? File.mtime(pidfile) : Time.now
120
140
 
@@ -163,6 +183,10 @@ class JVM
163
183
  end
164
184
  end
165
185
 
186
+ def java_opts
187
+ "-cp #{classpath} -Djava.library.path=#{libpath}"
188
+ end
189
+
166
190
  MIN_PORT = 2**13
167
191
  MAX_PORT = 2**16
168
192
 
@@ -170,7 +194,7 @@ class JVM
170
194
  return if running?
171
195
  @port = rand(MAX_PORT - MIN_PORT) + MIN_PORT
172
196
  log(:start, "starting #{type} jvm on port #{port}") if debug?
173
- @pid = daemon %{ java -d32 -cp #{classpath} clojure.main -e "(use '#{type})(start-server #{port})" /dev/null }
197
+ @pid = daemon %{ java #{java_opts} clojure.main -e "(use '#{type})(start-server #{port})" /dev/null }
174
198
  File.open(pidfile, 'w') {|f| f.write("#{pid}\n#{port}\n") }
175
199
  log(:start, "#{type} jvm started") if verbose?
176
200
  rescue Errno::EADDRNOTAVAIL => e
@@ -243,7 +267,7 @@ private
243
267
  pid
244
268
  end
245
269
 
246
- def with_socket(retries = 5)
270
+ def with_socket(retries = 10)
247
271
  return unless port
248
272
  socket = TCPSocket.new("localhost", port)
249
273
  result = yield(socket)
@@ -273,15 +297,19 @@ class Cake < JVM
273
297
  command
274
298
  end
275
299
  end
300
+
301
+ def java_opts
302
+ [ENV['CAKE_JAVA_OPTS'], config['cake.java_opts'], super].compact.join(' ')
303
+ end
276
304
  end
277
305
 
278
306
  class Bake < JVM
279
- MARKER = rand.to_s
307
+ MARKER = "=#{rand.to_s}="
280
308
  PROMPT = /^(.*)#{MARKER}$/
281
309
  START_REPL = <<-END
282
310
  (clojure.main/repl
283
311
  :init #(in-ns 'user)
284
- :prompt #(printf "%s=> #{MARKER}\n" (ns-name *ns*)))
312
+ :prompt #(printf "%s#{MARKER}\n" (ns-name *ns*)))
285
313
  END
286
314
 
287
315
  def repl
@@ -291,8 +319,8 @@ class Bake < JVM
291
319
  socket.write START_REPL
292
320
  socket.gets # burn extra prompt
293
321
 
294
- while prompt = read_until_prompt(socket)
295
- line = readline(prompt)
322
+ while @ns = read_until_prompt(socket)
323
+ line = readline
296
324
  return unless line
297
325
  socket.write(line + "\n")
298
326
  end
@@ -302,6 +330,10 @@ class Bake < JVM
302
330
  save_history
303
331
  end
304
332
 
333
+ def java_opts
334
+ [ENV['JAVA_OPTS'], config['project.java_opts'], super].compact.join(' ')
335
+ end
336
+
305
337
  private
306
338
 
307
339
  HISTORY_NUM = 500
@@ -336,9 +368,12 @@ private
336
368
  end
337
369
  end
338
370
 
339
- def readline(initial_prompt)
371
+ Readline.completer_word_break_characters = " \t\n\"'`~@;#&{}()[]"
372
+
373
+ def readline
340
374
  input = []
341
- prompt = initial_prompt.clone
375
+ prompt = "#{@ns}=> "
376
+ Readline.completion_proc = method(:completions)
342
377
  while line = Readline.readline(prompt)
343
378
  input << line
344
379
  if complete?(input)
@@ -352,6 +387,18 @@ private
352
387
  Readline::HISTORY.push(input)
353
388
  retry
354
389
  end
390
+
391
+ def completions(prefix)
392
+ return [] if prefix.empty?
393
+ with_socket do |socket|
394
+ socket.write(":completions [\"#{prefix}\" #{@ns}]\n")
395
+ completions = []
396
+ while line = socket.gets
397
+ completions << line.chomp
398
+ end
399
+ completions
400
+ end
401
+ end
355
402
  end
356
403
 
357
404
  # Bootstrap cake dependencies.
@@ -362,8 +409,8 @@ if File.exists?("#{$cakedir}/.gitignore")
362
409
  version = IO.read("#{$cakedir}/project.clj").first.match(/defproject cake \"(.*)\"/)[1]
363
410
  get_cake(version, lib)
364
411
  end
365
- cakepath = "#{$cakedir}/src:#{lib}/*"
366
- bakepath = "#{$cakedir}/bake"
412
+ cakepath = "#{$cakedir}/src:#{lib}/*:#{lib}/dev/*"
413
+ bakepath = "#{$cakedir}/bake:#{lib}/dev/*"
367
414
  else
368
415
  cakejar = "#{lib}/cake.jar"
369
416
  bakejar = "#{lib}/bake.jar"
@@ -380,11 +427,16 @@ else
380
427
  end
381
428
  end
382
429
 
383
- pwd = Dir.getwd
384
- srcpath = "#{pwd}/src:#{pwd}/src/clj"
430
+ srcpath = "#{$bakedir}/src:#{$bakedir}/src/clj"
385
431
 
386
- cake = Cake.new("#{cakepath}:#{srcpath}:#{pwd}/lib/dev/*")
387
- bake = Bake.new("#{bakepath}:#{srcpath}:#{pwd}/classes:#{pwd}/test:#{pwd}/lib/*:#{pwd}/lib/dev/*")
432
+ cake = Cake.new(
433
+ "#{cakepath}:#{srcpath}:#{$bakedir}/lib/dev/*",
434
+ "#{$bakedir}/lib/dev/native"
435
+ )
436
+ bake = Bake.new(
437
+ "#{bakepath}:#{srcpath}:#{$bakedir}/classes:#{$bakedir}/test:#{$bakedir}/lib/*:#{$bakedir}/lib/dev/*",
438
+ "#{$bakedir}/lib/native:#{$bakedir}/lib/dev/native"
439
+ )
388
440
 
389
441
  if $command == :kill
390
442
  cake.kill
Binary file
Binary file
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cake
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 7
10
- version: 0.2.7
9
+ - 8
10
+ version: 0.2.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Justin Balthrop
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-06-22 00:00:00 -07:00
19
+ date: 2010-06-25 00:00:00 -07:00
20
20
  default_executable: cake
21
21
  dependencies: []
22
22