autoproj 1.7.13 → 1.7.14.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/.gemtest ADDED
File without changes
data/History.txt CHANGED
@@ -1,3 +1,23 @@
1
+ = Version 1.7.14
2
+ * fix support for local package sets, i.e. package sets that are saved in
3
+ autoproj/directory_name and are part of the main configuration VCS.
4
+ * fix behavior of autoproj when adding a remote package set in
5
+ autoproj/manifest and calling amake my/package right away. Until now,
6
+ autoproj was yelling with a criptic message. It will now behave and check out
7
+ the new package set.
8
+ * add support for sourcing shell scripts from env.sh:
9
+ Autoproj.env_source_file(path)
10
+ * fix a Ruby 1.9 incompatibility
11
+ * better performance in e.g. autoproj query and autoproj locate (this speeds up
12
+ acd)
13
+ * accept amake --rebuild the same way than amake --force was accepted until now
14
+ * add support for including manifest.xml files in the package sets. This is
15
+ meant to be used for external packages that do not provide a manifest.
16
+ The manifests are listed in the package set's manifests/ subdirectory and
17
+ must match the package name, as e.g.
18
+ rock.git/external/yaml-cpp.xml
19
+ The package set's manifest takes precedence over the package one.
20
+
1
21
  = Version 1.7.13
2
22
  * bugfix release: fix HTTP fallback mechanism for gitorious servers
3
23
 
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH.unshift File.join(Dir.pwd, 'lib')
2
2
 
3
+ task 'default'
3
4
  begin
4
5
  require 'hoe'
5
6
  namespace 'dist' do
data/bin/amake CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'optparse'
4
4
 
5
5
  build_all = false
6
- force = false
6
+ mode = "build"
7
7
 
8
8
  parser = OptionParser.new do |opt|
9
9
  opt.banner = "amake [options] [dir_or_package]
@@ -17,7 +17,10 @@ Accepts all options from autoproj build plus the following options:
17
17
  build_all = true
18
18
  end
19
19
  opt.on('--force', 'runs autoproj force-build instead of autoproj build') do
20
- force = true
20
+ mode = "force-build"
21
+ end
22
+ opt.on('--rebuild', 'runs autoproj force-build instead of autoproj build') do
23
+ mode = "rebuild"
21
24
  end
22
25
  opt.on('--help', 'shows this help message') do
23
26
  puts parser
@@ -45,11 +48,7 @@ if remaining.grep(/^-/).size == remaining.size && !build_all
45
48
  remaining.push '.'
46
49
  end
47
50
 
48
- if force
49
- remaining.unshift "force-build"
50
- else
51
- remaining.unshift "build"
52
- end
51
+ remaining.unshift mode
53
52
  ARGV.clear
54
53
  ARGV.concat(remaining)
55
54
  load File.expand_path('autoproj', File.dirname(__FILE__))
data/bin/autoproj CHANGED
@@ -52,7 +52,16 @@ Autoproj::OSDependencies.autodetect_ruby
52
52
  prefix = File.expand_path(__FILE__)
53
53
  if File.file?("#{prefix}-#{ARGV.first}")
54
54
  binary = "#{prefix}-#{ARGV.shift}"
55
- exec(binary, *ARGV)
55
+ # RubyGems have a BIG performance problem when $LOADED_PATH starts to be
56
+ # big.
57
+ #
58
+ # So, if the sub-script is Ruby-based, just load it and exit
59
+ if File.readlines(binary).first =~ /ruby/
60
+ load binary
61
+ exit
62
+ else
63
+ exec(binary, *ARGV)
64
+ end
56
65
  end
57
66
 
58
67
  # Find the autoproj root dir
@@ -97,6 +106,14 @@ EOTEXT
97
106
  if selected_packages.empty?
98
107
  Autoproj::CmdLine.update_myself
99
108
  Autoproj::CmdLine.update_configuration
109
+ else
110
+ begin
111
+ old_value = Autobuild.do_update
112
+ Autobuild.do_update = false
113
+ Autoproj::CmdLine.update_configuration
114
+ ensure
115
+ Autobuild.do_update = old_value
116
+ end
100
117
  end
101
118
  Autoproj::CmdLine.load_configuration
102
119
  manifest = Autoproj.manifest
@@ -686,7 +686,12 @@ fi
686
686
  gems = gems.dup
687
687
  gems.delete_if do |name, version|
688
688
  version_requirements = Gem::Requirement.new(version || '>= 0')
689
- installed = Gem.source_index.find_name(name, version_requirements)
689
+ installed =
690
+ if Gem.source_index.respond_to?(:find_by_name)
691
+ Gem.source_index.find_by_name(name, version_requirements)
692
+ else
693
+ Gem.source_index.find_name(name, version_requirements)
694
+ end
690
695
  if !installed.empty? && Autobuild.do_update
691
696
  # Look if we can update the package ...
692
697
  dep = Gem::Dependency.new(name, version_requirements)
@@ -1370,37 +1375,22 @@ module Autoproj
1370
1375
  File.join(Autoproj.root_dir, "env.sh")
1371
1376
  end
1372
1377
 
1373
- File.open(filename, "w") do |io|
1374
- variables = []
1375
- Autobuild.environment.each do |name, value|
1376
- variables << name
1377
- shell_line = "#{name}=#{value.join(":")}"
1378
- if Autoproj.env_inherit?(name)
1379
- if value.empty?
1380
- next
1381
- else
1382
- shell_line << ":$#{name}"
1383
- end
1378
+ shell_dir = File.expand_path(File.join("..", "..", "shell"), File.dirname(__FILE__))
1379
+ if Autoproj.shell_helpers? && shell = ENV['SHELL']
1380
+ shell_kind = File.basename(shell)
1381
+ if shell_kind =~ /^\w+$/
1382
+ shell_file = File.join(shell_dir, "autoproj_#{shell_kind}")
1383
+ if File.exists?(shell_file)
1384
+ Autoproj.progress
1385
+ Autoproj.progress "autodetected the shell to be #{shell_kind}, sourcing autoproj shell helpers"
1386
+ Autoproj.progress "add \"Autoproj.shell_helpers = false\" in autoproj/init.rb to disable"
1387
+ Autobuild.env_source_file(shell_file)
1384
1388
  end
1385
- io.puts shell_line
1386
- end
1387
- variables.each do |var|
1388
- io.puts "export #{var}"
1389
1389
  end
1390
+ end
1390
1391
 
1391
- shell_dir = File.expand_path(File.join("..", "..", "shell"), File.dirname(__FILE__))
1392
- if Autoproj.shell_helpers? && shell = ENV['SHELL']
1393
- shell_kind = File.basename(shell)
1394
- if shell_kind =~ /^\w+$/
1395
- shell_file = File.join(shell_dir, "autoproj_#{shell_kind}")
1396
- if File.exists?(shell_file)
1397
- Autoproj.progress
1398
- Autoproj.progress "autodetected the shell to be #{shell_kind}, sourcing autoproj shell helpers"
1399
- Autoproj.progress "add \"Autoproj.shell_helpers = false\" in autoproj/init.rb to disable"
1400
- io.puts "source \"#{shell_file}\""
1401
- end
1402
- end
1403
- end
1392
+ File.open(filename, "w") do |io|
1393
+ Autobuild.export_env_sh(io)
1404
1394
  end
1405
1395
  end
1406
1396
 
@@ -493,7 +493,7 @@ module Autoproj
493
493
  sel = File.expand_path(sel)
494
494
  relative_to_root = Pathname.new(sel).relative_path_from(Pathname.new(Autoproj.root_dir))
495
495
  pkg = Autoproj.in_package_set(manifest.local_package_set, manifest.file) do
496
- send(handler, relative_to_root)
496
+ send(handler, relative_to_root.to_s)
497
497
  end
498
498
  setup_package_directories(pkg)
499
499
  selected_packages << pkg.name
@@ -1660,9 +1660,7 @@ export PATH=$GEM_HOME/bin:$PATH
1660
1660
 
1661
1661
  Autoproj::CmdLine.update_os_dependencies = false
1662
1662
  Autoproj::CmdLine.initialize
1663
- if Autobuild.do_update
1664
- Autoproj::CmdLine.update_configuration
1665
- end
1663
+ Autoproj::CmdLine.update_configuration
1666
1664
  Autoproj::CmdLine.load_configuration
1667
1665
  Autoproj::CmdLine.setup_all_package_directories
1668
1666
  Autoproj::CmdLine.finalize_package_setup
@@ -119,6 +119,12 @@ module Autoproj
119
119
  Autobuild.env_add_path(name, *value)
120
120
  end
121
121
 
122
+ # Requests that autoproj source the given shell script in its own env.sh
123
+ # script
124
+ def self.env_source_file(file)
125
+ Autobuild.env_source_file(file)
126
+ end
127
+
122
128
  # Representation of a VCS definition contained in a source.yml file or in
123
129
  # autoproj/manifest
124
130
  class VCSDefinition
@@ -495,6 +501,12 @@ module Autoproj
495
501
  # Create a PackageSet instance from its description as found in YAML
496
502
  # configuration files
497
503
  def self.from_spec(manifest, raw_spec, load_description)
504
+ if raw_spec.respond_to?(:to_str)
505
+ local_path = File.join(Autoproj.config_dir, raw_spec)
506
+ if File.directory?(local_path)
507
+ raw_spec = { :type => 'local', :url => local_path }
508
+ end
509
+ end
498
510
  spec = VCSDefinition.vcs_definition_to_hash(raw_spec)
499
511
  options, vcs_spec = Kernel.filter_options spec, :auto_imports => true
500
512
 
@@ -1782,17 +1794,21 @@ module Autoproj
1782
1794
  def load_package_manifest(pkg_name)
1783
1795
  pkg = packages.values.
1784
1796
  find { |pkg| pkg.autobuild.name == pkg_name }
1785
- package, source, file = pkg.autobuild, pkg.package_set, pkg.file
1797
+ package, package_set, file = pkg.autobuild, pkg.package_set, pkg.file
1786
1798
 
1787
1799
  if !pkg_name
1788
1800
  raise ArgumentError, "package #{pkg_name} is not defined"
1789
1801
  end
1790
1802
 
1791
- manifest_path = File.join(package.srcdir, "manifest.xml")
1792
- if !File.directory?(package.srcdir)
1793
- return
1794
- elsif !File.file?(manifest_path)
1795
- Autoproj.warn "#{package.name} from #{source.name} does not have a manifest"
1803
+ manifest_paths =
1804
+ [File.join(package_set.local_dir, "manifests", package.name + ".xml"), File.join(package.srcdir, "manifest.xml")]
1805
+ manifest_path = manifest_paths.find do |path|
1806
+ File.directory?(File.dirname(path)) &&
1807
+ File.file?(path)
1808
+ end
1809
+
1810
+ if !manifest_path
1811
+ Autoproj.warn "#{package.name} from #{package_set.name} does not have a manifest"
1796
1812
  return
1797
1813
  end
1798
1814
 
@@ -1809,10 +1825,10 @@ module Autoproj
1809
1825
  end
1810
1826
  rescue Autobuild::ConfigException => e
1811
1827
  raise ConfigError.new(manifest_path),
1812
- "manifest #{manifest_path} of #{package.name} from #{source.name} lists '#{name}' as dependency, which is listed in the layout of #{file} but has no autobuild definition", e.backtrace
1828
+ "manifest #{manifest_path} of #{package.name} from #{package_set.name} lists '#{name}' as dependency, which is listed in the layout of #{file} but has no autobuild definition", e.backtrace
1813
1829
  rescue ConfigError => e
1814
1830
  raise ConfigError.new(manifest_path),
1815
- "manifest #{manifest_path} of #{package.name} from #{source.name} lists '#{name}' as dependency, but it is neither a normal package nor an osdeps package. osdeps reports: #{e.message}", e.backtrace
1831
+ "manifest #{manifest_path} of #{package.name} from #{package_set.name} lists '#{name}' as dependency, but it is neither a normal package nor an osdeps package. osdeps reports: #{e.message}", e.backtrace
1816
1832
  end
1817
1833
  end
1818
1834
  end
@@ -587,7 +587,12 @@ fi
587
587
  gems = gems.dup
588
588
  gems.delete_if do |name, version|
589
589
  version_requirements = Gem::Requirement.new(version || '>= 0')
590
- installed = Gem.source_index.find_name(name, version_requirements)
590
+ installed =
591
+ if Gem.source_index.respond_to?(:find_by_name)
592
+ Gem.source_index.find_by_name(name, version_requirements)
593
+ else
594
+ Gem.source_index.find_name(name, version_requirements)
595
+ end
591
596
  if !installed.empty? && Autobuild.do_update
592
597
  # Look if we can update the package ...
593
598
  dep = Gem::Dependency.new(name, version_requirements)
@@ -1,4 +1,32 @@
1
1
  module Autoproj
2
+ # Match class for the query system.
3
+ #
4
+ # This class allows to create a query object based on a textual
5
+ # representation, and then match packages using this query object.
6
+ #
7
+ # The queries are of the form
8
+ #
9
+ # FIELD=VALUE:FIELD~VALUE:FIELD=VALUE
10
+ #
11
+ # The F=V form requires an exact match while F~V allows partial
12
+ # matches. The different matches are combined with AND (i.e. only packages
13
+ # matching all criterias will be returned)
14
+ #
15
+ # The following fields are allowed:
16
+ # * autobuild.name: the package name
17
+ # * autobuild.srcdir: the package source directory
18
+ # * autobuild.class.name: the package class
19
+ # * vcs.type: the VCS type (as used in the source.yml files)
20
+ # * vcs.url: the URL from the VCS. The exact semantic of it depends on the
21
+ # VCS type
22
+ # * package_set.name: the name of the package set that defines the package
23
+ #
24
+ # Some fields have shortcuts:
25
+ # * 'name' can be used instead of 'autobuild.name'
26
+ # * 'class' can be used instead of 'autobuild.class.name'
27
+ # * 'vcs' can be used instead of 'vcs.url'
28
+ # * 'package_set' can be used instead of 'package_set.name'
29
+ #
2
30
  class Query
3
31
  ALLOWED_FIELDS = [
4
32
  'autobuild.name',
@@ -9,8 +37,8 @@ module Autoproj
9
37
  'package_set.name'
10
38
  ]
11
39
  DEFAULT_FIELDS = {
40
+ 'name' => 'autobuild.name',
12
41
  'class' => 'autobuild.class.name',
13
- 'autobuild' => 'autobuild.name',
14
42
  'vcs' => 'vcs.url',
15
43
  'package_set' => 'package_set.name'
16
44
  }
@@ -24,11 +52,13 @@ module Autoproj
24
52
  attr_reader :fields
25
53
  attr_reader :value
26
54
  attr_predicate :use_dir_prefix?
55
+ attr_predicate :partial?
27
56
 
28
- def initialize(fields, value)
57
+ def initialize(fields, value, partial)
29
58
  @fields = fields
30
59
  @value = value
31
60
  @value_rx = Regexp.new(Regexp.quote(value), true)
61
+ @partial = partial
32
62
 
33
63
  directories = value.split('/')
34
64
  if !directories.empty?
@@ -47,13 +77,41 @@ module Autoproj
47
77
  end
48
78
  end
49
79
 
80
+ # Checks if +pkg+ matches the query
81
+ #
82
+ # Returns false if +pkg+ does not match the query and a true value
83
+ # otherwise.
84
+ #
85
+ # If the package matches, the returned value can be one of:
86
+ #
87
+ # EXACT:: this is an exact match
88
+ # PARTIAL::
89
+ # the expected value can be found in the package field. The
90
+ # match is done in a case-insensitive way
91
+ # DIR_PREFIX_STRONG::
92
+ # if the expected value contains '/' (directory
93
+ # marker), the package matches the following regular
94
+ # expression: /el\w+/el2\w+/el3$
95
+ # DIR_PREFIX_WEAK::
96
+ # if the expected value contains '/' (directory
97
+ # marker), the package matches the following regular
98
+ # expression: /el\w+/el2\w+/el3\w+
99
+ #
100
+ # If partial? is not set (i.e. if FIELD=VALUE was used), then only EXACT
101
+ # or false can be returned.
50
102
  def match(pkg)
51
103
  pkg_value = fields.inject(pkg) { |v, field_name| v.send(field_name) }
52
104
  pkg_value = pkg_value.to_s
53
105
 
54
106
  if pkg_value == value
55
107
  return EXACT
56
- elsif pkg_value =~ @value_rx
108
+ end
109
+
110
+ if !partial?
111
+ return
112
+ end
113
+
114
+ if pkg_value =~ @value_rx
57
115
  return PARTIAL
58
116
  end
59
117
 
@@ -67,8 +125,14 @@ module Autoproj
67
125
  end
68
126
  end
69
127
 
128
+ # Parse a single field in a query (i.e. a FIELD[=~]VALUE string)
70
129
  def self.parse(str)
71
130
  field, value = str.split('=')
131
+ if !value
132
+ partial = true
133
+ field, value = str.split('~')
134
+ end
135
+
72
136
  if DEFAULT_FIELDS[field]
73
137
  field = DEFAULT_FIELDS[field]
74
138
  end
@@ -79,15 +143,16 @@ module Autoproj
79
143
  end
80
144
 
81
145
  fields = field.split('.')
82
- new(fields, value)
146
+ new(fields, value, partial)
83
147
  end
84
148
 
149
+ # Parse a complete query
85
150
  def self.parse_query(query)
86
151
  query = query.split(':')
87
152
  query = query.map do |str|
88
- if str !~ /=/
89
- match_name = Query.parse("autobuild.name=#{str}")
90
- match_dir = Query.parse("autobuild.srcdir=#{str}")
153
+ if str !~ /[=~]/
154
+ match_name = Query.parse("autobuild.name~#{str}")
155
+ match_dir = Query.parse("autobuild.srcdir~#{str}")
91
156
  Or.new([match_name, match_dir])
92
157
  else
93
158
  Query.parse(str)
@@ -95,29 +160,31 @@ module Autoproj
95
160
  end
96
161
  And.new(query)
97
162
  end
98
- end
99
163
 
100
- class Or
101
- def initialize(submatches)
102
- @submatches = submatches
103
- end
104
- def match(pkg)
105
- @submatches.map { |m| m.match(pkg) }.compact.max
164
+ # Match object that combines multiple matches using a logical OR
165
+ class Or
166
+ def initialize(submatches)
167
+ @submatches = submatches
168
+ end
169
+ def match(pkg)
170
+ @submatches.map { |m| m.match(pkg) }.compact.max
171
+ end
106
172
  end
107
- end
108
173
 
109
- class And
110
- def initialize(submatches)
111
- @submatches = submatches
112
- end
113
- def match(pkg)
114
- matches = @submatches.map do |m|
115
- if p = m.match(pkg)
116
- p
117
- else return
174
+ # Match object that combines multiple matches using a logical AND
175
+ class And
176
+ def initialize(submatches)
177
+ @submatches = submatches
178
+ end
179
+ def match(pkg)
180
+ matches = @submatches.map do |m|
181
+ if p = m.match(pkg)
182
+ p
183
+ else return
184
+ end
118
185
  end
186
+ matches.min
119
187
  end
120
- matches.min
121
188
  end
122
189
  end
123
190
  end
@@ -126,37 +126,22 @@ module Autoproj
126
126
  File.join(Autoproj.root_dir, "env.sh")
127
127
  end
128
128
 
129
- File.open(filename, "w") do |io|
130
- variables = []
131
- Autobuild.environment.each do |name, value|
132
- variables << name
133
- shell_line = "#{name}=#{value.join(":")}"
134
- if Autoproj.env_inherit?(name)
135
- if value.empty?
136
- next
137
- else
138
- shell_line << ":$#{name}"
139
- end
129
+ shell_dir = File.expand_path(File.join("..", "..", "shell"), File.dirname(__FILE__))
130
+ if Autoproj.shell_helpers? && shell = ENV['SHELL']
131
+ shell_kind = File.basename(shell)
132
+ if shell_kind =~ /^\w+$/
133
+ shell_file = File.join(shell_dir, "autoproj_#{shell_kind}")
134
+ if File.exists?(shell_file)
135
+ Autoproj.progress
136
+ Autoproj.progress "autodetected the shell to be #{shell_kind}, sourcing autoproj shell helpers"
137
+ Autoproj.progress "add \"Autoproj.shell_helpers = false\" in autoproj/init.rb to disable"
138
+ Autobuild.env_source_file(shell_file)
140
139
  end
141
- io.puts shell_line
142
- end
143
- variables.each do |var|
144
- io.puts "export #{var}"
145
140
  end
141
+ end
146
142
 
147
- shell_dir = File.expand_path(File.join("..", "..", "shell"), File.dirname(__FILE__))
148
- if Autoproj.shell_helpers? && shell = ENV['SHELL']
149
- shell_kind = File.basename(shell)
150
- if shell_kind =~ /^\w+$/
151
- shell_file = File.join(shell_dir, "autoproj_#{shell_kind}")
152
- if File.exists?(shell_file)
153
- Autoproj.progress
154
- Autoproj.progress "autodetected the shell to be #{shell_kind}, sourcing autoproj shell helpers"
155
- Autoproj.progress "add \"Autoproj.shell_helpers = false\" in autoproj/init.rb to disable"
156
- io.puts "source \"#{shell_file}\""
157
- end
158
- end
159
- end
143
+ File.open(filename, "w") do |io|
144
+ Autobuild.export_env_sh(io)
160
145
  end
161
146
  end
162
147
 
@@ -1,3 +1,3 @@
1
1
  module Autoproj
2
- VERSION = "1.7.13"
2
+ VERSION = "1.7.14.rc1"
3
3
  end
data/shell/autoproj_bash CHANGED
@@ -1,6 +1,6 @@
1
1
  function acd {
2
2
  local pkg_path
3
- pkg_path=$(autoproj locate $1)
3
+ pkg_path=$(autoproj locate $1 | tail -1)
4
4
 
5
5
  if [ $? != 0 ]; then
6
6
  return 1
data/shell/autoproj_zsh CHANGED
@@ -1,6 +1,6 @@
1
1
  function acd {
2
2
  local pkg_path
3
- pkg_path=$(autoproj locate $1)
3
+ pkg_path=$(autoproj locate $1 | tail -1)
4
4
 
5
5
  if [ $? != 0 ]; then
6
6
  return 1
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autoproj
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
4
+ hash: 15424055
5
+ prerelease: 7
6
6
  segments:
7
7
  - 1
8
8
  - 7
9
- - 13
10
- version: 1.7.13
9
+ - 14
10
+ - rc
11
+ - 1
12
+ version: 1.7.14.rc1
11
13
  platform: ruby
12
14
  authors:
13
15
  - Sylvain Joyeux
@@ -15,7 +17,7 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2011-08-23 00:00:00 Z
20
+ date: 2011-10-11 00:00:00 Z
19
21
  dependencies:
20
22
  - !ruby/object:Gem::Dependency
21
23
  name: autobuild
@@ -135,14 +137,13 @@ dependencies:
135
137
  requirement: &id008 !ruby/object:Gem::Requirement
136
138
  none: false
137
139
  requirements:
138
- - - ">="
140
+ - - ~>
139
141
  - !ruby/object:Gem::Version
140
- hash: 47
142
+ hash: 27
141
143
  segments:
142
144
  - 2
143
- - 8
144
- - 0
145
- version: 2.8.0
145
+ - 12
146
+ version: "2.12"
146
147
  type: :development
147
148
  version_requirements: *id008
148
149
  description: |-
@@ -226,6 +227,7 @@ files:
226
227
  - test/data/test_manifest/autoproj/manifest
227
228
  - test/test_debian.rb
228
229
  - test/test_manifest.rb
230
+ - .gemtest
229
231
  homepage: http://doudou.github.com/autoproj
230
232
  licenses: []
231
233
 
@@ -247,16 +249,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
247
249
  required_rubygems_version: !ruby/object:Gem::Requirement
248
250
  none: false
249
251
  requirements:
250
- - - ">="
252
+ - - ">"
251
253
  - !ruby/object:Gem::Version
252
- hash: 3
254
+ hash: 25
253
255
  segments:
254
- - 0
255
- version: "0"
256
+ - 1
257
+ - 3
258
+ - 1
259
+ version: 1.3.1
256
260
  requirements: []
257
261
 
258
262
  rubyforge_project: autobuild
259
- rubygems_version: 1.7.2
263
+ rubygems_version: 1.8.10
260
264
  signing_key:
261
265
  specification_version: 3
262
266
  summary: Easy installation and management of robotics software