dev 2.1.153 → 2.1.154

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/lib/apps/git.rb +207 -208
  3. data/lib/apps/msbuild.rb +90 -90
  4. data/lib/apps/nbench.rb +2 -1
  5. data/lib/apps/nuget.rb +57 -59
  6. data/lib/apps/svn.rb +137 -143
  7. data/lib/apps/wix.rb +47 -50
  8. data/lib/apps/xcodebuild.rb +13 -11
  9. data/lib/apps/zip.rb +25 -25
  10. data/lib/apps.rb +3 -1
  11. data/lib/base/array.rb +66 -64
  12. data/lib/base/command.rb +237 -238
  13. data/lib/base/dir.rb +73 -76
  14. data/lib/base/environment.rb +94 -99
  15. data/lib/base/file.rb +35 -33
  16. data/lib/base/gemspec.rb +47 -45
  17. data/lib/base/giturl.rb +88 -90
  18. data/lib/base/hash.rb +20 -15
  19. data/lib/base/history.rb +36 -33
  20. data/lib/base/internet.rb +22 -20
  21. data/lib/base/project.rb +410 -423
  22. data/lib/base/projects.rb +231 -246
  23. data/lib/base/source.rb +22 -20
  24. data/lib/base/string.rb +6 -4
  25. data/lib/base/text.rb +16 -14
  26. data/lib/base/timeout.rb +29 -28
  27. data/lib/base/timer.rb +23 -19
  28. data/lib/base/version.rb +68 -72
  29. data/lib/base.rb +5 -3
  30. data/lib/commands.rb +47 -43
  31. data/lib/dev.config.rb +3 -2
  32. data/lib/dev.rb +65 -66
  33. data/lib/tasks/add.rb +34 -40
  34. data/lib/tasks/analyze.rb +17 -15
  35. data/lib/tasks/build.rb +101 -103
  36. data/lib/tasks/clean.rb +6 -4
  37. data/lib/tasks/clobber.rb +20 -18
  38. data/lib/tasks/commit.rb +42 -44
  39. data/lib/tasks/default.rb +41 -39
  40. data/lib/tasks/doc.rb +10 -8
  41. data/lib/tasks/info.rb +8 -7
  42. data/lib/tasks/package.rb +23 -20
  43. data/lib/tasks/publish.rb +20 -25
  44. data/lib/tasks/pull.rb +9 -9
  45. data/lib/tasks/push.rb +11 -13
  46. data/lib/tasks/setup.rb +180 -183
  47. data/lib/tasks/test.rb +121 -107
  48. data/lib/tasks/update.rb +13 -11
  49. data/lib/tasks.rb +38 -42
  50. metadata +7 -9
  51. data/bin/dev +0 -3
data/lib/base/timeout.rb CHANGED
@@ -1,25 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ############################################################################
2
- # The following code is based on code originally copied from
4
+ # The following code is based on code originally copied from
3
5
  # https://gist.github.com/lpar/1032297
4
6
  # Gist title: lpar/timeout.rb
5
7
  ############################################################################
6
8
  # Runs a specified shell command in a separate thread.
7
9
  # If it exceeds the given timeout in seconds, kills it.
8
10
  # Returns any output produced by the command (stdout or stderr) as a String.
9
- # Uses Kernel.select to wait up to the tick length (in seconds) between
11
+ # Uses Kernel.select to wait up to the tick length (in seconds) between
10
12
  # checks on the command's status
11
13
  #
12
14
  # If you've got a cleaner way of doing this, I'd be interested to see it.
13
15
  # If you think you can do it with Ruby's Timeout module, think again.
14
- def run_with_timeout(directory,command, timeout, tick)
15
- output = ''
16
- exit_code=1
16
+ def run_with_timeout(directory, command, timeout, tick)
17
+ output = ""
18
+ exit_code = 1
17
19
 
18
- Open3.popen2e(command, :chdir=>directory) { |stdin,stderrout,thread|
20
+ Open3.popen2e(command, chdir: directory) do |_stdin, stderrout, thread|
19
21
  pid = thread.pid
20
22
 
21
23
  start = Time.now
22
- while (Time.now - start) < timeout and thread.alive?
24
+ while ((Time.now - start) < timeout) && thread.alive?
23
25
  # Wait up to `tick` seconds for output/error data
24
26
  Kernel.select([stderrout], nil, nil, tick)
25
27
  # Try to read the data
@@ -29,14 +31,14 @@ def run_with_timeout(directory,command, timeout, tick)
29
31
  # A read would block, so loop around for another select
30
32
  rescue EOFError
31
33
  # Command has completed, not really an error...
32
- exit_code=wait_thread.value
34
+ exit_code = wait_thread.value
33
35
  break
34
36
  end
35
37
 
36
38
  sleep(0.5)
37
39
  end
38
40
 
39
- exit_code=wait_thread.value
41
+ exit_code = wait_thread.value
40
42
 
41
43
  # Give Ruby time to clean up the other thread
42
44
  sleep 1
@@ -45,14 +47,13 @@ def run_with_timeout(directory,command, timeout, tick)
45
47
  # We need to kill the process, because killing the thread leaves
46
48
  # the process alive but detached, annoyingly enough.
47
49
  Process.kill("TERM", pid)
48
- exit_code=5
50
+ exit_code = 5
49
51
  end
52
+ end
50
53
 
51
-
52
- }
54
+ [output, exit_code]
55
+ end
53
56
 
54
- return [output,exit_code]
55
- end
56
57
  # begin
57
58
  # # Start task in another thread, which spawns a process
58
59
  # stdin, stderrout, thread = Open3.popen2e(command, :chdir=>directory)
@@ -79,8 +80,8 @@ end
79
80
  # sleep 1
80
81
 
81
82
  # if thread.alive?
82
- # We need to kill the process, because killing the thread leaves
83
- # the process alive but detached, annoyingly enough.
83
+ # We need to kill the process, because killing the thread leaves
84
+ # the process alive but detached, annoyingly enough.
84
85
  # Process.kill("TERM", pid)
85
86
  # exit_code=5
86
87
  # else
@@ -92,30 +93,30 @@ end
92
93
  # stderrout.close if stderrout
93
94
  # end
94
95
  # return [output,exit_code]
95
- #end
96
+ # end
97
+
98
+ require "timeout"
96
99
 
97
- require 'timeout'
98
- def run_with_timeout2(directory,command,timeout)
100
+ def run_with_timeout2(directory, command, timeout)
99
101
  # stdout, stderr pipes
100
102
  rout, wout = IO.pipe
101
103
  rerr, werr = IO.pipe
102
- output=''
103
- error=''
104
- exit_code=1
105
- pid = Process.spawn(command, :chdir => directory, :out => wout, :err => werr)
104
+ output = ""
105
+ error = ""
106
+ exit_code = 1
107
+ pid = Process.spawn(command, chdir: directory, out: wout, err: werr)
106
108
  begin
107
109
  Timeout.timeout(timeout) do
108
110
  exit_code = Process.wait2(pid)
109
111
  output = rout.readlines.join("\n")
110
112
  error = rerr.readlines.join("\n")
111
113
  end
112
- rescue
113
- Proces.kill('TERM',pid)
114
- output = output + 'timeout occurred.'
114
+ rescue StandardError
115
+ Proces.kill("TERM", pid)
116
+ output = "#{output}timeout occurred."
115
117
  ensure
116
118
  rout.close
117
119
  rerr.close
118
120
  end
119
- [output,exit_code]
121
+ [output, exit_code]
120
122
  end
121
-
data/lib/base/timer.rb CHANGED
@@ -1,45 +1,49 @@
1
+ # frozen_string_literal: true
2
+
1
3
  puts __FILE__ if defined?(DEBUG)
2
4
 
3
5
  class Timer
4
6
  attr_accessor :start_time
5
7
 
6
8
  def initialize
7
- @start_time=Time.now
9
+ @start_time = Time.now
8
10
  end
9
11
 
10
- def elapsed # in seconds
11
- return Time.now-@start_time
12
+ # in seconds
13
+ def elapsed
14
+ Time.now - @start_time
12
15
  end
13
16
 
14
17
  def elapsed_str
15
- elapsed_str="[" + "%.0f" %(elapsed) + "s]"
18
+ elapsed_str = "[#{"%.0f" % elapsed}s]"
16
19
  end
17
20
 
18
- def self.elapsed_exceeds?(name,duration_seconds)
19
- if(Timer.get_elapsed(name).nil? || Timer.get_elapsed(name) > duration_seconds)
20
- return true
21
- end
22
- return false
21
+ def self.elapsed_exceeds?(name, duration_seconds)
22
+ return true if Timer.get_elapsed(name).nil? || Timer.get_elapsed(name) > duration_seconds
23
+
24
+ false
23
25
  end
24
26
 
25
27
  def self.get_elapsed(name)
26
- timestamp=get_timestamp(name)
27
- return Time.now-timestamp if(!timestamp.nil?)
28
- nil
28
+ timestamp = get_timestamp(name)
29
+ return Time.now - timestamp unless timestamp.nil?
30
+
31
+ nil
29
32
  end
30
33
 
31
34
  def self.get_timestamp(name)
32
- dir=Rake.application.original_dir
33
- if(File.exists?("#{DEV[:dev_root]}/log/#{name}.timestamp"))
35
+ dir = Rake.application.original_dir
36
+ if File.exist?("#{DEV[:dev_root]}/log/#{name}.timestamp")
34
37
  return Time.parse(File.read("#{DEV[:dev_root]}/log/#{name}.timestamp").strip)
35
- end
36
- nil
38
+ end
39
+
40
+ nil
37
41
  end
38
42
 
39
43
  def self.set_timestamp(name)
40
- Dir.mkdir("#{DEV_TASKS[:dev_root]}/log") if(!Dir.exists?("#{DEV_TASKS[:dev_root]}/log"))
41
- File.open("#{DEV_TASKS[:dev_root]}/log/#{name}.timestamp",'w'){|f|f.puts(Time.now.to_s)}
44
+ Dir.mkdir("#{DEV_TASKS[:dev_root]}/log") unless Dir.exist?("#{DEV_TASKS[:dev_root]}/log")
45
+ File.open("#{DEV_TASKS[:dev_root]}/log/#{name}.timestamp", "w") { |f| f.puts(Time.now.to_s) }
42
46
  end
43
47
  end
44
48
 
45
- TIMER=Timer.new
49
+ TIMER = Timer.new
data/lib/base/version.rb CHANGED
@@ -1,83 +1,79 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Version
2
- def self.extract text
3
- [/VERSION\s*=\s*['"]([\d.]+)['"]/,
4
- /[Vv]ersion\s*=\s*['"]([\d.]+)['"]/,
5
- /Version\(\s*"([\d.]+)"\s*\)/].each{|regex|
6
- scan=text.scan(regex)
7
- if(!scan.nil?)
8
- return scan[0][0] if(scan.length > 0 && !scan[0].nil? && scan[0].length > 0)
9
- end
10
- }
11
- nil
12
- end
4
+ def self.extract(text)
5
+ [/VERSION\s*=\s*['"]([\d.]+)['"]/,
6
+ /[Vv]ersion\s*=\s*['"]([\d.]+)['"]/,
7
+ /Version\(\s*"([\d.]+)"\s*\)/].each do |regex|
8
+ scan = text.scan(regex)
9
+ return scan[0][0] if !scan.nil? && (scan.length.positive? && !scan[0].nil? && scan[0].length.positive?)
10
+ end
11
+ nil
12
+ end
13
+
14
+ def self.extract_from_file(filename)
15
+ Version.extract IO.read(filename)
16
+ end
17
+
18
+ def self.extract_from_filelist(filelist)
19
+ version = nil
20
+ filelist.each do |f|
21
+ version = extract_from_file f
22
+ return version unless version.nil?
23
+ end
24
+ nil
25
+ end
13
26
 
14
- def self.extract_from_file filename
15
- Version.extract IO.read(filename)
16
- end
27
+ def self.update_text(text, version)
28
+ text = text.gsub(/version\s*=\s*'[\d.]+'/, "version='#{version}'")
29
+ text = text.gsub(/VERSION\s*=\s*'[\d.]+'/, "VERSION='#{version}'")
30
+ text = text.gsub(/version\s*=\s*"[\d.]+"/, "version=\"#{version}\"")
31
+ text = text.gsub(/Version\s*=\s*'[\d.]+'/, "Version='#{version}'")
32
+ text = text.gsub(/Version\s*=\s*"[\d.]+"/, "Version=\"#{version}\"")
33
+ text = text.gsub(/Version\(\s*"[\d.]+"\s*\)/, "Version(\"#{version}\")")
34
+ text = text.gsub(/Name\s*=\s*"Version"\s*Value\s*=\s*"[\d.]+"/, "Name=\"Version\" Value=\"#{version}\"")
35
+ end
17
36
 
18
- def self.extract_from_filelist filelist
19
- version=nil
20
- filelist.each{|f|
21
- version=extract_from_file f
22
- return version if !version.nil?
23
- }
24
- nil
25
- end
37
+ def self.update_file(filename, version)
38
+ if File.exist?(filename)
39
+ orig = IO.read(filename)
40
+ text = Version.update_text orig, version
41
+ File.open(filename, "w") { |f| f.write(text) } if orig != text
42
+ end
43
+ end
26
44
 
27
- def self.update_text text, version
28
- text=text.gsub(/version\s*=\s*'[\d.]+'/,"version='#{version}'")
29
- text=text.gsub(/VERSION\s*=\s*'[\d.]+'/,"VERSION='#{version}'")
30
- text=text.gsub(/version\s*=\s*"[\d.]+"/,"version=\"#{version}\"")
31
- text=text.gsub(/Version\s*=\s*'[\d.]+'/,"Version='#{version}'")
32
- text=text.gsub(/Version\s*=\s*"[\d.]+"/,"Version=\"#{version}\"")
33
- text=text.gsub(/Version\(\s*"[\d.]+"\s*\)/,"Version(\"#{version}\")")
34
- text=text.gsub(/Name\s*=\s*"Version"\s*Value\s*=\s*"[\d.]+"/,"Name=\"Version\" Value=\"#{version}\"")
45
+ def self.update_filelist(filelist, version)
46
+ filelist.each do |f|
47
+ Version.update_file f, version
35
48
  end
49
+ end
36
50
 
37
- def self.update_file filename, version
38
- if(File.exists?(filename))
39
- orig=IO.read(filename)
40
- text=Version.update_text orig,version
41
- File.open(filename,'w'){|f|f.write(text)} if(orig!=text)
42
- end
43
- end
51
+ def self.read(filename)
52
+ return Gem::Specification.load(filename).version.to_s if filename.include?(".gemspec")
44
53
 
45
- def self.update_filelist filelist,version
46
- filelist.each{|f|
47
- Version.update_file f,version
48
- }
49
- end
54
+ if filename.include?("AssemblyInfo.cs")
55
+ scan = IO.read(filename).scan(/Version\("([\d.]+)"\)/)
56
+ return scan[0][0] if !scan.nil? && (scan.length.positive? && !scan[0].nil? && scan[0].length.positive?)
50
57
 
51
- def self.read filename
52
- return "#{Gem::Specification.load(filename).version.to_s}" if filename.include?('.gemspec')
53
- if filename.include?('AssemblyInfo.cs')
54
- scan=IO.read(filename).scan(/Version\(\"([\d.]+)\"\)/)
55
- if(!scan.nil?)
56
- return scan[0][0] if(scan.length > 0 && !scan[0].nil? && scan[0].length > 0)
57
- end
58
- #return IO.read(filename).scan(/Version\(\"([\d.]+)\"\)/)[0][0]
59
- scan=IO.read(filename).scan(/Version=\"([\d.]+)\"/)
60
- if(!scan.nil?)
61
- return scan[0][0] if(scan.length > 0 && !scan[0].nil? && scan[0].length > 0)
62
- end
63
- end
64
- '0.0'
65
- end
58
+ # return IO.read(filename).scan(/Version\(\"([\d.]+)\"\)/)[0][0]
59
+ scan = IO.read(filename).scan(/Version="([\d.]+)"/)
60
+ return scan[0][0] if !scan.nil? && (scan.length.positive? && !scan[0].nil? && scan[0].length.positive?)
61
+ end
62
+ "0.0"
63
+ end
66
64
 
67
- def self.get_version
68
- Dir.glob('**/*.gemspec').each{|gemspec|
69
- return Version.read gemspec
70
- }
71
- Dir.glob('**/AssemblyInfo.cs').each{|assemblyInfo|
72
- return Version.read assemblyInfo
73
- }
74
- Dir.glob('**/*.wxs').each{|wxs|
75
- return Version.read wxs
76
- }
77
- '0.0'
78
- end
65
+ def self.get_version
66
+ Dir.glob("**/*.gemspec").each do |gemspec|
67
+ return Version.read gemspec
68
+ end
69
+ Dir.glob("**/AssemblyInfo.cs").each do |assemblyInfo|
70
+ return Version.read assemblyInfo
71
+ end
72
+ Dir.glob("**/*.wxs").each do |wxs|
73
+ return Version.read wxs
74
+ end
75
+ "0.0"
76
+ end
79
77
  end
80
78
 
81
- if(!defined?(VERSION))
82
- VERSION=Version.get_version
83
- end
79
+ VERSION = Version.get_version unless defined?(VERSION)
data/lib/base.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  puts __FILE__ if defined?(DEBUG)
2
4
 
3
- ['array','command','dir','environment','file','gemspec',
4
- 'hash','history','internet','project','projects','source',
5
- 'string','text','timeout','timer','version'].each{|name| require_relative("base/#{name}.rb")}
5
+ %w[array command dir environment file gemspec
6
+ hash history internet project projects source
7
+ string text timeout timer version].each { |name| require_relative("base/#{name}.rb") }
data/lib/commands.rb CHANGED
@@ -1,51 +1,55 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if defined?(DEBUG)
2
- puts DELIMITER
3
- puts __FILE__
4
+ puts DELIMITER
5
+ puts __FILE__
4
6
  end
5
7
 
6
- require_relative('apps.rb')
8
+ require_relative("apps")
9
+
10
+ require "json"
11
+ require "rake/clean"
12
+ require "pp"
7
13
 
8
- require 'json'
9
- require 'rake/clean'
10
- require 'pp'
14
+ Dir.glob("#{File.dirname(__FILE__)}/tasks/*.rb").sort.each do |rb|
15
+ require(rb) unless rb.include?("default")
16
+ end
11
17
 
12
- Dir.glob("#{File.dirname(__FILE__)}/tasks/*.rb").each{|rb|
13
- require(rb) if !rb.include?('default')
14
- }
15
18
  class Commands < Hash
16
- attr_accessor :env
17
- def initialize env=nil,directory=Rake.application.original_dir
18
- @env=env
19
- @env=Environment.new() if @env.nil?
20
- Dir.chdir(directory) do
21
- self[:pull]=Pull.new
22
- self[:update]=Update.new
23
- self[:setup]=Setup.new
24
- self[:build]=Build.new
25
- self[:test]=Test.new
26
- self[:analyze]=Analyze.new
27
- self[:doc]=Doc.new
28
- self[:package]=Package.new
29
- self[:publish]=Publish.new
30
- self[:add]=Add.new
31
- self[:commit]=Commit.new
32
- self[:push]=Push.new
33
- end
34
- end
35
-
36
- def info
37
- puts "Commands"
38
- self.each{|k,v|
39
- v.update if v.respond_to? 'update'
40
- if v.length > 0
41
- puts " #{k}"
42
- v.each{|c|
43
- puts " #{c[:input]}" if(!c.kind_of?(Hash))
44
- }
45
- end
46
- }
47
- end
19
+ attr_accessor :env
20
+
21
+ def initialize(env = nil, directory = Rake.application.original_dir)
22
+ @env = env
23
+ @env = Environment.new if @env.nil?
24
+ Dir.chdir(directory) do
25
+ self[:pull] = Pull.new
26
+ self[:update] = Update.new
27
+ self[:setup] = Setup.new
28
+ self[:build] = Build.new
29
+ self[:test] = Test.new
30
+ self[:analyze] = Analyze.new
31
+ self[:doc] = Doc.new
32
+ self[:package] = Package.new
33
+ self[:publish] = Publish.new
34
+ self[:add] = Add.new
35
+ self[:commit] = Commit.new
36
+ self[:push] = Push.new
37
+ end
38
+ end
39
+
40
+ def info
41
+ puts "Commands"
42
+ each do |k, v|
43
+ v.update if v.respond_to? "update"
44
+ next unless v.length.positive?
45
+
46
+ puts " #{k}"
47
+ v.each do |c|
48
+ puts " #{c[:input]}" unless c.is_a?(Hash)
49
+ end
50
+ end
51
+ end
48
52
  end
49
53
 
50
- COMMANDS=Commands.new
51
- MSBUILD=MSBuild.new
54
+ COMMANDS = Commands.new
55
+ MSBUILD = MSBuild.new
data/lib/dev.config.rb CHANGED
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # dev.config.rb
3
4
  #
4
5
  # SOURCE.include('**/*.svg')
5
- #
6
+ #
6
7
  # CLEAN.include('bin')
7
8
  #
8
- #
9
+ #
data/lib/dev.rb CHANGED
@@ -1,81 +1,80 @@
1
- DELIMITER='==================================================================================='
1
+ # frozen_string_literal: true
2
+
3
+ DELIMITER = "==================================================================================="
2
4
  puts DELIMITER if defined?(DEBUG)
3
5
  puts __FILE__ if defined?(DEBUG)
4
6
 
5
- require_relative('base.rb')
6
- require_relative('base/string.rb')
7
- require_relative('base/environment.rb')
8
- require_relative('base/giturl.rb')
9
- require_relative('base/projects.rb')
10
- require_relative('commands.rb')
7
+ require_relative("base")
8
+ require_relative("base/string")
9
+ require_relative("base/environment")
10
+ require_relative("base/giturl")
11
+ require_relative("base/projects")
12
+ require_relative("commands")
11
13
 
12
14
  class Dev
13
- attr_accessor :env,:projects,:commands
15
+ attr_accessor :env, :projects, :commands
16
+
17
+ def initialize(env = nil)
18
+ @env = Environment.new(env) if !env.nil? && env.is_a?(Hash)
19
+ @env = Environment.new if @env.nil?
20
+ @projects = Projects.new(@env)
21
+ @commands = Commands.new(@env)
22
+ @output = ""
23
+ end
14
24
 
15
- def initialize env=nil
16
- @env=Environment.new(env) if !env.nil? && env.kind_of?(Hash)
17
- @env=Environment.new() if @env.nil?
18
- @projects=Projects.new(@env)
19
- @commands=Commands.new(@env)
20
- @output=''
21
- end
22
-
23
- def execute args
24
- args=args.split(' ') if(args.kind_of?(String))
25
+ def execute(args)
26
+ args = args.split(" ") if args.is_a?(String)
25
27
 
26
- # parse arguments that are of the form KEY=VALUE
27
- args.each{|arg|
28
- if(arg.include?('='))
29
- words=arg.split('=')
30
- if(words.length==2)
31
- ENV[words[0]]=words[1]
32
- end
33
- end
34
- }
28
+ # parse arguments that are of the form KEY=VALUE
29
+ args.each do |arg|
30
+ next unless arg.include?("=")
35
31
 
36
- if args.length == 0
37
- return usage
38
- else
39
- subcommand=args[0] if args.length > 0
40
- subargs=Array.new
41
- subargs=args[1,args.length-1] if args.length > 1
32
+ words = arg.split("=")
33
+ ENV[words[0]] = words[1] if words.length == 2
34
+ end
42
35
 
43
- return projects.add(subargs) if subcommand=='add'
44
- return projects.clobber(subargs) if subcommand=='clobber'
45
- return projects.import(subargs) if subcommand=='import'
46
- return projects.list(subargs) if subcommand=='list'
47
- return projects.make(subargs) if subcommand=='make'
48
- return projects.info(subargs) if subcommand=='info'
49
- return projects.remove(subargs) if subcommand=='remove'
50
- return projects.work(subargs) if subcommand=='work'
51
- return projects.update(subargs) if subcommand=='update'
36
+ if args.length.zero?
37
+ usage
38
+ else
39
+ subcommand = args[0] if args.length.positive?
40
+ subargs = []
41
+ subargs = args[1, args.length - 1] if args.length > 1
52
42
 
53
- @env.out "unknown command: '#{subcommand}'"
54
- 1
55
- end
56
- end
43
+ return projects.add(subargs) if subcommand == "add"
44
+ return projects.clobber(subargs) if subcommand == "clobber"
45
+ return projects.import(subargs) if subcommand == "import"
46
+ return projects.list(subargs) if subcommand == "list"
47
+ return projects.make(subargs) if subcommand == "make"
48
+ return projects.info(subargs) if subcommand == "info"
49
+ return projects.remove(subargs) if subcommand == "remove"
50
+ return projects.work(subargs) if subcommand == "work"
51
+ return projects.update(subargs) if subcommand == "update"
57
52
 
58
- def usage
59
- return 0
60
- @env.out 'usage: dev <subcommand> [options]'
61
- @env.out ''
62
- @env.out 'available subcommands'
63
- @env.out ' help'
64
- @env.out ' list'
65
- @env.out ' make'
66
- @env.out ' info'
67
- @env.out ' work'
68
- @env.out ''
69
- @env.out "Type 'dev help <subcommand>' for help on a specific subcommand.'"
70
- 0
71
- end
53
+ @env.out "unknown command: '#{subcommand}'"
54
+ 1
55
+ end
56
+ end
57
+
58
+ def usage
59
+ return 0
60
+ @env.out "usage: dev <subcommand> [options]"
61
+ @env.out ""
62
+ @env.out "available subcommands"
63
+ @env.out " help"
64
+ @env.out " list"
65
+ @env.out " make"
66
+ @env.out " info"
67
+ @env.out " work"
68
+ @env.out ""
69
+ @env.out "Type 'dev help <subcommand>' for help on a specific subcommand.'"
70
+ 0
71
+ end
72
72
  end
73
73
 
74
- require_relative('base.rb')
75
- require_relative('tasks.rb')
76
- require_relative('commands.rb')
74
+ require_relative("base")
75
+ require_relative("tasks")
76
+ require_relative("commands")
77
77
 
78
78
  puts "defining DEV" if Environment.default.debug?
79
- DEV=Dev.new
80
- require_relative('tasks/default.rb')
81
-
79
+ DEV = Dev.new
80
+ require_relative("tasks/default")