build-tool 0.1.4 → 0.2

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 (90) hide show
  1. data.tar.gz.sig +2 -3
  2. data/History.txt +29 -0
  3. data/Manifest.txt +39 -10
  4. data/README.txt +5 -8
  5. data/Rakefile +14 -6
  6. data/bin/build-tool +3 -35
  7. data/db/migrations/001_command_histories.rb +20 -0
  8. data/db/migrations/002_module_events.rb +24 -0
  9. data/db/migrations/003_command_histories_add_logfile.rb +19 -0
  10. data/lib/build-tool.rb +1 -1
  11. data/lib/build-tool/application.rb +103 -30
  12. data/lib/build-tool/build-system/autoconf.rb +69 -6
  13. data/lib/build-tool/build-system/base.rb +2 -25
  14. data/lib/build-tool/build-system/custom.rb +6 -19
  15. data/lib/build-tool/build-system/kdel10n.rb +39 -0
  16. data/lib/build-tool/build-system/none.rb +82 -0
  17. data/lib/build-tool/cfg/lexer.rb +133 -7
  18. data/lib/build-tool/cfg/lexer.rex +58 -6
  19. data/lib/build-tool/cfg/node.rb +13 -1
  20. data/lib/build-tool/cfg/parser.rb +519 -333
  21. data/lib/build-tool/cfg/parser.y +74 -11
  22. data/lib/build-tool/cfg/visitor.rb +182 -20
  23. data/lib/build-tool/command_actions.rb +202 -0
  24. data/lib/build-tool/commands.rb +193 -49
  25. data/lib/build-tool/commands/build.rb +13 -8
  26. data/lib/build-tool/commands/configure.rb +8 -3
  27. data/lib/build-tool/commands/environments.rb +4 -8
  28. data/lib/build-tool/commands/environments/list.rb +8 -0
  29. data/lib/build-tool/commands/fetch.rb +7 -2
  30. data/lib/build-tool/commands/gc.rb +53 -0
  31. data/lib/build-tool/commands/history.rb +111 -0
  32. data/lib/build-tool/commands/install.rb +6 -1
  33. data/lib/build-tool/commands/lsfeatures.rb +73 -0
  34. data/lib/build-tool/commands/modules.rb +3 -7
  35. data/lib/build-tool/commands/modules/info.rb +15 -6
  36. data/lib/build-tool/commands/modules/list.rb +10 -5
  37. data/lib/build-tool/commands/rebase.rb +6 -1
  38. data/lib/build-tool/commands/recipes.rb +3 -7
  39. data/lib/build-tool/configuration.rb +24 -1
  40. data/lib/build-tool/environment.rb +17 -3
  41. data/lib/build-tool/feature.rb +47 -0
  42. data/lib/build-tool/history.rb +173 -0
  43. data/lib/build-tool/module.rb +49 -90
  44. data/lib/build-tool/recipe.rb +5 -0
  45. data/lib/build-tool/vcs/archive.rb +140 -0
  46. data/lib/build-tool/vcs/base.rb +5 -5
  47. data/lib/build-tool/vcs/git-svn.rb +4 -0
  48. data/lib/build-tool/vcs/git.rb +4 -0
  49. data/lib/mj/logging.rb +11 -0
  50. data/recipes/{kdeqt4.6 → kde}/custom/qt/qtscriptgenerator/compile.sh +0 -0
  51. data/recipes/{kdeqt4.6 → kde}/custom/qt/qtscriptgenerator/configure.sh +0 -0
  52. data/recipes/{kdeqt4.6 → kde}/custom/qt/qtscriptgenerator/install.sh +0 -0
  53. data/recipes/kde/custom/scripting/pyqt4/compile.sh +10 -0
  54. data/recipes/kde/custom/scripting/pyqt4/configure.sh +14 -0
  55. data/recipes/kde/custom/scripting/pyqt4/install.sh +10 -0
  56. data/recipes/kde/custom/scripting/sip/compile.sh +10 -0
  57. data/recipes/kde/custom/scripting/sip/configure.sh +13 -0
  58. data/recipes/kde/custom/scripting/sip/install.sh +10 -0
  59. data/recipes/kde/files/xsession +8 -4
  60. data/recipes/kde/kde-bindings.recipe +22 -0
  61. data/recipes/kde/kde-core.recipe +104 -0
  62. data/recipes/kde/kde-devel.recipe +38 -0
  63. data/recipes/kde/kde-finance.recipe +17 -0
  64. data/recipes/kde/kde-graphics.recipe +27 -0
  65. data/recipes/kde/kde-kdevelop.recipe +116 -0
  66. data/recipes/kde/kde-l10n.recipe +14 -0
  67. data/recipes/kde/kde-multimedia.recipe +31 -0
  68. data/recipes/kde/kde-network.recipe +55 -0
  69. data/recipes/kde/kde-office.recipe +28 -0
  70. data/recipes/kde/kde-plasma.recipe +117 -0
  71. data/recipes/{kdeqt4.6/recipe → kde/kde-qt.recipe} +25 -57
  72. data/recipes/kde/kde-scripting.recipe +63 -0
  73. data/recipes/kde/kde-support.recipe +73 -0
  74. data/recipes/kde/kde-utils.recipe +22 -0
  75. data/recipes/kde/kde-webdev.recipe +41 -0
  76. data/recipes/kde/recipe +92 -532
  77. data/recipes/kde/recipe-local +58 -2
  78. data/recipes/kde/settings.yaml +17 -0
  79. data/recipes/kde43/recipe-local +58 -2
  80. data/test/test_configuration_parser.rb +76 -21
  81. data/test/test_feature.rb +34 -0
  82. data/test/test_history.rb +149 -0
  83. metadata +185 -30
  84. metadata.gz.sig +0 -0
  85. data/lib/build-tool/pluginbase.rb +0 -43
  86. data/recipes/kdeqt4.6/info.yaml +0 -7
  87. data/recipes/kdeqt4.6/recipe-local +0 -30
  88. data/recipes/kdeqt4.6/settings.yaml +0 -27
  89. data/tasks/rdoc.rake +0 -34
  90. data/test.rb +0 -28
data.tar.gz.sig CHANGED
@@ -1,3 +1,2 @@
1
- x���yg-���ESSJ��
2
- ��*��ho����I0,�n~�@�G-���ȡ ��I,K<�OYծ���R�{������}C�j�B��Ƥ�x>���ݫ�+߂fuj�@���(�������A�
3
- 夤m�~�9�xT:�q؅�1����=��/Z� M.?3ʽv��N�!�"�d�6����`�q�) X�8O`�n�f6
1
+ e�̾�Rگe�8���d*��qI�%)0����9�s�^����[H����� �9n�������0��#�"<�.������Z�7������2c������w›
2
+ �}��
data/History.txt CHANGED
@@ -1,6 +1,35 @@
1
+ == 0.2
2
+ - Features
3
+ * Implement include directive.
4
+ * Implement feature directive.
5
+ * Group modules into features.
6
+ * Enable/Disable features.
7
+ * Implement "gc" command.
8
+ * execute "git gc" for all git repositories.
9
+ * Implement build-system "None".
10
+ * Implement vcs "archive".
11
+ - Download an archive.
12
+ - Unpack it.
13
+ * Add a database
14
+ - Keep record of executed commands and results
15
+ - Command "history" to query the commands.
16
+ - no argument -> show last 50 commands
17
+ - number -> show detailed info about that command
18
+ - +number -> show detailed info about number last command
19
+ +0 = last
20
+ +1 = next to last
21
+ ...
22
+ - <module> -> show the last 3 commands affecting the module.
23
+ - Fixes
24
+ * Sort command listing on "help".
25
+ * Fixed autoconf support.
26
+ * Many changes to the kde recipe.
27
+
28
+
1
29
  == 0.1.4 2009-12-10
2
30
  * konversation moved to git
3
31
 
32
+
4
33
  == 0.1.3 2009-11-28
5
34
  * Add some links to the homepage with documentation
6
35
  * kdevelop/kdevplatform moved to extragear for the kde recipe
data/Manifest.txt CHANGED
@@ -3,6 +3,9 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  bin/build-tool
6
+ db/migrations/001_command_histories.rb
7
+ db/migrations/002_module_events.rb
8
+ db/migrations/003_command_histories_add_logfile.rb
6
9
  lib/build-tool.rb
7
10
  lib/build-tool/GUI.rb
8
11
  lib/build-tool/application.rb
@@ -10,6 +13,8 @@ lib/build-tool/build-system/autoconf.rb
10
13
  lib/build-tool/build-system/base.rb
11
14
  lib/build-tool/build-system/cmake.rb
12
15
  lib/build-tool/build-system/custom.rb
16
+ lib/build-tool/build-system/kdel10n.rb
17
+ lib/build-tool/build-system/none.rb
13
18
  lib/build-tool/build-system/qt.rb
14
19
  lib/build-tool/cfg/lexer.rb
15
20
  lib/build-tool/cfg/lexer.rex
@@ -18,6 +23,7 @@ lib/build-tool/cfg/node.rb
18
23
  lib/build-tool/cfg/parser.rb
19
24
  lib/build-tool/cfg/parser.y
20
25
  lib/build-tool/cfg/visitor.rb
26
+ lib/build-tool/command_actions.rb
21
27
  lib/build-tool/commands.rb
22
28
  lib/build-tool/commands/build.rb
23
29
  lib/build-tool/commands/configure.rb
@@ -27,9 +33,12 @@ lib/build-tool/commands/environments/list.rb
27
33
  lib/build-tool/commands/environments/set.rb
28
34
  lib/build-tool/commands/fetch.rb
29
35
  lib/build-tool/commands/files.rb
36
+ lib/build-tool/commands/gc.rb
30
37
  lib/build-tool/commands/help.rb
38
+ lib/build-tool/commands/history.rb
31
39
  lib/build-tool/commands/info.rb
32
40
  lib/build-tool/commands/install.rb
41
+ lib/build-tool/commands/lsfeatures.rb
33
42
  lib/build-tool/commands/modules.rb
34
43
  lib/build-tool/commands/modules/info.rb
35
44
  lib/build-tool/commands/modules/list.rb
@@ -42,13 +51,15 @@ lib/build-tool/commands/recipes/list.rb
42
51
  lib/build-tool/configuration.rb
43
52
  lib/build-tool/environment.rb
44
53
  lib/build-tool/errors.rb
54
+ lib/build-tool/feature.rb
55
+ lib/build-tool/history.rb
45
56
  lib/build-tool/module.rb
46
- lib/build-tool/pluginbase.rb
47
57
  lib/build-tool/recipe.rb
48
58
  lib/build-tool/repository.rb
49
59
  lib/build-tool/server.rb
50
60
  lib/build-tool/singleton.rb
51
61
  lib/build-tool/sshkey.rb
62
+ lib/build-tool/vcs/archive.rb
52
63
  lib/build-tool/vcs/base.rb
53
64
  lib/build-tool/vcs/git-svn.rb
54
65
  lib/build-tool/vcs/git.rb
@@ -57,10 +68,35 @@ lib/mj/logging.rb
57
68
  lib/mj/tools/ssh.rb
58
69
  lib/mj/tools/subprocess.rb
59
70
  lib/mj/visitor.rb
71
+ recipes/kde/custom/qt/qtscriptgenerator/compile.sh
72
+ recipes/kde/custom/qt/qtscriptgenerator/configure.sh
73
+ recipes/kde/custom/qt/qtscriptgenerator/install.sh
74
+ recipes/kde/custom/scripting/pyqt4/compile.sh
75
+ recipes/kde/custom/scripting/pyqt4/configure.sh
76
+ recipes/kde/custom/scripting/pyqt4/install.sh
77
+ recipes/kde/custom/scripting/sip/compile.sh
78
+ recipes/kde/custom/scripting/sip/configure.sh
79
+ recipes/kde/custom/scripting/sip/install.sh
60
80
  recipes/kde/files/finish_installation.sh
61
81
  recipes/kde/files/kde4.desktop
62
82
  recipes/kde/files/xsession
63
83
  recipes/kde/info.yaml
84
+ recipes/kde/kde-bindings.recipe
85
+ recipes/kde/kde-core.recipe
86
+ recipes/kde/kde-devel.recipe
87
+ recipes/kde/kde-finance.recipe
88
+ recipes/kde/kde-graphics.recipe
89
+ recipes/kde/kde-kdevelop.recipe
90
+ recipes/kde/kde-l10n.recipe
91
+ recipes/kde/kde-multimedia.recipe
92
+ recipes/kde/kde-network.recipe
93
+ recipes/kde/kde-office.recipe
94
+ recipes/kde/kde-plasma.recipe
95
+ recipes/kde/kde-qt.recipe
96
+ recipes/kde/kde-scripting.recipe
97
+ recipes/kde/kde-support.recipe
98
+ recipes/kde/kde-utils.recipe
99
+ recipes/kde/kde-webdev.recipe
64
100
  recipes/kde/recipe
65
101
  recipes/kde/recipe-local
66
102
  recipes/kde/settings.yaml
@@ -68,24 +104,17 @@ recipes/kde43/info.yaml
68
104
  recipes/kde43/recipe
69
105
  recipes/kde43/recipe-local
70
106
  recipes/kde43/settings.yaml
71
- recipes/kdeqt4.6/custom/qt/qtscriptgenerator/compile.sh
72
- recipes/kdeqt4.6/custom/qt/qtscriptgenerator/configure.sh
73
- recipes/kdeqt4.6/custom/qt/qtscriptgenerator/install.sh
74
- recipes/kdeqt4.6/info.yaml
75
- recipes/kdeqt4.6/recipe
76
- recipes/kdeqt4.6/recipe-local
77
- recipes/kdeqt4.6/settings.yaml
78
107
  tasks/genfiles.rake
79
- tasks/rdoc.rake
80
108
  tasks/rspec.rake
81
- test.rb
82
109
  test/commands/test_build.rb
83
110
  test/test_build_system.rb
84
111
  test/test_cli.rb
85
112
  test/test_command.rb
86
113
  test/test_configuration_parser.rb
87
114
  test/test_environment.rb
115
+ test/test_feature.rb
88
116
  test/test_helper.rb
117
+ test/test_history.rb
89
118
  test/test_module.rb
90
119
  test/test_repository.rb
91
120
  test/test_singleton.rb
data/README.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  = build-tool
2
2
 
3
- * http://build-tool.rubyforge.org
3
+ * http://michael-jansen.biz/build-tool
4
4
 
5
5
  == DESCRIPTION:
6
6
 
@@ -11,8 +11,6 @@ and configures sources and updates them later.
11
11
 
12
12
  == FEATURES/PROBLEMS:
13
13
 
14
- * This is major rewrite version. Use at your own risk.
15
-
16
14
  The tool uses recipes to build software from scratch. It does
17
15
  - Check out the sources from the repository (git, git-svn, svn).
18
16
  - Update the sources.
@@ -21,10 +19,10 @@ The tool uses recipes to build software from scratch. It does
21
19
  - Build
22
20
  - Install
23
21
 
24
- It's main purpose is supporting me developing kde while having a
25
- complete kde workspace from trunk. I would like to have reliable and
26
- reproducable build so i'm sure the code is the problem and not my environment
27
- if something fails to build.
22
+ It's main purpose is supporting me in developing kde while having a complete
23
+ kde workspace from trunk. I would like to have reliable and reproducable
24
+ builds so i'm sure the code is the problem and not my environment if something
25
+ fails to build.
28
26
 
29
27
  Additional features are:
30
28
  - Open a shell with the environment used to build the sources.
@@ -53,7 +51,6 @@ http://michael-jansen.biz/build-tool
53
51
  == REQUIREMENTS:
54
52
 
55
53
  * logging > 1.2.2
56
- * hoe > 2.3.3
57
54
 
58
55
  == INSTALL:
59
56
 
data/Rakefile CHANGED
@@ -1,10 +1,13 @@
1
1
  # -*- ruby -*-
2
-
3
2
  require 'rubygems'
4
3
  require 'hoe'
5
4
  require 'fileutils'
6
5
  require './lib/build-tool'
7
6
 
7
+ Hoe.plugin :git
8
+ Hoe.plugin :doofus
9
+ Hoe.plugin :debugging
10
+
8
11
  # Generate all the Rake tasks
9
12
  # Run 'rake -T' to see list of generated tasks (from gem root directory)
10
13
  Hoe.spec( 'build-tool' ) do |build_tool|
@@ -20,14 +23,19 @@ Hoe.spec( 'build-tool' ) do |build_tool|
20
23
  build_tool.rubyforge_name = build_tool.name
21
24
 
22
25
  build_tool.extra_deps = [
23
- ['logging','>= 1.2.2'],
24
- ['hoe', ">= 2.3.3"], # -> hoe, rubigen
26
+ ['logging', ">= 1.2.2"],
27
+ ['sequel', ">= 3.8.0"],
28
+ ['sqlite3-ruby', ">= 1.2" ]
25
29
  ]
26
30
 
27
- # build_tool.extra_rdoc_files = Dir.glob( "doc/*.txt") + Dir.glob( "doc/*.html" )
31
+ build_tool.extra_dev_deps = [
32
+ ['hoe-debugging', ">= 1.0.1"],
33
+ ['hoe-doofus', ">= 1.0.0"],
34
+ ['hoe-git', ">= 1.3.0"],
35
+ ['racc', ">= 1.4.6"],
36
+ ['rexical', ">= 1.0.4"]
37
+ ]
28
38
 
29
- # Does not work
30
- # build_tool.local_rdoc_dir = "html_docs"
31
39
  end
32
40
 
33
41
  Dir['tasks/**/*.rake'].each { |t| load t }
data/bin/build-tool CHANGED
@@ -5,7 +5,6 @@
5
5
 
6
6
  require 'pathname'
7
7
  require 'rubygems'
8
- require 'logging'
9
8
 
10
9
  # libs relative to the link target
11
10
  if File.symlink?(__FILE__)
@@ -13,41 +12,10 @@ if File.symlink?(__FILE__)
13
12
  else
14
13
  root_directory = File.dirname(__FILE__)
15
14
  end
15
+
16
16
  root_directory = Pathname.new( root_directory ).join( '..' )
17
17
  require File.expand_path( root_directory + "lib/build-tool")
18
- require 'mj/logging'
19
-
20
- #
21
- # CONFIGURE LOGGING
22
- #
23
- Logging.init :debug, :trace, :verbose, :info, :warn, :error
24
- include Logging.globally
25
- Logging.logger.root.level = :debug
26
- # Special case for the configurationParser. It is very verbose if active.
27
- Logging.logger['BuildTool::Cfg::Parser'].level = :info
28
- Logging.logger.root.appenders = Logging.appenders.stdout(
29
- :layout => MJ::Logging::BasicLayout.new(),
30
- :level => :info)
31
18
 
32
- # if the name we were called with is a symbolic link we have to search for our
33
-
34
-
35
- require "build-tool/application"
36
- require "build-tool/errors"
37
-
38
- begin
39
- app = BuildTool::Application.new( $0, root_directory )
40
- rc = app.execute( ARGV )
41
- rescue Interrupt => e
42
- logger.info "User interrupt!"
43
- rc = 0
44
- rescue BuildTool::Error => e
45
- logger.error e.message
46
- logger.verbose e.backtrace.join("\n")
47
- rc = -1
48
- rescue Exception => e
49
- logger.error e
50
- rc = -1
51
- end
19
+ require 'build-tool/application'
52
20
 
53
- exit rc
21
+ exit BuildTool.main( $0, ARGV, root_directory );
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'sequel/extensions/migration'
3
+
4
+ Class.new( Sequel::Migration ) do
5
+
6
+ def up
7
+ create_table :command_logs do
8
+ primary_key :id, :null => false
9
+ String :command, :null => false
10
+ DateTime :started_at
11
+ DateTime :finished_at
12
+ Integer :state, :default => 0, :null => false
13
+ end
14
+ end
15
+
16
+ def down
17
+ drop_table :command_logs
18
+ end
19
+
20
+ end
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'sequel/extensions/migration'
3
+
4
+ Class.new( Sequel::Migration ) do
5
+
6
+ def up
7
+ create_table :module_logs do
8
+ primary_key :id
9
+ foreign_key :command_log_id, :command_log, :null => false
10
+ String :module, :null => false
11
+ String :event, :size => 20, :null => false
12
+ String :logfile
13
+ DateTime :started_at
14
+ DateTime :finished_at
15
+ Integer :state, :default => 0, :null => false
16
+ end
17
+ end
18
+
19
+ def down
20
+ drop_table :module_events
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'sequel/extensions/migration'
3
+
4
+ Class.new( Sequel::Migration ) do
5
+
6
+ def up
7
+ alter_table :command_logs do
8
+ add_column :logdir, String
9
+ end
10
+ end
11
+
12
+ def down
13
+ alter_table :command_logs do
14
+ remove_column :logdir
15
+ end
16
+ end
17
+
18
+ end
19
+
data/lib/build-tool.rb CHANGED
@@ -2,6 +2,6 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module BuildTool
5
- VERSION = '0.1.4'
5
+ VERSION = '0.2'
6
6
  end
7
7
 
@@ -1,8 +1,17 @@
1
+
2
+ require 'logging'
3
+ Logging.init :debug, :trace, :verbose, :info, :warn, :error
4
+ include Logging.globally
5
+
1
6
  require 'optparse'
2
7
  require 'erb'
3
8
  require 'yaml'
9
+ require 'sequel'
10
+ require 'sequel/extensions/migration'
4
11
 
5
- require 'build-tool/commands'
12
+ require 'mj/logging'
13
+
14
+ require "build-tool/errors"
6
15
  require 'build-tool/recipe'
7
16
  require 'build-tool/singleton'
8
17
  require 'build-tool/cfg/parser'
@@ -16,9 +25,11 @@ module BuildTool
16
25
  #
17
26
  class Application < Singleton
18
27
 
19
- attr_reader :name
20
28
  attr_reader :application_root
21
29
  attr_reader :cli
30
+ attr_reader :database
31
+ attr_reader :local_settings_file_path
32
+ attr_reader :name
22
33
 
23
34
  def recipe
24
35
  return @recipe if @recipe
@@ -29,40 +40,26 @@ module BuildTool
29
40
  def initialize( name, application_root )
30
41
  super()
31
42
  @application_root = Pathname.new( application_root ).expand_path
43
+ @database = nil
44
+ @name = File.basename( name ).sub( "-build", "" )
32
45
  @recipe = nil
33
-
34
- # Determine the recipe name
35
- @name = File.basename( name )
36
- @name.sub!( "-build", "" )
37
-
38
- # Create the shell
39
- @cli = Commands::Shell.new
40
- @cli.load_commands( @application_root.join( "lib/build-tool/commands" ), "Commands" )
46
+ @local_settings_file_path = local_configuration_dir.join("#{@name}.yaml")
41
47
  end
42
48
 
49
+ # Load the configuration
43
50
  def configuration
44
- return @configuration if @configuration
51
+ return @configuration if @configuration
52
+ # First load the settings file
53
+ file = local_settings_file_path
54
+ logger.debug "Loading settings file #{file}"
55
+ raise ConfigurationError, "Configuration File #{file} does not exists!" if !file.exist?
56
+ @settings = YAML.load_file( file )
57
+ # Then load the recipe
45
58
  logger.debug "Loading configuration for #{name}"
46
- load_settings
47
59
  @recipe = BuildTool::Recipe.new( @settings['RECIPE'] || name )
48
60
  @configuration = @recipe.load( name, @settings['SETTINGS'] )
49
61
  end
50
62
 
51
- def load_settings
52
- file = local_settings_file_path
53
- if file.exist?
54
- @settings = YAML.load_file( file )
55
- else
56
- raise ConfigurationError, "Configuration File #{file} does not exists!"
57
- end
58
- @settings
59
- end
60
-
61
-
62
- def local_settings_file_path
63
- local_configuration_dir.join("#{name}.yaml")
64
- end
65
-
66
63
  # Return the local configuration dir. Makes sure the directory exists
67
64
  # before returning it
68
65
  def local_configuration_dir
@@ -74,11 +71,87 @@ module BuildTool
74
71
  @local_configuration_dir
75
72
  end
76
73
 
77
- def execute( args )
78
- @cli.execute( args )
74
+ # Open the database
75
+ #
76
+ # @return [Object] The database handle
77
+ def open_database
78
+ path = local_configuration_dir.join( "#{name}.db" )
79
+ logger.debug "Opening the database #{path}."
80
+ @database = Sequel.connect( "sqlite:///#{path.to_s}" )
81
+ @database.logger= MJ::Logging::LoggerAdapter.new( 'db' )
82
+ # Try to upgrade the database if necessary
83
+ Sequel::Migrator.apply( @database, application_root.join( 'db/migrations' ) )
84
+ end
85
+
86
+ # Close the database
87
+ def close_database
88
+ @database.disconnect
89
+ path = local_configuration_dir.join( "#{name}.db" )
90
+ logger.debug "Closing the database #{path}."
91
+ end
92
+
93
+ # Get the database handle
94
+ def database
95
+ @database
96
+ end
97
+
98
+ def main( args )
99
+ # The configuration is loaded on demand to make it possible to execute command that
100
+ # don't need a configuration. Help for example.
101
+
102
+ # Initialize the database.
103
+ open_database()
104
+
105
+ begin
106
+
107
+ # Initialize the shell
108
+ require 'build-tool/commands'
109
+ @cli = Commands::Shell.new
110
+
111
+ # Load the commands. This has to be done AFTER the database is opened because
112
+ # sequel expects that there is a database before a Sequel::Model is created.
113
+ #
114
+ # And the commands require all that database related stuff.
115
+ @cli.load_commands( @application_root.join( "lib/build-tool/commands" ), BuildTool::Commands )
116
+
117
+ # Execute the given command (or start the cli)
118
+ @cli.execute( args )
119
+ ensure
120
+ # Make sure the database is closed correctly
121
+ close_database
122
+ end
79
123
  end
80
124
 
81
125
  end # class Application
82
126
 
83
- end
127
+ end # module BuildTool
128
+
129
+
130
+ def BuildTool.main(name, args, root_directory)
131
+
132
+ begin
133
+ # Setup logging
134
+ Logging.logger.root.level = :debug
135
+ # Special case for the configurationParser. It is very verbose if active.
136
+ Logging.logger['BuildTool::Cfg::Parser'].level = :info
137
+ Logging.logger.root.appenders = Logging.appenders.stdout(
138
+ :layout => MJ::Logging::BasicLayout.new(),
139
+ :level => :info)
140
+ # Create the application
141
+ app = BuildTool::Application.new( name, root_directory )
142
+ # Execute the application
143
+ return app.main( args )
144
+ rescue Interrupt => e
145
+ logger.info "User interrupt!"
146
+ return 0
147
+ rescue BuildTool::Error => e
148
+ logger.error e.message
149
+ logger.verbose e.backtrace.join("\n")
150
+ return -1
151
+ rescue Exception => e
152
+ logger.error e
153
+ return -1
154
+ end
155
+
156
+ end # main()
84
157