autoproj 1.13.7 → 2.0.0.b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.gemtest +0 -0
  3. data/Manifest.txt +27 -21
  4. data/Rakefile +4 -6
  5. data/bin/alocate +5 -1
  6. data/bin/amake +3 -53
  7. data/bin/aup +3 -50
  8. data/bin/autoproj +3 -264
  9. data/bin/autoproj_bootstrap +294 -349
  10. data/bin/autoproj_bootstrap.in +27 -3
  11. data/lib/autoproj.rb +23 -1
  12. data/lib/autoproj/autobuild.rb +51 -89
  13. data/lib/autoproj/base.rb +0 -9
  14. data/lib/autoproj/build_option.rb +1 -3
  15. data/lib/autoproj/cli.rb +1 -0
  16. data/lib/autoproj/cli/base.rb +155 -0
  17. data/lib/autoproj/cli/bootstrap.rb +119 -0
  18. data/lib/autoproj/cli/build.rb +72 -0
  19. data/lib/autoproj/cli/cache.rb +31 -0
  20. data/lib/autoproj/cli/clean.rb +37 -0
  21. data/lib/autoproj/cli/commit.rb +41 -0
  22. data/lib/autoproj/cli/doc.rb +22 -0
  23. data/lib/autoproj/cli/envsh.rb +22 -0
  24. data/lib/autoproj/cli/inspection_tool.rb +73 -0
  25. data/lib/autoproj/cli/locate.rb +96 -0
  26. data/lib/autoproj/cli/log.rb +26 -0
  27. data/lib/autoproj/cli/main.rb +249 -0
  28. data/lib/autoproj/cli/main_test.rb +57 -0
  29. data/lib/autoproj/cli/osdeps.rb +30 -0
  30. data/lib/autoproj/cli/query.rb +43 -0
  31. data/lib/autoproj/cli/reconfigure.rb +19 -0
  32. data/lib/autoproj/cli/reset.rb +7 -32
  33. data/lib/autoproj/cli/show.rb +219 -0
  34. data/lib/autoproj/cli/snapshot.rb +1 -1
  35. data/lib/autoproj/cli/status.rb +149 -0
  36. data/lib/autoproj/cli/switch_config.rb +28 -0
  37. data/lib/autoproj/cli/tag.rb +9 -35
  38. data/lib/autoproj/cli/test.rb +34 -55
  39. data/lib/autoproj/cli/update.rb +158 -0
  40. data/lib/autoproj/cli/versions.rb +32 -69
  41. data/lib/autoproj/configuration.rb +95 -34
  42. data/lib/autoproj/default.osdeps +25 -35
  43. data/lib/autoproj/environment.rb +85 -63
  44. data/lib/autoproj/exceptions.rb +50 -0
  45. data/lib/autoproj/gitorious.rb +11 -9
  46. data/lib/autoproj/manifest.rb +199 -231
  47. data/lib/autoproj/metapackage.rb +0 -8
  48. data/lib/autoproj/ops/build.rb +1 -17
  49. data/lib/autoproj/ops/configuration.rb +92 -90
  50. data/lib/autoproj/ops/import.rb +222 -0
  51. data/lib/autoproj/ops/loader.rb +18 -8
  52. data/lib/autoproj/ops/main_config_switcher.rb +45 -73
  53. data/lib/autoproj/ops/snapshot.rb +5 -10
  54. data/lib/autoproj/ops/tools.rb +10 -44
  55. data/lib/autoproj/options.rb +35 -6
  56. data/lib/autoproj/osdeps.rb +97 -68
  57. data/lib/autoproj/package_selection.rb +39 -20
  58. data/lib/autoproj/package_set.rb +26 -24
  59. data/lib/autoproj/reporter.rb +91 -0
  60. data/lib/autoproj/system.rb +50 -149
  61. data/lib/autoproj/variable_expansion.rb +32 -6
  62. data/lib/autoproj/vcs_definition.rb +57 -17
  63. data/lib/autoproj/version.rb +1 -1
  64. data/lib/autoproj/workspace.rb +550 -0
  65. data/test/ops/test_snapshot.rb +26 -0
  66. data/test/test_package.rb +30 -0
  67. data/test/test_vcs_definition.rb +46 -0
  68. metadata +55 -50
  69. data/bin/autolocate +0 -3
  70. data/bin/autoproj-bootstrap +0 -68
  71. data/bin/autoproj-cache +0 -18
  72. data/bin/autoproj-clean +0 -13
  73. data/bin/autoproj-commit +0 -10
  74. data/bin/autoproj-create-set +0 -118
  75. data/bin/autoproj-doc +0 -28
  76. data/bin/autoproj-envsh +0 -14
  77. data/bin/autoproj-list +0 -69
  78. data/bin/autoproj-locate +0 -85
  79. data/bin/autoproj-log +0 -5
  80. data/bin/autoproj-query +0 -82
  81. data/bin/autoproj-reset +0 -13
  82. data/bin/autoproj-show +0 -192
  83. data/bin/autoproj-snapshot +0 -27
  84. data/bin/autoproj-switch-config +0 -24
  85. data/bin/autoproj-tag +0 -13
  86. data/bin/autoproj-test +0 -31
  87. data/bin/autoproj-versions +0 -20
  88. data/bin/autoproj_stress_test +0 -40
  89. data/lib/autoproj/cmdline.rb +0 -1649
@@ -171,7 +171,7 @@ module Autoproj
171
171
  if vcs.local?
172
172
  File.expand_path(vcs.url)
173
173
  else
174
- File.expand_path(File.join(Autoproj.remotes_dir, vcs.create_autobuild_importer.repository_id.gsub(/[^\w]/, '_')))
174
+ File.expand_path(File.join(Autoproj.workspace.remotes_dir, vcs.create_autobuild_importer.repository_id.gsub(/[^\w]/, '_')))
175
175
  end
176
176
  end
177
177
 
@@ -182,7 +182,7 @@ module Autoproj
182
182
  # returns the corresponding VCSDefinition object
183
183
  def self.resolve_definition(manifest, raw_spec)
184
184
  if raw_spec.respond_to?(:to_str)
185
- local_path = File.join(Autoproj.config_dir, raw_spec)
185
+ local_path = File.join(Autoproj.workspace.config_dir, raw_spec)
186
186
  if File.directory?(local_path)
187
187
  raw_spec = { :type => 'local', :url => local_path }
188
188
  end
@@ -194,7 +194,7 @@ module Autoproj
194
194
  # either vcs_type:url or just url. In the latter case, we expect
195
195
  # 'url' to be a path to a local directory
196
196
  vcs_spec = Autoproj.expand(vcs_spec, manifest.constant_definitions)
197
- return VCSDefinition.from_raw(vcs_spec, [[nil, raw_spec]]), options
197
+ return VCSDefinition.from_raw(vcs_spec, raw: [[nil, raw_spec]]), options
198
198
  end
199
199
 
200
200
  # Returns a string that uniquely represents the version control
@@ -238,7 +238,7 @@ module Autoproj
238
238
  if local?
239
239
  return vcs.url
240
240
  else
241
- File.join(Autoproj.config_dir, 'remotes', name)
241
+ File.join(Autoproj.workspace.config_dir, 'remotes', name)
242
242
  end
243
243
  end
244
244
 
@@ -464,7 +464,7 @@ module Autoproj
464
464
  name_match = Regexp.new("^" + name_match)
465
465
  end
466
466
  if name_match === package_name
467
- raw << [self.name, spec]
467
+ raw << [self, spec]
468
468
  vcs_spec =
469
469
  begin
470
470
  VCSDefinition.update_raw_vcs_spec(vcs_spec, spec)
@@ -478,8 +478,8 @@ module Autoproj
478
478
  if !vcs_spec.empty?
479
479
  expansions = Hash["PACKAGE" => package_name,
480
480
  "PACKAGE_BASENAME" => File.basename(package_name),
481
- "AUTOPROJ_ROOT" => Autoproj.root_dir,
482
- "AUTOPROJ_CONFIG" => Autoproj.config_dir,
481
+ "AUTOPROJ_ROOT" => Autoproj.workspace.root_dir,
482
+ "AUTOPROJ_CONFIG" => Autoproj.workspace.config_dir,
483
483
  "AUTOPROJ_SOURCE_DIR" => local_dir]
484
484
 
485
485
  vcs_spec = expand(vcs_spec, expansions)
@@ -510,7 +510,7 @@ module Autoproj
510
510
  Autoproj.in_file source_file do
511
511
  vcs_spec, raw = version_control_field(package_name, 'version_control')
512
512
  if vcs_spec
513
- VCSDefinition.from_raw(vcs_spec, raw)
513
+ VCSDefinition.from_raw(vcs_spec, raw: raw, from: self)
514
514
  end
515
515
  end
516
516
  end
@@ -524,13 +524,14 @@ module Autoproj
524
524
  overrides.each do |file, override|
525
525
  new_spec, new_raw_entry =
526
526
  Autoproj.in_file file do
527
- vcs_field(Hash['overrides' => override], package_name, 'overrides', false)
527
+ vcs_field(Hash['overrides' => override],
528
+ package_name, 'overrides', false)
528
529
  end
529
530
 
530
531
  if new_spec
531
532
  Autoproj.in_file file do
532
533
  begin
533
- vcs = vcs.update(new_spec, new_raw_entry)
534
+ vcs = vcs.update(new_spec, raw: new_raw_entry, from: self)
534
535
  rescue ConfigError => e
535
536
  raise ConfigError.new, "invalid resulting VCS specification in the overrides section for package #{package_name}: #{e.message}"
536
537
  end
@@ -565,21 +566,18 @@ module Autoproj
565
566
 
566
567
  # Specialization of the PackageSet class for the overrides listed in autoproj/
567
568
  class LocalPackageSet < PackageSet
568
- def initialize(manifest, vcs = nil)
569
- if !vcs
570
- if Autoproj.has_config_key?('manifest_source')
571
- vcs = VCSDefinition.from_raw(Autoproj.user_config('manifest_source'))
572
- else
573
- vcs = VCSDefinition.from_raw(:type => 'local', :url => Autoproj.config_dir)
574
- end
575
- end
576
- super(manifest, vcs)
569
+ def initialize(manifest)
570
+ super(manifest, manifest.vcs)
577
571
  end
578
572
 
579
573
  def name
580
574
  'main configuration'
581
575
  end
582
576
 
577
+ def vcs
578
+ manifest.vcs
579
+ end
580
+
583
581
  def main?
584
582
  true
585
583
  end
@@ -589,19 +587,23 @@ module Autoproj
589
587
  end
590
588
 
591
589
  def local_dir
592
- Autoproj.config_dir
590
+ if manifest.file
591
+ File.dirname(manifest.file)
592
+ end
593
593
  end
594
594
 
595
595
  def raw_local_dir
596
- Autoproj.config_dir
596
+ local_dir
597
597
  end
598
598
 
599
599
  def manifest_path
600
- File.join(Autoproj.config_dir, "manifest")
600
+ manifest.file
601
601
  end
602
602
 
603
603
  def overrides_file_path
604
- File.join(Autoproj.config_dir, "overrides.yml")
604
+ if d = local_dir
605
+ File.join(d, "overrides.yml")
606
+ end
605
607
  end
606
608
 
607
609
  def source_file
@@ -621,7 +623,7 @@ module Autoproj
621
623
  end
622
624
 
623
625
  def load_overrides
624
- files = Dir.glob(File.join( Autoproj.overrides_dir, "*.yml" ) ).sort
626
+ files = Dir.glob(File.join( Autoproj.workspace.overrides_dir, "*.yml" ) ).sort
625
627
  overrides = files.map do |file|
626
628
  source_data = Autoproj.in_file(file, Autoproj::YAML_LOAD_ERROR) do
627
629
  YAML.load(File.read(file)) || Array.new
@@ -0,0 +1,91 @@
1
+ require 'autobuild/reporting'
2
+ module Autoproj
3
+ class << self
4
+ attr_accessor :verbose
5
+ attr_reader :console
6
+ def silent?
7
+ Autobuild.silent?
8
+ end
9
+ def silent=(value)
10
+ Autobuild.silent = value
11
+ end
12
+ end
13
+ @verbose = false
14
+ @console = HighLine.new
15
+
16
+
17
+ def self.silent(&block)
18
+ Autobuild.silent(&block)
19
+ end
20
+
21
+ def self.message(*args)
22
+ Autobuild.message(*args)
23
+ end
24
+
25
+ def self.color(*args)
26
+ Autobuild.color(*args)
27
+ end
28
+
29
+ # Displays an error message
30
+ def self.error(message)
31
+ Autobuild.error(message)
32
+ end
33
+
34
+ # Displays a warning message
35
+ def self.warn(message, *style)
36
+ Autobuild.warn(message, *style)
37
+ end
38
+
39
+ # Subclass of Autobuild::Reporter, used to display a message when the build
40
+ # finishes/fails.
41
+ class Reporter < Autobuild::Reporter
42
+ def error(error)
43
+ error_lines = error.to_s.split("\n")
44
+ Autoproj.message("Command failed", :bold, :red, STDERR)
45
+ Autoproj.message("#{error_lines.shift}", :bold, :red, STDERR)
46
+ error_lines.each do |line|
47
+ Autoproj.message line, STDERR
48
+ end
49
+ end
50
+ def success
51
+ Autoproj.message("Command finished successfully at #{Time.now}", :bold, :green)
52
+ if Autobuild.post_success_message
53
+ Autoproj.message Autobuild.post_success_message
54
+ end
55
+ end
56
+ end
57
+
58
+ def self.report(options = Hash.new)
59
+ options = Kernel.validate_options options,
60
+ root_dir: nil,
61
+ silent: false
62
+
63
+ Autobuild::Reporting.report do
64
+ yield
65
+ end
66
+ if !options[:silent]
67
+ Autobuild::Reporting.success
68
+ end
69
+
70
+ rescue Interrupt
71
+ STDERR.puts
72
+ STDERR.puts Autobuild.color("Interrupted by user", :red, :bold)
73
+ if Autobuild.debug then raise
74
+ else exit 1
75
+ end
76
+ rescue Exception => e
77
+ STDERR.puts
78
+ STDERR.puts Autobuild.color(e.message, :red, :bold)
79
+ if root_dir = options[:root_dir]
80
+ root_dir = /#{Regexp.quote(root_dir)}(?!\/\.gems)/
81
+ e.backtrace.find_all { |path| path =~ root_dir }.
82
+ each do |path|
83
+ STDERR.puts Autobuild.color(" in #{path}", :red, :bold)
84
+ end
85
+ end
86
+ if Autobuild.debug then raise
87
+ else exit 1
88
+ end
89
+ end
90
+ end
91
+
@@ -1,6 +1,4 @@
1
1
  module Autoproj
2
- class UserError < RuntimeError; end
3
-
4
2
  # OS-independent creation of symbolic links. Note that on windows, it only
5
3
  # works for directories
6
4
  def self.create_symlink(from, to)
@@ -24,6 +22,9 @@ module Autoproj
24
22
  # This is mostly useful during bootstrapping (i.e. when the search would
25
23
  # fail)
26
24
  def self.root_dir=(dir)
25
+ if @workspace && dir != @workspace.root_dir
26
+ raise WorkspaceAlreadyCreated, "cannot switch global root directory after a workspace object got created"
27
+ end
27
28
  @root_dir = dir
28
29
  end
29
30
 
@@ -35,90 +36,77 @@ module Autoproj
35
36
  if @root_dir
36
37
  return @root_dir
37
38
  end
38
-
39
- path = Pathname.pwd
40
- while !path.root?
41
- if (path + "autoproj" + 'manifest').file?
42
- break
43
- end
44
- path = path.parent
45
- end
46
-
47
- if path.root?
39
+ path = Workspace.find_root_dir(dir)
40
+ if !path
48
41
  raise UserError, "not in a Autoproj installation"
49
42
  end
50
-
51
- result = path.to_s
52
- # I don't know if this is still useful or not ... but it does not hurt
53
- #
54
- # Preventing backslashed in path, that might be confusing on some path compares
55
- if Autobuild.windows?
56
- result = result.gsub(/\\/,'/')
57
- end
58
- result
43
+ path
59
44
  end
60
45
 
61
- # Returns the configuration directory for this autoproj installation.
62
- #
63
- # If the current directory is not in an autoproj installation,
64
- # raises UserError.
46
+ # @deprecated use workspace.config_dir instead
65
47
  def self.config_dir
66
- File.join(root_dir, "autoproj")
48
+ Autoproj.warn "#{__method__} is deprecated, use workspace.config_dir instead"
49
+ caller.each { |l| Autoproj.warn " #{l}" }
50
+ workspace.config_dir
67
51
  end
68
-
69
- OVERRIDES_DIR = "overrides.d"
70
-
71
- # Returns the directory containing overrides files
72
- #
73
- # If the current directory is not in an autoproj installation,
74
- # raises UserError.
52
+ # @deprecated use workspace.overrides_dir instead
75
53
  def self.overrides_dir
76
- File.join(config_dir, OVERRIDES_DIR)
54
+ Autoproj.warn "#{__method__} is deprecated, use workspace.overrides_dir instead"
55
+ caller.each { |l| Autoproj.warn " #{l}" }
56
+ workspace.overrides_dir
77
57
  end
78
-
79
58
  # @deprecated use Autobuild.find_in_path instead
80
59
  #
81
60
  # Warning: the autobuild method returns nil (instead of raising) if the
82
61
  # argument cannot be found
83
62
  def self.find_in_path(name)
63
+ Autoproj.warn "#{__method__} is deprecated, use Autobuild.find_in_path instead"
64
+ caller.each { |l| Autoproj.warn " #{l}" }
84
65
  if path = Autobuild.find_in_path(name)
85
66
  return path
86
67
  else raise ArgumentError, "cannot find #{name} in PATH (#{ENV['PATH']})"
87
68
  end
88
69
  end
89
-
90
- class << self
91
- # The directory in which packages will be installed.
92
- #
93
- # If it is a relative path, it is relative to the root dir of the
94
- # installation.
95
- #
96
- # The default is "install"
97
- attr_reader :prefix
98
-
99
- # Change the value of 'prefix'
100
- def prefix=(new_path)
101
- @prefix = new_path
102
- Autoproj.change_option('prefix', new_path, true)
103
- end
70
+ # @deprecated use workspace.prefix_dir instead
71
+ def self.prefix
72
+ Autoproj.warn_deprecated(__method__, 'workspace.prefix_dir')
73
+ workspace.prefix_dir
104
74
  end
105
- @prefix = "install"
106
-
107
- # Returns the build directory (prefix) for this autoproj installation.
108
- #
109
- # If the current directory is not in an autoproj installation, raises
110
- # UserError.
75
+ # @deprecated use workspace.prefix_dir= instead
76
+ def self.prefix=(path)
77
+ Autoproj.warn_deprecated(__method__, 'workspace.prefix_dir=')
78
+ workspace.prefix_dir = path
79
+ end
80
+ # @deprecated use workspace.prefix_dir instead
111
81
  def self.build_dir
112
- File.expand_path(Autoproj.prefix, root_dir)
82
+ Autoproj.warn_deprecated(__method__, 'workspace.prefix_dir')
83
+ workspace.prefix_dir
113
84
  end
114
-
115
- # Returns the path to the provided configuration file.
116
- #
117
- # If the current directory is not in an autoproj installation, raises
118
- # UserError.
85
+ # @deprecated compute the full path with File.join(config_dir, file)
86
+ # directly instead
119
87
  def self.config_file(file)
88
+ Autoproj.warn_deprecated(__method__, 'compute the full path with File.join(config_dir, ...) instead')
120
89
  File.join(config_dir, file)
121
90
  end
91
+ # @deprecated use workspace.remotes_dir instead
92
+ def self.remotes_dir
93
+ Autoproj.warn_deprecated(__method__, 'use workspace.remotes_dir instead')
94
+ workspace.remotes_dir
95
+ end
96
+ # @deprecated use workspace.load or add a separate Loader object to your class
97
+ def self.load(package_set, *path)
98
+ Autoproj.warn_deprecated(
99
+ __method__,
100
+ 'use workspace.load or add a separate Loader object to your class')
101
+ workspace.load(package_set, *path)
102
+ end
103
+ # @deprecated use workspace.load_if_present or add a separate Loader object to your class
104
+ def self.load_if_present(package_set, *path)
105
+ Autoproj.warn_deprecated(
106
+ __method__,
107
+ 'use workspace.load_if_present or add a separate Loader object to your class')
108
+ workspace.load_if_present(package_set, *path)
109
+ end
122
110
 
123
111
  # Run the provided command as user
124
112
  def self.run_as_user(*args)
@@ -126,7 +114,6 @@ module Autoproj
126
114
  raise "failed to run #{args.join(" ")}"
127
115
  end
128
116
  end
129
-
130
117
  # Run the provided command as root, using sudo to gain root access
131
118
  def self.run_as_root(*args)
132
119
  if !system(Autobuild.tool_in_path('sudo'), *args)
@@ -134,92 +121,6 @@ module Autoproj
134
121
  end
135
122
  end
136
123
 
137
- # Return the directory in which remote package set definition should be
138
- # checked out
139
- def self.remotes_dir
140
- File.join(root_dir, ".remotes")
141
- end
142
-
143
-
144
- def self.env_inherit(*names)
145
- Autobuild.env_inherit(*names)
146
- end
147
-
148
- # @deprecated use isolate_environment instead
149
- def self.set_initial_env
150
- isolate_environment
151
- end
152
-
153
- # Initializes the environment variables to a "sane default"
154
- #
155
- # Use this in autoproj/init.rb to make sure that the environment will not
156
- # get polluted during the build.
157
- def self.isolate_environment
158
- Autobuild.env_inherit = false
159
- Autobuild.env_push_path 'PATH', "/usr/local/bin", "/usr/bin", "/bin"
160
- end
161
-
162
- def self.prepare_environment
163
- # Set up some important autobuild parameters
164
- env_inherit 'PATH', 'PKG_CONFIG_PATH', 'RUBYLIB', \
165
- 'LD_LIBRARY_PATH', 'CMAKE_PREFIX_PATH', 'PYTHONPATH'
166
-
167
- env_set 'AUTOPROJ_CURRENT_ROOT', Autoproj.root_dir
168
- env_set 'RUBYOPT', "-rubygems"
169
- Autoproj::OSDependencies::PACKAGE_HANDLERS.each do |pkg_mng|
170
- pkg_mng.initialize_environment
171
- end
172
- end
173
-
174
- class << self
175
- attr_writer :shell_helpers
176
- def shell_helpers?; !!@shell_helpers end
177
- end
178
- @shell_helpers = true
179
-
180
- # Create the env.sh script in +subdir+. In general, +subdir+ should be nil.
181
- def self.export_env_sh(subdir = nil)
182
- # Make sure that we have as much environment as possible
183
- Autoproj::CmdLine.update_environment
184
-
185
- filename = if subdir
186
- File.join(Autoproj.root_dir, subdir, ENV_FILENAME)
187
- else
188
- File.join(Autoproj.root_dir, ENV_FILENAME)
189
- end
190
-
191
- shell_dir = File.expand_path(File.join("..", "..", "shell"), File.dirname(__FILE__))
192
- if Autoproj.shell_helpers?
193
- Autoproj.message "sourcing autoproj shell helpers"
194
- Autoproj.message "add \"Autoproj.shell_helpers = false\" in autoproj/init.rb to disable"
195
- Autobuild.env_source_after(File.join(shell_dir, "autoproj_sh"))
196
- end
197
-
198
- File.open(filename, "w") do |io|
199
- if Autobuild.env_inherit
200
- io.write <<-EOF
201
- if test -n "$AUTOPROJ_CURRENT_ROOT" && test "$AUTOPROJ_CURRENT_ROOT" != "#{Autoproj.root_dir}"; then
202
- echo "the env.sh from $AUTOPROJ_CURRENT_ROOT is already loaded. Start a new shell before sourcing this one"
203
- return
204
- fi
205
- EOF
206
- end
207
- Autobuild.export_env_sh(io)
208
- end
209
- end
210
-
211
- # @deprecated use Ops.loader.load or add a proper Loader object to your
212
- # class
213
- def self.load(package_set, *path)
214
- Ops.loader.load(package_set, *path)
215
- end
216
-
217
- # @deprecated use Ops.loader.load_if_present or add a proper Loader object
218
- # to your class
219
- def self.load_if_present(package_set, *path)
220
- Ops.loader.load_if_present(package_set, *path)
221
- end
222
-
223
124
  # Look into +dir+, searching for shared libraries. For each library, display
224
125
  # a warning message if this library has undefined symbols.
225
126
  def self.validate_solib_dependencies(dir, exclude_paths = [])