autoproj 1.7.14.rc2 → 1.7.14.rc4

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,6 +13,14 @@ parser = OptionParser.new do |opt|
13
13
  Finds packages that match query_string and displays information about them (one per line)
14
14
  By default, only the package name is displayed. It can be customized with the --format option
15
15
 
16
+ QUERY KEYS
17
+ autobuild.name: the package name
18
+ autobuild.srcdir: the package source directory
19
+ autobuild.class.name: the package class
20
+ vcs.type: the VCS type (as used in the source.yml files)
21
+ vcs.url: the URL from the VCS. The exact semantic of it depends on the VCS type
22
+ package_set.name: the name of the package set that defines the package
23
+
16
24
  FORMAT SPECIFICATION
17
25
 
18
26
  The format is a string in which special values can be expanded using a $VARNAME format. The following variables are accepted:
@@ -116,8 +116,10 @@ module Autoproj
116
116
  attr_reader :aliases
117
117
  attr_accessor :force_osdeps
118
118
  attr_accessor :gem_with_prerelease
119
+ attr_accessor :gem_doc
119
120
  end
120
121
  @aliases = Hash.new
122
+ @gem_doc = false
121
123
 
122
124
  attr_writer :silent
123
125
  def silent?; @silent end
@@ -474,12 +476,30 @@ fi
474
476
 
475
477
  # If data is a hash, it means we have to check the OS version as well
476
478
  if data.kind_of?(Hash)
477
- version_entry = data.find do |version_list, _|
478
- version_list.to_s.split(',').
479
- map(&:downcase).
480
- any? do |v|
481
- os_versions.any? { |osv| Regexp.new(v) =~ osv }
479
+ # Look in +data+ for specific version. We look, in order, in the
480
+ # os_versions field (detected OS versions), and return the first
481
+ # matching entry
482
+ version_entry = nil
483
+ # First, look for an exact match
484
+ found = os_versions.find do |os_ver|
485
+ version_entry = data.find do |version_list, _|
486
+ version_list.to_s.split(',').
487
+ map(&:downcase).
488
+ any? { |v| v == os_ver }
489
+ end
490
+ end
491
+ if !found
492
+ # Then relax the matching ...
493
+ found = os_versions.find do |os_ver|
494
+ version_entry = data.find do |version_list, _|
495
+ version_list.to_s.split(',').
496
+ map(&:downcase).
497
+ any? { |v| Regexp.new(v) =~ os_ver }
482
498
  end
499
+ end
500
+ end
501
+ if Autoproj.verbose
502
+ Autoproj.progress "selected OS version #{found} for osdep #{name}: #{version_entry.inspect}"
483
503
  end
484
504
 
485
505
  if !version_entry
@@ -499,7 +519,7 @@ fi
499
519
  # Single package
500
520
  return [PACKAGES, [data.to_str]]
501
521
  else
502
- raise ConfigError.new, "invalid package specificiation #{data} in #{source_of(name)}"
522
+ raise ConfigError.new, "invalid package specification #{data} in #{source_of(name)}"
503
523
  end
504
524
  end
505
525
 
@@ -1026,6 +1046,10 @@ So, what do you want ? (all, ruby, os or none)
1026
1046
  guess_gem_program
1027
1047
 
1028
1048
  base_cmdline = [Autobuild.tool('gem'), 'install']
1049
+ if !OSDependencies.gem_doc
1050
+ base_cmdline << '--no-rdoc' << '--no-ri'
1051
+ end
1052
+
1029
1053
  if Autoproj::OSDependencies.gem_with_prerelease
1030
1054
  base_cmdline << "--prerelease"
1031
1055
  end
@@ -1534,7 +1558,6 @@ libxslt:
1534
1558
  arch: libxslt
1535
1559
  gentoo: dev-libs/libxslt
1536
1560
  debian,ubuntu: libxslt1-dev
1537
- rdoc: gem
1538
1561
 
1539
1562
  EODEFS
1540
1563
 
@@ -1565,7 +1588,7 @@ rescue Autoproj::ConfigError => e
1565
1588
  end
1566
1589
 
1567
1590
  # Now try to find out the name of the gem binary
1568
- PACKAGES = %w{rdoc autobuild libxml2 libxslt zlib build-essential lsb_release}
1591
+ PACKAGES = %w{autobuild libxml2 libxslt zlib build-essential lsb_release}
1569
1592
 
1570
1593
  ENV['RUBYOPT'] = "-rubygems"
1571
1594
  require 'rubygems'
@@ -98,77 +98,16 @@ module Autobuild
98
98
  def depends_on(name)
99
99
  if Autoproj::CmdLine.ignore_dependencies?
100
100
  return
101
- elsif Autoproj.manifest.ignored?(name)
102
- return
103
101
  end
104
102
 
105
103
  @os_packages ||= Set.new
106
- @ignored_os_dependencies ||= Set.new
107
-
108
- if @os_packages.include?(name) || @ignored_os_dependencies.include?(name)
109
- return
110
- end
111
-
112
- explicit_selection = Autoproj.manifest.explicitly_selected_package?(name)
113
- osdeps_availability = Autoproj.osdeps.availability_of(name)
114
- available_as_source = Autobuild::Package[name]
115
-
116
- osdeps_overrides = Autoproj.manifest.osdeps_overrides[name]
117
- if osdeps_overrides
118
- source_packages = osdeps_overrides[:packages]
119
- if source_packages.empty?
120
- source_packages << name
121
- end
122
- force_source_usage = osdeps_overrides[:force]
123
- available_as_source = true
124
- end
125
-
126
- # Prefer OS packages to source packages
127
- if force_source_usage && !source_packages.any? { |pkg_name| Autoproj.manifest.excluded?(pkg_name) }
128
- source_packages.each do |pkg_name|
129
- __depends_on__(pkg_name)
104
+ Autoproj.manifest.resolve_package_name(name).each do |type, pkg|
105
+ if type == :osdeps
106
+ @os_packages << pkg
107
+ elsif type == :package
108
+ __depends_on__(pkg)
109
+ else raise Autoproj::InternalError, "expected package type to be either :osdeps or :package, got #{type.inspect}"
130
110
  end
131
- elsif !explicit_selection
132
- if osdeps_availability == Autoproj::OSDependencies::AVAILABLE
133
- @os_packages << name
134
- return
135
- elsif osdeps_availability == Autoproj::OSDependencies::IGNORE
136
- return
137
- end
138
-
139
- if osdeps_availability == Autoproj::OSDependencies::UNKNOWN_OS
140
- # If we can't handle that OS, but other OSes have a
141
- # definition for it, we assume that it can be installed as
142
- # an external package. However, if it is also available as a
143
- # source package, prompt the user
144
- if !available_as_source || explicit_osdeps_selection(name)
145
- @os_packages << name
146
- return
147
- end
148
- end
149
-
150
-
151
- if !available_as_source
152
- begin
153
- # Call osdeps to get a proper error message
154
- osdeps, gems = Autoproj.osdeps.partition_packages([name].to_set, name => [self.name])
155
- Autoproj.osdeps.resolve_os_dependencies(osdeps)
156
- rescue Autoproj::ConfigError => e
157
- if osdeps_availability != Autoproj::OSDependencies::NO_PACKAGE && !Autoproj.osdeps.installs_os_packages?
158
- Autoproj.warn "in #{File.join(srcdir, 'manifest.xml')}: #{e.message}"
159
- Autoproj.warn "this osdeps dependency is simply ignored as you asked autoproj to not install osdeps packages"
160
- @ignored_os_dependencies << name
161
- # We are not asked to install OS packages, just ignore
162
- return
163
- end
164
- raise
165
- end
166
- # Should never reach further than that
167
- end
168
- __depends_on__(name) # to get the error message
169
- else
170
- # Normal dependency
171
- __depends_on__(name)
172
111
  end
173
112
  end
174
113
 
@@ -32,8 +32,6 @@ ruby19:
32
32
  gem:
33
33
  - rake
34
34
 
35
- rdoc: gem
36
-
37
35
  build-essential:
38
36
  debian,ubuntu: build-essential
39
37
  gentoo:
@@ -53,7 +53,6 @@ module Autoproj
53
53
  if Autobuild::Importer.respond_to?(:fallback) && options[:fallback_to_http]
54
54
  Autobuild::Importer.fallback do |package, importer|
55
55
  root_rx = /^(?:http:\/\/git\.|git:\/\/|git@)#{Regexp.quote(base_url)}:?/
56
-
57
56
  if importer.kind_of?(Autobuild::Git) && importer.repository =~ root_rx && importer.repository !~ /^http/
58
57
  Autoproj.warn "import from #{importer.repository} failed, falling back to using http for all packages on #{base_url}"
59
58
 
@@ -1057,6 +1057,7 @@ module Autoproj
1057
1057
  @moved_packages = Hash.new
1058
1058
  @osdeps_overrides = Hash.new
1059
1059
  @metapackages = Hash.new
1060
+ @ignored_os_dependencies = Set.new
1060
1061
 
1061
1062
  @constant_definitions = Hash.new
1062
1063
  if Autoproj.has_config_key?('manifest_source')
@@ -1595,6 +1596,117 @@ module Autoproj
1595
1596
  set
1596
1597
  end
1597
1598
 
1599
+ # Exception raised when a caller requires to use an excluded package
1600
+ class ExcludedPackage < ConfigError
1601
+ attr_reader :name
1602
+ def initialize(name)
1603
+ @name = name
1604
+ end
1605
+ end
1606
+
1607
+ # Resolves the given +name+, where +name+ can either be the name of a
1608
+ # source or the name of a package.
1609
+ #
1610
+ # The returned value is a list of pairs:
1611
+ #
1612
+ # [type, package_name]
1613
+ #
1614
+ # where +type+ can either be :package or :osdeps (as symbols)
1615
+ #
1616
+ # The returned array can be empty if +name+ is an ignored package
1617
+ def resolve_package_name(name)
1618
+ if pkg_set = find_metapackage(name)
1619
+ if !pkg_set
1620
+ raise ConfigError.new, "#{name} is neither a package nor a package set name. Packages in autoproj must be declared in an autobuild file."
1621
+ end
1622
+ pkg_names = pkg_set.each_package.map(&:name)
1623
+ else
1624
+ pkg_names = [name]
1625
+ end
1626
+
1627
+ result = []
1628
+ pkg_names.each do |pkg|
1629
+ result.concat(resolve_single_package_name(pkg))
1630
+ end
1631
+ result
1632
+ end
1633
+
1634
+ # Resolves a package name, where +name+ cannot be resolved as a
1635
+ # metapackage
1636
+ #
1637
+ # This is a helper method for #resolve_package_name. Do not use
1638
+ # directly
1639
+ def resolve_single_package_name(name) # :nodoc:
1640
+ if ignored?(name)
1641
+ return []
1642
+ end
1643
+
1644
+ explicit_selection = explicitly_selected_package?(name)
1645
+ osdeps_availability = Autoproj.osdeps.availability_of(name)
1646
+ available_as_source = Autobuild::Package[name]
1647
+
1648
+ osdeps_overrides = Autoproj.manifest.osdeps_overrides[name]
1649
+ if osdeps_overrides
1650
+ source_packages = osdeps_overrides[:packages].dup
1651
+ force_source_usage = osdeps_overrides[:force]
1652
+ begin
1653
+ source_packages = source_packages.inject([]) do |result, src_pkg_name|
1654
+ result.concat(resolve_package_name(src_pkg_name))
1655
+ end.uniq
1656
+ available_as_source = true
1657
+ rescue ExcludedPackage
1658
+ force_source_usage = false
1659
+ available_as_source = false
1660
+ end
1661
+
1662
+ if source_packages.empty?
1663
+ source_packages << [:package, name]
1664
+ end
1665
+ end
1666
+
1667
+ if force_source_usage
1668
+ return source_packages
1669
+ elsif !explicit_selection
1670
+ if osdeps_availability == Autoproj::OSDependencies::AVAILABLE
1671
+ return [[:osdeps, name]]
1672
+ elsif osdeps_availability == Autoproj::OSDependencies::IGNORE
1673
+ return []
1674
+ end
1675
+
1676
+ if osdeps_availability == Autoproj::OSDependencies::UNKNOWN_OS
1677
+ # If we can't handle that OS, but other OSes have a
1678
+ # definition for it, we assume that it can be installed as
1679
+ # an external package. However, if it is also available as a
1680
+ # source package, prompt the user
1681
+ if !available_as_source || explicit_osdeps_selection(name)
1682
+ return [[:osdeps, name]]
1683
+ end
1684
+ end
1685
+
1686
+ # No source, no osdeps. Call osdeps again, but this time to get
1687
+ # a proper error message.
1688
+ if !available_as_source
1689
+ begin
1690
+ osdeps, gems = Autoproj.osdeps.partition_packages([name].to_set, name => [self.name])
1691
+ Autoproj.osdeps.resolve_os_dependencies(osdeps)
1692
+ rescue Autoproj::ConfigError => e
1693
+ if osdeps_availability != Autoproj::OSDependencies::NO_PACKAGE && !Autoproj.osdeps.installs_os_packages?
1694
+ Autoproj.warn "in #{File.join(srcdir, 'manifest.xml')}: #{e.message}"
1695
+ Autoproj.warn "this osdeps dependency is simply ignored as you asked autoproj to not install osdeps packages"
1696
+ @ignored_os_dependencies << name
1697
+ # We are not asked to install OS packages, just ignore
1698
+ return []
1699
+ end
1700
+ raise
1701
+ end
1702
+ # Should never reach further than that
1703
+ end
1704
+ elsif !available_as_source
1705
+ raise ConfigError, "cannot resolve #{name}: it is not a package, not a metapackage and not an osdeps"
1706
+ end
1707
+ return [[:package, name]]
1708
+ end
1709
+
1598
1710
  # +name+ can either be the name of a source or the name of a package. In
1599
1711
  # the first case, we return all packages defined by that source. In the
1600
1712
  # latter case, we return the singleton array [name]
@@ -1933,16 +2045,16 @@ module Autoproj
1933
2045
  # First, remove packages that are directly referenced by name or by
1934
2046
  # package set names
1935
2047
  selection.each do |sel|
1936
- sel = Regexp.new(Regexp.quote(sel))
2048
+ match_pkg_name = Regexp.new(Regexp.quote(sel))
1937
2049
 
1938
2050
  packages = all_layout_packages.
1939
- find_all { |pkg_name| pkg_name =~ sel }.
2051
+ find_all { |pkg_name| pkg_name =~ match_pkg_name }.
1940
2052
  to_set
1941
2053
  matches[sel] = packages
1942
2054
  expanded_packages |= packages
1943
2055
 
1944
2056
  each_metapackage do |pkg|
1945
- if pkg.name =~ sel
2057
+ if pkg.name =~ match_pkg_name
1946
2058
  packages = resolve_package_set(pkg.name).to_set
1947
2059
  packages = (packages & all_layout_packages)
1948
2060
  matches[sel] |= packages
@@ -17,8 +17,10 @@ module Autoproj
17
17
  attr_reader :aliases
18
18
  attr_accessor :force_osdeps
19
19
  attr_accessor :gem_with_prerelease
20
+ attr_accessor :gem_doc
20
21
  end
21
22
  @aliases = Hash.new
23
+ @gem_doc = false
22
24
 
23
25
  attr_writer :silent
24
26
  def silent?; @silent end
@@ -375,12 +377,30 @@ fi
375
377
 
376
378
  # If data is a hash, it means we have to check the OS version as well
377
379
  if data.kind_of?(Hash)
378
- version_entry = data.find do |version_list, _|
379
- version_list.to_s.split(',').
380
- map(&:downcase).
381
- any? do |v|
382
- os_versions.any? { |osv| Regexp.new(v) =~ osv }
380
+ # Look in +data+ for specific version. We look, in order, in the
381
+ # os_versions field (detected OS versions), and return the first
382
+ # matching entry
383
+ version_entry = nil
384
+ # First, look for an exact match
385
+ found = os_versions.find do |os_ver|
386
+ version_entry = data.find do |version_list, _|
387
+ version_list.to_s.split(',').
388
+ map(&:downcase).
389
+ any? { |v| v == os_ver }
390
+ end
391
+ end
392
+ if !found
393
+ # Then relax the matching ...
394
+ found = os_versions.find do |os_ver|
395
+ version_entry = data.find do |version_list, _|
396
+ version_list.to_s.split(',').
397
+ map(&:downcase).
398
+ any? { |v| Regexp.new(v) =~ os_ver }
383
399
  end
400
+ end
401
+ end
402
+ if Autoproj.verbose
403
+ Autoproj.progress "selected OS version #{found} for osdep #{name}: #{version_entry.inspect}"
384
404
  end
385
405
 
386
406
  if !version_entry
@@ -400,7 +420,7 @@ fi
400
420
  # Single package
401
421
  return [PACKAGES, [data.to_str]]
402
422
  else
403
- raise ConfigError.new, "invalid package specificiation #{data} in #{source_of(name)}"
423
+ raise ConfigError.new, "invalid package specification #{data} in #{source_of(name)}"
404
424
  end
405
425
  end
406
426
 
@@ -927,6 +947,10 @@ So, what do you want ? (all, ruby, os or none)
927
947
  guess_gem_program
928
948
 
929
949
  base_cmdline = [Autobuild.tool('gem'), 'install']
950
+ if !OSDependencies.gem_doc
951
+ base_cmdline << '--no-rdoc' << '--no-ri'
952
+ end
953
+
930
954
  if Autoproj::OSDependencies.gem_with_prerelease
931
955
  base_cmdline << "--prerelease"
932
956
  end
@@ -1,3 +1,3 @@
1
1
  module Autoproj
2
- VERSION = "1.7.14.rc2"
2
+ VERSION = "1.7.14.rc4"
3
3
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autoproj
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15424049
4
+ hash: 15424061
5
5
  prerelease: 7
6
6
  segments:
7
7
  - 1
8
8
  - 7
9
9
  - 14
10
10
  - rc
11
- - 2
12
- version: 1.7.14.rc2
11
+ - 4
12
+ version: 1.7.14.rc4
13
13
  platform: ruby
14
14
  authors:
15
15
  - Sylvain Joyeux
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-10-12 00:00:00 Z
20
+ date: 2011-10-24 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: autobuild