build-tool 0.5.7 → 0.6.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. data/.gitignore +1 -0
  2. data/.rvmrc +1 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +5 -0
  5. data/Gemfile.lock +56 -0
  6. data/History.txt +64 -0
  7. data/README.txt +0 -7
  8. data/Rakefile +8 -56
  9. data/bin/build-tool +4 -1
  10. data/build-tool.gemspec +62 -0
  11. data/db/migrations/20110703074000_add_command_logs.rb +17 -0
  12. data/db/migrations/20110703075000_add_module_logs.rb +20 -0
  13. data/db/migrations/20110815170000_add_features.rb +17 -0
  14. data/db/migrations/20120103204700_add_modules.rb +17 -0
  15. data/db/migrations/20120106181200_add_settings.rb +18 -0
  16. data/lib/build-tool.rb +3 -4
  17. data/lib/build-tool/application.rb +127 -37
  18. data/lib/build-tool/build-system/autoconf.rb +2 -8
  19. data/lib/build-tool/build-system/base.rb +12 -4
  20. data/lib/build-tool/build-system/cmake.rb +2 -0
  21. data/lib/build-tool/build-system/custom.rb +2 -0
  22. data/lib/build-tool/build-system/kdel10n.rb +2 -0
  23. data/lib/build-tool/build-system/make.rb +2 -0
  24. data/lib/build-tool/build-system/none.rb +2 -0
  25. data/lib/build-tool/build-system/qmake.rb +2 -0
  26. data/lib/build-tool/build-system/qt.rb +4 -0
  27. data/lib/build-tool/cfg/lexer.rex +40 -8
  28. data/lib/build-tool/cfg/lexer_base.rb +3 -1
  29. data/lib/build-tool/cfg/node.rb +17 -1
  30. data/lib/build-tool/cfg/parser.y +92 -10
  31. data/lib/build-tool/cfg/visitor.rb +202 -78
  32. data/lib/build-tool/command_actions.rb +26 -10
  33. data/lib/build-tool/commands.rb +289 -197
  34. data/lib/build-tool/commands/build.rb +13 -9
  35. data/lib/build-tool/commands/configuration.rb +25 -0
  36. data/lib/build-tool/commands/configuration/edit.rb +42 -0
  37. data/lib/build-tool/commands/configuration/list.rb +48 -0
  38. data/lib/build-tool/commands/configure.rb +9 -5
  39. data/lib/build-tool/commands/ctags.rb +8 -3
  40. data/lib/build-tool/commands/environments.rb +2 -4
  41. data/lib/build-tool/commands/environments/list.rb +13 -10
  42. data/lib/build-tool/commands/environments/set.rb +5 -1
  43. data/lib/build-tool/commands/features.rb +24 -0
  44. data/lib/build-tool/commands/features/disable.rb +70 -0
  45. data/lib/build-tool/commands/features/enable.rb +66 -0
  46. data/lib/build-tool/commands/features/list.rb +92 -0
  47. data/lib/build-tool/commands/fetch.rb +9 -3
  48. data/lib/build-tool/commands/files.rb +9 -5
  49. data/lib/build-tool/commands/gc.rb +48 -15
  50. data/lib/build-tool/commands/history.rb +21 -16
  51. data/lib/build-tool/commands/info.rb +16 -13
  52. data/lib/build-tool/commands/install.rb +8 -4
  53. data/lib/build-tool/commands/modules.rb +2 -4
  54. data/lib/build-tool/commands/modules/cleanup.rb +52 -0
  55. data/lib/build-tool/commands/modules/disable.rb +95 -0
  56. data/lib/build-tool/commands/modules/enable.rb +52 -0
  57. data/lib/build-tool/commands/modules/info.rb +44 -35
  58. data/lib/build-tool/commands/modules/list.rb +67 -15
  59. data/lib/build-tool/commands/modules/shell.rb +8 -2
  60. data/lib/build-tool/commands/rebase.rb +15 -7
  61. data/lib/build-tool/commands/recipes.rb +2 -4
  62. data/lib/build-tool/commands/recipes/add.rb +16 -2
  63. data/lib/build-tool/commands/recipes/edit.rb +72 -0
  64. data/lib/build-tool/commands/recipes/incoming.rb +11 -7
  65. data/lib/build-tool/commands/recipes/info.rb +12 -8
  66. data/lib/build-tool/commands/recipes/install.rb +37 -42
  67. data/lib/build-tool/commands/recipes/list.rb +6 -2
  68. data/lib/build-tool/configuration.rb +88 -3
  69. data/lib/build-tool/environment.rb +2 -0
  70. data/lib/build-tool/errors.rb +5 -0
  71. data/lib/build-tool/history.rb +3 -181
  72. data/lib/build-tool/model/command_log.rb +93 -0
  73. data/lib/build-tool/model/feature.rb +80 -0
  74. data/lib/build-tool/{module.rb → model/module.rb} +110 -29
  75. data/lib/build-tool/model/module_log.rb +64 -0
  76. data/lib/build-tool/model/setting.rb +84 -0
  77. data/lib/build-tool/recipe.rb +40 -18
  78. data/lib/build-tool/repository.rb +39 -33
  79. data/lib/build-tool/server.rb +27 -3
  80. data/lib/build-tool/singleton.rb +2 -0
  81. data/lib/build-tool/sshkey.rb +2 -0
  82. data/lib/build-tool/state_helper.rb +64 -0
  83. data/lib/build-tool/vcs/archive.rb +3 -1
  84. data/lib/build-tool/vcs/base.rb +13 -0
  85. data/lib/build-tool/vcs/git-svn.rb +36 -14
  86. data/lib/build-tool/vcs/git.rb +180 -44
  87. data/lib/build-tool/vcs/mercurial.rb +25 -13
  88. data/lib/build-tool/vcs/svn.rb +20 -15
  89. data/lib/build-tool/version.rb +30 -0
  90. data/lib/mj/error.rb +2 -0
  91. data/lib/mj/logging.rb +2 -0
  92. data/lib/mj/mixins/inherited_attributes.rb +73 -0
  93. data/lib/mj/tools/editor.rb +34 -0
  94. data/lib/mj/tools/ssh.rb +2 -0
  95. data/lib/mj/tools/subprocess.rb +2 -1
  96. data/lib/mj/vcs/git.rb +14 -2
  97. data/lib/mj/visitor.rb +22 -0
  98. data/tasks/db.rake +36 -0
  99. data/tasks/racc.rake +14 -0
  100. data/tasks/rdoc.rake +8 -0
  101. data/tasks/rexical.rake +14 -0
  102. data/tasks/test.rake +21 -0
  103. data/test/integration/history_test.rb +88 -0
  104. data/test/integration/parser_configuration.rb +36 -0
  105. data/test/integration/parser_environment_parser.rb +156 -0
  106. data/test/integration/parser_feature_test.rb +75 -0
  107. data/test/integration/parser_git-svn_test.rb +92 -0
  108. data/test/integration/parser_git_test.rb +97 -0
  109. data/test/integration/parser_mercurial_test.rb +77 -0
  110. data/test/integration/parser_module_test.rb +103 -0
  111. data/test/integration/parser_svn_test.rb +92 -0
  112. data/test/integration/parser_test.rb +73 -0
  113. data/test/test_helper.rb +61 -0
  114. data/test/unit/configuration_test.rb +36 -0
  115. data/test/unit/git_configuration_test.rb +163 -0
  116. data/test/unit/git_svn_configuration_test.rb +240 -0
  117. data/test/unit/mercurial_configuration_test.rb +64 -0
  118. data/test/unit/model/command_log_test.rb +103 -0
  119. data/test/unit/model/feature_test.rb +29 -0
  120. data/test/unit/model/module_log_test.rb +70 -0
  121. data/test/unit/model/module_test.rb +32 -0
  122. data/test/unit/repository_test.rb +110 -0
  123. data/test/unit/server_test.rb +66 -0
  124. data/test/unit/svn_configuration_test.rb +90 -0
  125. metadata +134 -93
  126. data/Manifest.txt +0 -80
  127. data/db/migrations/001_command_histories.rb +0 -20
  128. data/db/migrations/002_module_events.rb +0 -24
  129. data/db/migrations/003_command_histories_add_logfile.rb +0 -19
  130. data/lib/build-tool/GUI.rb +0 -360
  131. data/lib/build-tool/commands/help.rb +0 -22
  132. data/lib/build-tool/commands/lsfeatures.rb +0 -76
  133. data/lib/build-tool/feature.rb +0 -47
@@ -1,36 +1,21 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require 'mj/visitor'
4
+
1
5
  require 'build-tool/configuration'
2
6
  require 'build-tool/environment'
3
- require 'build-tool/feature'
7
+ require 'build-tool/model/feature'
4
8
  require 'build-tool/repository'
5
- require 'build-tool/module'
9
+ require 'build-tool/model/module'
6
10
  require 'build-tool/sshkey'
7
11
  require 'build-tool/server'
8
12
 
9
13
  module BuildTool; module Cfg;
10
14
 
11
- # Base class for all Visitors.
12
- class VisitorBase
13
-
14
- # The configuration object to fill with our parse results.
15
- attr_reader :configuration
16
-
17
- class ArgumentsError < StandardError
18
- end
19
-
20
- def initialize( configuration )
21
- @configuration = configuration
22
- end
23
-
24
- def visit_Object( object )
25
- raise "#{self.class}: Not a visitor for #{object.class}!"
26
- end
27
-
28
- end # class VisitorBase
29
-
30
15
 
31
16
  # Base class for all Visitors which need to iterate over their child
32
17
  # nodes.
33
- class ListVisitor < VisitorBase
18
+ class ListVisitor < MJ::VisitorBase
34
19
 
35
20
  # Visit one node.
36
21
  def visit( node )
@@ -111,39 +96,19 @@ def visit_EnvironmentDeclarationNode( node )
111
96
  end
112
97
 
113
98
  def visit_EnableFeatureNode( node )
114
- featureName = node.value
115
- feat = configuration.feature( featureName )
116
- if feat.nil?
117
- raise ConfigurationError, "Attempt to enable unknown feature '%s'!" % featureName
118
- end
119
- feat.active = true
99
+ set_feature_status( node.value, true, node.options[:global] )
120
100
  end
121
101
 
122
102
  def visit_DisableFeatureNode( node )
123
- featureName = node.value
124
- feat = configuration.feature( featureName )
125
- if feat.nil?
126
- raise ConfigurationError, "Attempt to disable unknown feature '%s'!" % featureName
127
- end
128
- feat.active = false
103
+ set_feature_status( node.value, false, node.options[:global] )
129
104
  end
130
105
 
131
106
  def visit_EnableModuleNode( node )
132
- modName = node.value
133
- mod = configuration.module( modName )
134
- if mod.nil?
135
- raise ConfigurationError, "Attempt to enable unknown module '%s'!" % modName
136
- end
137
- mod.active = true
107
+ set_module_status( node.value, true, node.options[:global] )
138
108
  end
139
109
 
140
110
  def visit_DisableModuleNode( node )
141
- modName = node.value
142
- mod = configuration.module( modName )
143
- if mod.nil?
144
- raise ConfigurationError, "Attempt to disable unknown module '%s'!" % modName
145
- end
146
- mod.active = false
111
+ set_module_status( node.value, false, node.options[:global] )
147
112
  end
148
113
 
149
114
  def visit_FeatureNode( node )
@@ -151,6 +116,11 @@ def visit_FeatureNode( node )
151
116
  node.accept( visitor )
152
117
  end
153
118
 
119
+ def visit_GitOptionsDeclarationNode( node )
120
+ visitor = GitOptionsDeclarationNodeVisitor.new( configuration )
121
+ node.accept( visitor )
122
+ end
123
+
154
124
  def visit_IncludeNode( node )
155
125
  visitor = IncludeNodeVisitor.new( configuration )
156
126
  node.accept( visitor )
@@ -176,6 +146,40 @@ def visit_SshKeyDeclarationNode( node )
176
146
  node.accept(visitor)
177
147
  end
178
148
 
149
+ protected
150
+
151
+ def set_feature_status( featureName, status, global )
152
+ feat = configuration.feature( featureName )
153
+ # Make sure the feature is known.
154
+ if feat.nil?
155
+ raise ConfigurationError, "Attempt to disable unknown feature '%s'!" % featureName
156
+ end
157
+ # Disable the feature.
158
+ if global
159
+ # We are still loading the recipe. OK
160
+ feat.default_active = status
161
+ else
162
+ # We are in the user recipe override file. Issue a warning.
163
+ feat.active = status
164
+ end
165
+ end
166
+
167
+ def set_module_status( moduleName, status, global )
168
+ mod = configuration.module( moduleName )
169
+ # Make sure the feature is known.
170
+ if mod.nil?
171
+ raise ConfigurationError, "Attempt to disable unknown module '%s'!" % moduleName
172
+ end
173
+ # Disable the feature.
174
+ if global
175
+ # We are still loading the recipe. OK
176
+ mod.default_active = status
177
+ else
178
+ # We are in the user recipe override file. Issue a warning.
179
+ mod.active = status
180
+ end
181
+ end
182
+
179
183
  end # class StatementVisitor
180
184
 
181
185
 
@@ -290,7 +294,7 @@ def visit_FeatureNode( node )
290
294
  end
291
295
  # Create a new feature if needed
292
296
  if @feature.nil?
293
- @feature = BuildTool::Feature.new( name, configuration.active_feature )
297
+ @feature = BuildTool::Feature.create( :name => name, :parent => configuration.active_feature )
294
298
  configuration.add_feature( @feature )
295
299
  end
296
300
  # Set it as the current feature
@@ -359,11 +363,55 @@ def visit_GitRemotePushNode( node )
359
363
 
360
364
  end # class GitRemoteDeclarationNodeVisitor
361
365
 
366
+ module GitOptionDeclarationMethods
367
+
368
+ def self.included( base )
369
+ base.class_eval do
370
+ extend ClassMethods
371
+ include InstanceMethods
372
+ end
373
+ end
374
+
375
+ module ClassMethods
376
+ end
377
+
378
+ module InstanceMethods
379
+
380
+ def visit_GitOptionsDeclarationNode( node )
381
+ visit_nodes( node.values )
382
+ end
383
+
384
+ def visit_GitOptionNode( node )
385
+ if ( node.args[0] == :GLOBAL )
386
+ @vcs.global_options[ node.values[0] ] = node.values[1]
387
+ else
388
+ @vcs.options[ node.values[0] ] = node.values[1]
389
+ end
390
+ end
391
+ end
392
+
393
+ end
394
+
395
+ class GitOptionsDeclarationNodeVisitor < ListVisitor
396
+
397
+ include GitOptionDeclarationMethods
398
+
399
+ def initialize( configuration )
400
+ super( configuration )
401
+ if BuildTool::VCS::GitConfiguration.global_config.nil?
402
+ BuildTool::VCS::GitConfiguration.global_config = BuildTool::VCS::GitConfiguration.new
403
+ end
404
+ @vcs = BuildTool::VCS::GitConfiguration.global_config
405
+ end
406
+
407
+ end
362
408
 
363
409
 
364
410
  class GitDeclarationNodeVisitor < GitRemoteDeclarationNodeVisitor
365
411
 
366
- def initialize( configuration, vcs = BuildTool::VCS::GitConfiguration.new )
412
+ include GitOptionDeclarationMethods
413
+
414
+ def initialize( configuration, vcs )
367
415
  super( configuration )
368
416
  @remote = BuildTool::VCS::GitRemote.new( "origin" )
369
417
  @vcs = vcs
@@ -438,11 +486,33 @@ def visit_IncludeNode( node )
438
486
  end
439
487
  end
440
488
 
489
+ class MercurialDeclarationNodeVisitor < ListVisitor
490
+
491
+ def initialize( configuration, vcs )
492
+ super( configuration )
493
+ @vcs = vcs
494
+ end
495
+
496
+ def visit_MercurialDeclarationNode( node )
497
+ visit_nodes( node.values )
498
+ @vcs
499
+ end
500
+
501
+ def visit_MercurialTrackNode( node )
502
+ @vcs.track = node.values
503
+ end
504
+
505
+ def visit_MercurialUrlNode( node )
506
+ @vcs.url = node.values[0]
507
+ end
508
+
509
+ end
510
+
441
511
 
442
512
  class ModuleDeclarationNodeVisitor < ListVisitor
443
513
 
444
514
  def initialize( configuration )
445
- super
515
+ super( configuration )
446
516
  @module = nil
447
517
  end
448
518
 
@@ -470,13 +540,13 @@ def visit_BuildSystemDeclarationNode( node )
470
540
  # 3. The module has no parent and no build-system. Inherit from the build-system
471
541
  # standard module.
472
542
  if @module.our_build_system
473
- # puts "Inherit from previous build-system for #{@module.name}"
543
+ # logger.debug2( "Inherit from previous build-system for #{@module.name}" )
474
544
  build_system = configuration.build_system_adjust( name, @module.our_build_system )
475
545
  elsif @module.parent
476
- # puts "Inherit without parent for #{@module.name}"
546
+ # logger.debug2( "Inherit without parent for #{@module.name}" )
477
547
  build_system = configuration.build_system_adjust( name, nil )
478
548
  else
479
- # puts "Inherit from #{name} for #{@module.name}"
549
+ # logger.debug2( "Inherit from #{name} for #{@module.name}" )
480
550
  build_system = configuration.build_system_adjust( name, configuration.build_system_defaults( name ) )
481
551
  end
482
552
  visitor = BuildSystemDeclarationNodeVisitor.new( configuration, build_system )
@@ -499,9 +569,17 @@ def visit_EnvironmentDeclarationNode( node )
499
569
 
500
570
  def visit_GitDeclarationNode( node )
501
571
  vcs = BuildTool::VCS::GitConfiguration.new
502
- # if @module.vcs_configuration and @module.vcs_configuration.name == "git"
503
- # vcs.copy_configuration( @module.vcs_configuration )
504
- # end
572
+ if node.options[:inheritance]
573
+ if not @module.vcs_configuration
574
+ raise ConfigurationError,
575
+ "#{@module.name} has no previous git configuration!"
576
+ end
577
+ if @module.vcs_configuration.name != "git"
578
+ raise ConfigurationError,
579
+ "#{@module.name} has a #{@module.vcs_configuration.name} configuration!"
580
+ end
581
+ vcs.parent = @module.vcs_configuration
582
+ end
505
583
  @module.vcs_configuration = vcs
506
584
  visitor = GitDeclarationNodeVisitor.new( configuration, vcs )
507
585
  node.accept( visitor )
@@ -509,14 +587,40 @@ def visit_GitDeclarationNode( node )
509
587
 
510
588
  def visit_GitSvnDeclarationNode( node )
511
589
  vcs = BuildTool::VCS::GitSvnConfiguration.new
512
- # if @module.vcs_configuration and @module.vcs_configuration.name == "gitsvn"
513
- # vcs.copy_configuration( @module.vcs_configuration )
514
- # end
590
+ if node.options[:inheritance]
591
+ if not @module.vcs_configuration
592
+ raise ConfigurationError,
593
+ "#{@module.name} has no previous git-svn configuration!"
594
+ end
595
+ if @module.vcs_configuration.name != "git-svn"
596
+ raise ConfigurationError,
597
+ "#{@module.name} has a #{@module.vcs_configuration.name} configuration!"
598
+ end
599
+ vcs.parent = @module.vcs_configuration
600
+ end
515
601
  @module.vcs_configuration = vcs
516
602
  visitor = GitSvnDeclarationNodeVisitor.new( configuration, vcs )
517
603
  node.accept( visitor )
518
604
  end
519
605
 
606
+ def visit_MercurialDeclarationNode( node )
607
+ vcs = BuildTool::VCS::MercurialConfiguration.new
608
+ if node.options[:inheritance]
609
+ if not @module.vcs_configuration
610
+ raise ConfigurationError,
611
+ "#{@module.name} has no previous mercurial configuration!"
612
+ end
613
+ if @module.vcs_configuration.name != "mercurial"
614
+ raise ConfigurationError,
615
+ "#{@module.name} has a #{@module.vcs_configuration.name} configuration!"
616
+ end
617
+ vcs.parent = @module.vcs_configuration
618
+ end
619
+ @module.vcs_configuration = vcs
620
+ visitor = MercurialDeclarationNodeVisitor.new( configuration, vcs )
621
+ node.accept( visitor )
622
+ end
623
+
520
624
  def visit_ModuleBuildPrefixNode( node )
521
625
  @module.build_prefix = node.value
522
626
  end
@@ -524,36 +628,48 @@ def visit_ModuleBuildPrefixNode( node )
524
628
  def visit_ModuleDeclarationNode( node )
525
629
  name = node.values[0]
526
630
  inheritance = node.values[1] == :INHERITANCE
631
+
527
632
  if inheritance
528
633
  stmts = node.values[3]
529
634
  else
530
635
  stmts = node.values[1]
531
636
  end
637
+
532
638
  # Check if the module is alread defined. If yes we reopen it.
533
639
  @module = configuration.module( name )
534
- if @module
535
- if inheritance
536
- raise ConfigurationError, "Attempt change existing module #{name} with inheritance!"
640
+ if @module.nil?
641
+ @module = BuildTool::Module.create( { :name => name } )
642
+ configuration.add_module( @module )
643
+ end
644
+
645
+ if inheritance
646
+
647
+ if @module.found_in_recipe
648
+ raise ConfigurationError, "Attempt to change a module #{name} while specifying inheritance!"
537
649
  end
538
- else
539
- parent = nil
540
- if inheritance
541
- parentName = node.values[2]
542
- parent = configuration.module( parentName )
543
- if parent.nil?
544
- raise ConfigurationError,
545
- "Module %s attempts to inherit from not existant module %s" %
546
- [ name, parentName ]
547
- end
650
+
651
+ parentName = node.values[2]
652
+ parent = configuration.module( parentName )
653
+ if parent.nil?
654
+ raise ConfigurationError,
655
+ "Module %s attempts to inherit from not existant module %s" %
656
+ [ name, parentName ]
548
657
  end
549
- @module = BuildTool::Module.new( name, parent )
550
- configuration.add_module( @module )
551
- # Only add a module to a feature if it is the first time declared.
658
+ @module.parent = parent
659
+ end
660
+
661
+ # Only add a module to a feature if it is the first time declared.
662
+ if !@module.found_in_recipe
552
663
  if !configuration.active_feature.nil?
553
664
  @module.feature = configuration.active_feature
554
665
  configuration.active_feature.modules << @module
555
666
  end
556
667
  end
668
+
669
+ # Mark the module as found in the recipe
670
+ @module.found_in_recipe = true
671
+
672
+ # Work on the child nodes.
557
673
  begin
558
674
  self.visit_nodes( stmts )
559
675
  rescue ConfigurationError => e
@@ -582,16 +698,24 @@ def visit_ShortDescriptionNode( node )
582
698
 
583
699
  def visit_SvnDeclarationNode( node )
584
700
  vcs = BuildTool::VCS::SvnConfiguration.new
585
- # if @module.vcs_configuration and @module.vcs_configuration.name == "svn"
586
- # vcs.copy_configuration( @module.vcs_configuration )
587
- # end
701
+ if node.options[:inheritance]
702
+ if not @module.vcs_configuration
703
+ raise ConfigurationError,
704
+ "#{@module.name} has no previous svn configuration!"
705
+ end
706
+ if @module.vcs_configuration.name != "svn"
707
+ raise ConfigurationError,
708
+ "#{@module.name} has a #{@module.vcs_configuration.name} configuration!"
709
+ end
710
+ vcs.parent = @module.vcs_configuration
711
+ end
588
712
  @module.vcs_configuration = vcs
589
713
  visitor = SvnDeclarationNodeVisitor.new( configuration, vcs )
590
714
  node.accept( visitor )
591
715
  end
592
716
 
593
717
  def visit_UseBuildSystemNode( node )
594
- # puts "Inherit from build-system #{node.value} for #{@module.name}"
718
+ # logger.debug2( "Inherit from build-system #{node.value} for #{@module.name}" )
595
719
  @module.build_system = configuration.build_system_adjust(
596
720
  node.value,
597
721
  configuration.build_system_defaults( node.value ) )
@@ -1,3 +1,5 @@
1
+ # -*- coding: UTF-8 -*-
2
+
1
3
  require 'ansi'
2
4
  require 'logging'
3
5
  require 'fileutils'
@@ -59,11 +61,10 @@ def while_logging( level = :trace, &block )
59
61
  logentry = nil
60
62
  state = History::ModuleLog::FINISHED_SUCCESSFUL
61
63
  if @command.cmd
62
- logentry = History::ModuleLog.new(
63
- :module => @module.name,
64
+ logentry = @command.cmd.module_logs.build(
65
+ :module => @module,
64
66
  :event => @type,
65
- :logfile => @logfile)
66
- @command.cmd.add_module_log(logentry)
67
+ :logfile => @logfile.to_s.encode( 'UTF-8' ) )
67
68
  logentry.started
68
69
  end
69
70
  logger.debug "Opening logfile #{@logfile}"
@@ -132,38 +133,53 @@ def execute()
132
133
 
133
134
  class Rebase < Base
134
135
 
135
- def initialize( command, mod )
136
+ def initialize( command, mod, verbose )
136
137
  super( command, 20, :rebase, mod )
138
+ @verbose = verbose
137
139
  if !mod.vcs_required.fetching_supported?
138
140
  logger.info "Fetching not supported by vcs #{mod.vcs.name}. Doing nothing."
139
- return
140
141
  end
141
142
  end
142
143
 
143
144
  def execute()
144
145
  logger.info "Rebasing"
145
- @module.rebase
146
+ @module.rebase( @verbose )
146
147
  end
147
148
 
148
149
  end
149
150
 
150
151
  class RemoveBuildDirectory < Base
151
152
 
152
- def initialize( command, mod )
153
+ def initialize( command, mod, force = false )
154
+ @force = force
153
155
  super( command, 10, :clean, mod )
154
156
  end
155
157
 
156
158
  def execute()
157
- if @module.build_system_required.out_of_source
159
+ if @module.build_system_required.out_of_source or @force
158
160
  logger.info "Removing build directory"
159
161
  @module.remove_build_directory
160
162
  else
161
- logger.warn "in source build. Will not remove source directory!"
163
+ logger.warn "In source build. Will not remove source directory!"
162
164
  end
163
165
  end
164
166
 
165
167
  end
166
168
 
169
+ class RemoveSourceDirectory < Base
170
+
171
+ def initialize( command, mod, force = false )
172
+ @force = force
173
+ super( command, 10, :clean, mod )
174
+ end
175
+
176
+ def execute()
177
+ logger.info "Removing source directory"
178
+ @module.remove_source_directory
179
+ end
180
+
181
+ end
182
+
167
183
  class Configure < Base
168
184
 
169
185
  def initialize( command, mod )