autoproj 1.13.7 → 2.0.0.b1

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 (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 = [])