build-tool 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/History.txt +27 -0
  2. data/KNOWN_PROBLEMS +0 -3
  3. data/Manifest.txt +0 -16
  4. data/Rakefile +3 -2
  5. data/lib/build-tool.rb +1 -1
  6. data/lib/build-tool/build-system/autoconf.rb +2 -2
  7. data/lib/build-tool/build-system/base.rb +1 -29
  8. data/lib/build-tool/build-system/make.rb +2 -0
  9. data/lib/build-tool/command_actions.rb +7 -4
  10. data/lib/build-tool/commands.rb +70 -25
  11. data/lib/build-tool/commands/build.rb +7 -2
  12. data/lib/build-tool/commands/configure.rb +6 -2
  13. data/lib/build-tool/commands/fetch.rb +1 -1
  14. data/lib/build-tool/commands/history.rb +3 -3
  15. data/lib/build-tool/commands/rebase.rb +9 -6
  16. data/lib/build-tool/commands/recipes/info.rb +1 -3
  17. data/lib/build-tool/module.rb +19 -4
  18. data/lib/build-tool/recipe.rb +15 -2
  19. data/lib/build-tool/vcs/archive.rb +1 -1
  20. data/lib/build-tool/vcs/base.rb +10 -2
  21. data/lib/build-tool/vcs/git-svn.rb +9 -1
  22. data/lib/build-tool/vcs/git.rb +16 -4
  23. data/lib/build-tool/vcs/svn.rb +2 -2
  24. data/lib/mj/logging.rb +34 -0
  25. metadata +122 -185
  26. data.tar.gz.sig +0 -3
  27. data/.gemtest +0 -0
  28. data/tasks/rspec.rake +0 -22
  29. data/test/commands/test_build.rb +0 -29
  30. data/test/test_build_system.rb +0 -98
  31. data/test/test_cli.rb +0 -61
  32. data/test/test_command.rb +0 -175
  33. data/test/test_configuration_parser.rb +0 -597
  34. data/test/test_environment.rb +0 -82
  35. data/test/test_feature.rb +0 -34
  36. data/test/test_helper.rb +0 -46
  37. data/test/test_history.rb +0 -149
  38. data/test/test_module.rb +0 -158
  39. data/test/test_repository.rb +0 -75
  40. data/test/test_singleton.rb +0 -51
  41. data/test/test_ssh_key.rb +0 -14
  42. data/test/test_svn_parser.rb +0 -28
  43. data/test/test_vcs.rb +0 -33
  44. metadata.gz.sig +0 -2
data/History.txt CHANGED
@@ -1,3 +1,30 @@
1
+ == 0.5.4 ==
2
+
3
+ - Features
4
+ - Support --resume-from for all module based commands (configure)
5
+ - Show a progressbar when checking for obstacles at the beginning. That can take quite some time.
6
+ - If a repository contains a file named .commit-template add it to the git configuration.
7
+
8
+ - Enhancements
9
+ - Check the recipe directory for validity before installing the recipe.
10
+ - Only consider a directory a valid recipe if it has a recipe file.
11
+ - Support --resume-from for all module based commands (configure)
12
+ - Support --resume-from for all module based commands (configure)
13
+ - Show core dumps too if make fails.
14
+ - If a exception happens when checking if modules are ready stop the command.
15
+
16
+ - Bugfixes
17
+ - If an svn repository had no repository an error occured while trying to build the error message.
18
+ - Fix reconfigure --from-scratch
19
+ - AutoConf: Fix options without values
20
+ - sqlite3-ruby was renamed to sqlite3 only.
21
+ - Add grit as dependency
22
+ - Bugfix: Use correct Error class
23
+ - Fix a exception of recipe info <recipe>.
24
+ - Do not claim to Fetch if we do Clone.
25
+ - Remove a wrong info() line
26
+ - Bugfix: history <modulename> -> Use same logic as build.
27
+
1
28
  == 0.5.3
2
29
  - Feature
3
30
  - Errors during a make call are both printed to the logfile and stdout even without verbose
data/KNOWN_PROBLEMS CHANGED
@@ -1,5 +1,2 @@
1
1
  cmd files <doesnotexist>
2
2
  > Unhandled exception
3
-
4
- cmd recipes info kde
5
- > Unhandled exception
data/Manifest.txt CHANGED
@@ -78,19 +78,3 @@ lib/mj/tools/ssh.rb
78
78
  lib/mj/tools/subprocess.rb
79
79
  lib/mj/vcs/git.rb
80
80
  lib/mj/visitor.rb
81
- tasks/rspec.rake
82
- test/commands/test_build.rb
83
- test/test_build_system.rb
84
- test/test_cli.rb
85
- test/test_command.rb
86
- test/test_configuration_parser.rb
87
- test/test_environment.rb
88
- test/test_feature.rb
89
- test/test_helper.rb
90
- test/test_history.rb
91
- test/test_module.rb
92
- test/test_repository.rb
93
- test/test_singleton.rb
94
- test/test_ssh_key.rb
95
- test/test_svn_parser.rb
96
- test/test_vcs.rb
data/Rakefile CHANGED
@@ -39,8 +39,9 @@ Hoe.spec( 'build-tool' ) do
39
39
  self.extra_deps <<
40
40
  ['logging', ">= 1.4.3"] <<
41
41
  ['sequel', ">= 3.18.0"] <<
42
- ['sqlite3-ruby', ">= 1.3.1" ] <<
43
- ['ansi', '>= 1.2.2' ]
42
+ ['sqlite3', ">= 1.3.3" ] <<
43
+ ['ansi', '>= 1.2.2' ] <<
44
+ ['grit', ">= 2.4.1" ]
44
45
 
45
46
  self.extra_dev_deps <<
46
47
  ['hoe-debugging', ">= 1.0.1"] <<
data/lib/build-tool.rb CHANGED
@@ -2,6 +2,6 @@
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module BuildTool
5
- VERSION = '0.5.3'
5
+ VERSION = '0.5.4'
6
6
  end
7
7
 
@@ -107,10 +107,10 @@ def option_string
107
107
  arr = []
108
108
  option_names.each do |var|
109
109
  val = self[var]
110
- if val
110
+ if val and !val.empty?
111
111
  arr << "--#{var}='#{val}'"
112
112
  else
113
- arr << "--#{var}'"
113
+ arr << "--#{var}"
114
114
  end
115
115
  end
116
116
  arr.join(" ")
@@ -234,35 +234,7 @@ def remove_build_directory
234
234
 
235
235
  end # class Base
236
236
 
237
- class ProgressbarBase < Logging::Appender
238
-
239
- def initialize( title, &block )
240
- super( 'Progressbar', :level => :DEBUG )
241
- @pbar = nil
242
- @oldlogger = nil
243
- if Logging.appenders['stdout'].level >= ::Logging::level_num(:INFO)
244
- # We only do the progressbar thing if there is no verbose output active.
245
- begin
246
- # Remove the old stdout logger.
247
- @oldlogger = Logging.appenders[ 'stdout' ]
248
- Logging.logger[ 'root' ].remove_appenders( 'stdout' )
249
- Logging.logger[ 'root' ].add_appenders( self )
250
- # Add the progressbar logger
251
- @pbar = ANSI::Progressbar.new( title, 100 )
252
- yield
253
- ensure
254
- @pbar.finish unless @pbar.nil?
255
- # Reset the logger
256
- Logging.logger[ 'root' ].remove_appenders( 'Progressbar' )
257
- Logging.logger[ 'root' ].add_appenders( @oldlogger )
258
- end
259
- else
260
- # If there is verbose output just print the text
261
- logger.info( title )
262
- yield
263
- end
264
-
265
- end
237
+ class ProgressbarBase < MJ::Logging::Progressbar
266
238
 
267
239
  def write( event )
268
240
  message = event.data
@@ -23,6 +23,8 @@ def make( target, build_directory, environment )
23
23
  logger.error( line )
24
24
  elsif line.index( /\/ld:/ )
25
25
  logger.error( line )
26
+ elsif line.index( /(core dumped)/ )
27
+ logger.error( line )
26
28
  else
27
29
  logger.verbose( line )
28
30
  end
@@ -104,12 +104,11 @@ def execute()
104
104
  class Clone < Base
105
105
 
106
106
  def initialize( command, mod )
107
- logger.info "Cleaning build directory"
108
107
  super( command, 20, :fetch, mod )
109
108
  end
110
109
 
111
110
  def execute()
112
- logger.info "Fetching"
111
+ logger.info "Cloning"
113
112
  @module.clone
114
113
  end
115
114
 
@@ -155,8 +154,12 @@ def initialize( command, mod )
155
154
  end
156
155
 
157
156
  def execute()
158
- logger.info "Removing build directory"
159
- @module.remove_build_directory
157
+ if @module.build_system_required.out_of_source
158
+ logger.info "Removing build directory"
159
+ @module.remove_build_directory
160
+ else
161
+ logger.warn "in source build. Will not remove source directory!"
162
+ end
160
163
  end
161
164
 
162
165
  end
@@ -372,7 +372,9 @@ def complete_modules( name, include_templates = false )
372
372
  res = []
373
373
  found = false
374
374
  should_be_unique = false
375
+ resume = ( @resume_from.nil? and @resume_after.nil? )
375
376
  configuration.modules.each do |mod|
377
+ take_module = false
376
378
  next if ( !include_templates and mod.is_template? )
377
379
  # We match on the following conditions:
378
380
  # 1. name = mod.name
@@ -382,20 +384,31 @@ def complete_modules( name, include_templates = false )
382
384
  found = true
383
385
  # Now check if it is active.
384
386
  next if !( mod.active? || @all )
385
- res << mod
387
+ take_module = true
386
388
  elsif mod.name == name
387
389
  found = true
388
390
  should_be_unique = true
389
391
  # Now check if it is active.
390
392
  next if !( mod.active? || @all )
391
- res << mod
393
+ take_module = true
392
394
  elsif mod.name.end_with?( "/#{name}" )
393
395
  found = true
394
396
  should_be_unique = true
395
397
  # Now check if it is active.
396
398
  next if !( mod.active? || @all )
397
- res << mod
399
+ take_module = true
398
400
  end
401
+
402
+ if not resume and @resume_from and mod.name == @resume_from.name
403
+ resume = true
404
+ end
405
+
406
+ res << mod if resume and take_module
407
+
408
+ if not resume and @resume_after and mod.name == @resume_after.name
409
+ resume = true
410
+ end
411
+
399
412
  end
400
413
 
401
414
  # Raise an error if the module was not found
@@ -405,7 +418,7 @@ def complete_modules( name, include_templates = false )
405
418
 
406
419
  # Raise an error if the result should be unique but is not.
407
420
  if should_be_unique and res.size > 1
408
- raise UsageError, "#{name} is ambiguos. Please be more specific."
421
+ raise UsageError, "#{name} is ambiguos #{res}. Please be more specific."
409
422
  end
410
423
 
411
424
  # Give a warning if all modules where
@@ -487,12 +500,48 @@ def log_directory
487
500
 
488
501
  end # class Standard
489
502
 
503
+ class ModuleProgressbar < MJ::Logging::Progressbar
504
+
505
+ def initialize( title, mod, &block )
506
+ super( title, mod.size ) do
507
+ mod.each_with_index do |mod, i|
508
+ if @pbar
509
+ @pbar.set( i )
510
+ @pbar.title= mod.name.split( '/' )[-1]
511
+ end
512
+ yield mod
513
+ end
514
+ @pbar.title= 'finished' if @pbar
515
+ end
516
+ end
517
+
518
+
519
+ def write( event )
520
+ message = event.data
521
+ return if message.empty?
522
+
523
+ # Remove the progressbar and print the message
524
+ case event.level
525
+ when ::Logging::level_num( :ERROR ), ::Logging::level_num( :WARN ), ::Logging::level_num( :INFO )
526
+ begin
527
+ @pbar.clear() if @pbar
528
+ @oldlogger.append(event)
529
+ rescue Exception => e
530
+ puts e
531
+ end
532
+ end
533
+ end
534
+
535
+ end # class ModuleProgress
536
+
490
537
  class ModuleBasedCommand < Standard
491
538
 
492
539
  def initialize( *args )
493
540
  super( *args )
494
541
  @failed_modules = []
495
542
  @resume_from = nil
543
+ @resume_after = nil
544
+ @stop_on_error = false
496
545
  end
497
546
 
498
547
  def initialize_options
@@ -502,6 +551,18 @@ def initialize_options
502
551
  rescue UsageError => e
503
552
  raise UsageError, "--resume-from: #{e}"
504
553
  end
554
+ raise UsageError, "Both --resume-from and --resume-after specified!" if @resume_after
555
+ }
556
+ options.on( "--resume-after [module]", "Skip all module before and including module." ) { |t|
557
+ begin
558
+ @resume_after = complete_module( t )
559
+ rescue UsageError => e
560
+ raise UsageError, "--resume-after: #{e}"
561
+ end
562
+ raise UsageError, "Both --resume-from and --resume-after specified!" if @resume_from
563
+ }
564
+ options.on( "--[no-]stop-on-error", "Break on the first error." ) { |t|
565
+ @stop_on_error = t
505
566
  }
506
567
 
507
568
  super
@@ -531,15 +592,10 @@ def do_execute( args )
531
592
  end
532
593
 
533
594
  # 2. Check if the modules are ready
595
+ logger.info( '#### Checking for obstacles' )
534
596
  isready = true
535
- modules.each do |mod|
536
- begin
537
- isready &= is_module_ready?( mod )
538
- rescue Exception => e
539
- logger.error "#{mod.name}: #{e.message}"
540
- logger.verbose e.backtrace.join("\n")
541
- isready = false
542
- end
597
+ ModuleProgressbar.new( 'Modules', modules ) do |mod|
598
+ isready &= is_module_ready?( mod )
543
599
  end
544
600
 
545
601
  if !isready
@@ -554,10 +610,6 @@ def do_execute( args )
554
610
  rescue Interrupt => e
555
611
  logger.info( "User Interrupt" )
556
612
  return -1
557
- rescue Exception => e
558
- logger.error "#{mod.name}: #{e.message}"
559
- logger.verbose e.backtrace.join("\n")
560
- isready = false
561
613
  end
562
614
  end
563
615
 
@@ -576,15 +628,6 @@ def do_execute( args )
576
628
 
577
629
  modules.each_with_index do |mod, index|
578
630
 
579
- if not @resume_from.nil?
580
- if mod.name == @resume_from.name
581
- @resume_from = nil
582
- else
583
- logger.info "Skipping module #{mod.name} (#{index+1}/#{modules.size})"
584
- next
585
- end
586
- end
587
-
588
631
  begin
589
632
 
590
633
  logger.info ""
@@ -597,11 +640,13 @@ def do_execute( args )
597
640
  logger.verbose e.backtrace.join("\n")
598
641
  @failed_modules << mod.name
599
642
  rc = -1
643
+ break if @stop_on_error
600
644
  rescue Exception => e
601
645
  logger.error "#{e.class}:#{e.message}"
602
646
  logger.verbose e.backtrace.join("\n")
603
647
  @failed_modules << mod.name
604
648
  rc = -1
649
+ break if @stop_on_error
605
650
  ensure
606
651
  logger.info "#### Module #{mod.name} finished"
607
652
  end
@@ -63,7 +63,11 @@ def applicable?
63
63
 
64
64
  def is_module_ready?( mod )
65
65
  isready = true
66
- @update && isready &= mod.ready_for_vcs_access
66
+ if @from_scratch and not mod.build_system_required.out_of_source
67
+ logger.warn "#{mod.name}: is compiled in source. Skipping --from-scratch!"
68
+ end
69
+ @update && isready &= mod.ready_for_fetch
70
+ @update && isready &= mod.ready_for_rebase
67
71
  if !@update and (@build or @install or @configure)
68
72
  if !mod.checkedout?
69
73
  logger.warn "#{mod.name}: is not checked out. Skipping (add -u for checkout)"
@@ -75,7 +79,8 @@ def is_module_ready?( mod )
75
79
 
76
80
  def prepare_module( mod )
77
81
  isready = true
78
- @update && isready &= mod.prepare_for_vcs_access
82
+ @update && isready &= mod.prepare_for_fetch
83
+ @update && isready &= mod.prepare_for_rebase
79
84
  return isready
80
85
  end # prepare_module
81
86
 
@@ -60,8 +60,12 @@ def is_module_ready?( mod )
60
60
 
61
61
  def do_execute_module( mod )
62
62
  if mod.checkedout?
63
- if @from_scratch or @clean
64
- clean( mod, @from_scratch )
63
+
64
+ # clean/from-scratch
65
+ if @from_scratch
66
+ remove_build_directory( mod )
67
+ elsif @clean
68
+ clean( mod )
65
69
  end
66
70
 
67
71
  if @rmcache and !@from_scratch
@@ -33,7 +33,7 @@ def initialize_options
33
33
 
34
34
  def is_module_ready?( mod )
35
35
  isready = true
36
- isready &= mod.ready_for_vcs_access
36
+ isready &= mod.ready_for_fetch
37
37
  if !mod.vcs.fetching_supported?
38
38
  logger.warn "#{mod.name}: fetching not supported by #{mod.vcs.name} -> implicit rebase."
39
39
  end
@@ -78,16 +78,16 @@ def show_command_history
78
78
  end
79
79
 
80
80
  def show_module_history( modname )
81
- mod = Application::instance.configuration.module( modname )
81
+ mod = complete_module( modname )
82
82
  if mod.nil?
83
83
  return usage( "Unknown module #{modname}" )
84
84
  end
85
85
 
86
- BuildTool::History::CommandLog.last_by_module( modname, @lines || 3 ).reverse.each do |cmd|
86
+ BuildTool::History::CommandLog.last_by_module( mod.name, @lines || 3 ).reverse.each do |cmd|
87
87
  show_command( cmd )
88
88
 
89
89
  last_module=""
90
- cmd.module_logs_dataset.filter( :module => modname ).each do |e|
90
+ cmd.module_logs_dataset.filter( :module => mod.name ).each do |e|
91
91
  if e.module != last_module
92
92
  say blue { "\t#{e.module}" }
93
93
  last_module = e.module
@@ -32,20 +32,23 @@ def initialize_options
32
32
  def is_module_ready?( mod )
33
33
  isready = true
34
34
  if !mod.checkedout?
35
- logger.warn "#{mod.name}: module not checked out -> skipping."
36
- end
37
- if !mod.vcs.fetching_supported?
38
- logger.warn "#{mod.name}: fetching not support by #{mod.vcs.name} -> will have no effect."
35
+ logger.info "#{mod.name}: Skipping: Not checked out."
36
+ else
37
+ isready &= mod.ready_for_rebase
38
+ if !mod.vcs.fetching_supported?
39
+ logger.info "#{mod.name}: Skipping: Rebasing not support by #{vcs.name}"
40
+ end
39
41
  end
40
42
  return isready
41
43
  end
42
44
 
43
45
 
44
46
  def do_execute_module( mod )
45
- if mod.checkedout?
47
+ if mod.checkedout? and mod.vcs.fetching_supported?
48
+ logger.info "Skipping: Rebasing not support by #{vcs.name}"
46
49
  rebase( mod )
47
50
  else
48
- logger.info "Not checked out. Skipping"
51
+ logger.info "Skipping: Not checked out."
49
52
  end
50
53
  end
51
54