php-composer 0.4.5 → 1.0.0.pre.alpha11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rbenv-gemsets +1 -0
- data/.rubocop.yml +131 -188
- data/.ruby-version +1 -0
- data/Gemfile +0 -9
- data/Rakefile +11 -0
- data/lib/composer.rb +52 -49
- data/lib/composer/json/json_file.rb +110 -83
- data/lib/composer/json/json_formatter.rb +43 -77
- data/lib/composer/json/{json_validaton_error.rb → json_validation_error.rb} +6 -2
- data/lib/composer/package/alias_package.rb +77 -61
- data/lib/composer/package/complete_package.rb +88 -18
- data/lib/composer/package/dumper/hash_dumper.rb +50 -118
- data/lib/composer/package/dumper/hash_dumper/complete_package_attribute_dumpers.rb +47 -0
- data/lib/composer/package/dumper/hash_dumper/package_attribute_dumpers.rb +145 -0
- data/lib/composer/package/dumper/hash_dumper/root_package_attribute_dumpers.rb +24 -0
- data/lib/composer/package/link.rb +15 -5
- data/lib/composer/package/loader/hash_loader.rb +92 -228
- data/lib/composer/package/loader/hash_loader/complete_package_attribute_loaders.rb +83 -0
- data/lib/composer/package/loader/hash_loader/package_attribute_loaders.rb +181 -0
- data/lib/composer/package/loader/hash_loader/root_package_attribute_loaders.rb +32 -0
- data/lib/composer/package/loader/json_loader.rb +7 -9
- data/lib/composer/package/package.rb +611 -43
- data/lib/composer/package/root_alias_package.rb +186 -15
- data/lib/composer/package/root_package.rb +12 -4
- data/lib/composer/package/version/version_parser.rb +16 -532
- data/lib/composer/package/version/version_selector.rb +127 -68
- data/lib/composer/repository/base_repository.rb +46 -3
- data/lib/composer/repository/composite_repository.rb +4 -4
- data/lib/composer/repository/filesystem_repository.rb +15 -8
- data/lib/composer/repository/hash_repository.rb +62 -45
- data/lib/composer/repository/writeable_hash_repository.rb +5 -5
- data/lib/composer/util/composer_mirror.rb +76 -0
- data/php-composer.gemspec +14 -8
- data/resources/composer-schema.json +12 -0
- metadata +117 -16
- data/lib/composer/error.rb +0 -8
- data/lib/composer/package/base_package.rb +0 -130
- data/lib/composer/package/link_constraint/base_constraint.rb +0 -36
- data/lib/composer/package/link_constraint/empty_constraint.rb +0 -35
- data/lib/composer/package/link_constraint/multi_constraint.rb +0 -67
- data/lib/composer/package/link_constraint/specific_constraint.rb +0 -41
- data/lib/composer/package/link_constraint/version_constraint.rb +0 -221
- data/lib/composer/version.rb +0 -3
@@ -1,17 +1,21 @@
|
|
1
|
-
|
1
|
+
##
|
2
2
|
# This file was ported to ruby from Composer php source code file.
|
3
|
-
#
|
3
|
+
#
|
4
|
+
# Original Source: Composer\Package\Version\VersionSelector.php
|
5
|
+
# Ref SHA: 966a9827382b59064255579f524e3904527abdbe
|
4
6
|
#
|
5
7
|
# (c) Nils Adermann <naderman@naderman.de>
|
6
8
|
# Jordi Boggiano <j.boggiano@seld.be>
|
7
9
|
#
|
8
10
|
# For the full copyright and license information, please view the LICENSE
|
9
11
|
# file that was distributed with this source code.
|
10
|
-
|
12
|
+
##
|
11
13
|
|
12
14
|
module Composer
|
13
15
|
module Package
|
14
16
|
module Version
|
17
|
+
|
18
|
+
##
|
15
19
|
# Selects the best possible version for a package
|
16
20
|
#
|
17
21
|
# PHP Authors:
|
@@ -19,87 +23,142 @@ module Composer
|
|
19
23
|
#
|
20
24
|
# Ruby Authors:
|
21
25
|
# Ioannis Kappas <ikappas@devworks.gr>
|
26
|
+
##
|
22
27
|
class VersionSelector
|
23
28
|
|
24
|
-
|
25
|
-
|
26
|
-
|
29
|
+
def initialize(pool)
|
30
|
+
@pool = pool
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Given a package name and optional version, returns the latest PackageInterface
|
35
|
+
# that matches.
|
36
|
+
#
|
37
|
+
# @param _package_name string
|
38
|
+
# @param _target_pkg_version string
|
39
|
+
# @param _target_php_version string
|
40
|
+
# @param _preferred_stability string
|
41
|
+
#
|
42
|
+
# @return Package|bool
|
43
|
+
##
|
44
|
+
def find_best_candidate(_package_name, _target_pkg_version = nil, _target_php_version = nil, _preferred_stability = 'stable')
|
27
45
|
|
46
|
+
raise NotImplementedError
|
28
47
|
|
29
|
-
#
|
30
|
-
#
|
48
|
+
# constraint = target_pkg_version ? parser.parse_constraints(target_pkg_version) : nil
|
49
|
+
# candidates = @pool.what_provides(package_name.downcase, constraint, true)
|
31
50
|
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
51
|
+
# if target_php_version
|
52
|
+
# php_constraint = ::Composer::Semver::Constraint::Constraint.new('==', parser.normalize(target_php_version))
|
53
|
+
# candidates = candidates.select do |pkg|
|
54
|
+
# requires = pkg.requires
|
55
|
+
# return ! requires['php'].nil? || requires['php'].constraint.matches(php_constraint)
|
56
|
+
# end
|
57
|
+
# end
|
39
58
|
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
59
|
+
# return false unless candidates
|
60
|
+
#
|
61
|
+
# # select highest version if we have many
|
62
|
+
# package = reset(candidates)
|
63
|
+
# min_priority = ::Composer::Package::Package::stabilities[preferred_stability]
|
64
|
+
# candidates.each do |candidate|
|
65
|
+
# candidate_priority = candidate.stability_priority
|
66
|
+
# current_priority = package.stability_priority
|
67
|
+
#
|
68
|
+
# # candidate is less stable than our preferred stability, and we have a package that is more stable than it, so we skip it
|
69
|
+
# if min_priority < candidate_priority && current_priority < candidate_priority
|
70
|
+
# continue
|
71
|
+
# end
|
72
|
+
# # candidate is more stable than our preferred stability, and current package is less stable than preferred stability, then we select the candidate always
|
73
|
+
# if min_priority >= candidate_priority && min_priority < current_priority
|
74
|
+
# package = candidate
|
75
|
+
# continue
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# # select highest version of the two
|
79
|
+
# if version_compare(package.version, candidate.version, '<')
|
80
|
+
# package = candidate
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# package
|
85
|
+
end
|
47
86
|
|
48
|
-
|
49
|
-
|
87
|
+
##
|
88
|
+
# Given a concrete version, this returns a ~ constraint (when possible)
|
89
|
+
# that should be used, for example, in composer.json.
|
90
|
+
#
|
91
|
+
# For example:
|
92
|
+
# * 1.2.1 -> ~1.2
|
93
|
+
# * 1.2 -> ~1.2
|
94
|
+
# * v3.2.1 -> ~3.2
|
95
|
+
# * 2.0-beta.1 -> ~2.0@beta
|
96
|
+
# * dev-master -> ~2.1@dev (dev version with alias)
|
97
|
+
# * dev-master -> dev-master (dev versions are untouched)
|
98
|
+
#
|
99
|
+
# @param package Package
|
100
|
+
# @return string
|
101
|
+
##
|
102
|
+
def find_recommended_require_version(package)
|
103
|
+
version = package.version
|
104
|
+
unless package.is_dev?
|
105
|
+
return transform_version(version, package.pretty_version, package.stability)
|
106
|
+
end
|
50
107
|
|
51
|
-
|
52
|
-
|
53
|
-
extra = "#{match[1]}.0"
|
54
|
-
extra.gsub!('.9999999', '.0')
|
55
|
-
return transform_version(extra, extra, 'dev')
|
56
|
-
end
|
57
|
-
end
|
108
|
+
loader = ::Composer::Package::Loader::HashLoader.new(parser)
|
109
|
+
dumper = ::Composer::Package::Dumper::HashDumper.new
|
58
110
|
|
59
|
-
|
111
|
+
extra = loader.get_branch_alias(dumper.dump(package))
|
112
|
+
if extra =~ /^(\d+\.\d+\.\d+)(\.9999999)-dev$/
|
113
|
+
extra = "#{$1}.0"
|
114
|
+
extra.gsub!('.9999999', '.0')
|
115
|
+
return transform_version(extra, extra, 'dev')
|
60
116
|
end
|
61
117
|
|
62
|
-
|
63
|
-
|
64
|
-
def transform_version(version, pretty_version, stability)
|
65
|
-
# attempt to transform 2.1.1 to 2.1
|
66
|
-
# this allows you to upgrade through minor versions
|
67
|
-
semantic_version_parts = version.split('.')
|
68
|
-
op = '~'
|
69
|
-
|
70
|
-
# check to see if we have a semver-looking version
|
71
|
-
if semantic_version_parts.length == 4 && /^0\D?/.match(semantic_version_parts[3])
|
72
|
-
# remove the last parts (i.e. the patch version number and any extra)
|
73
|
-
if semantic_version_parts[0] === '0'
|
74
|
-
if semantic_version_parts[1] === '0'
|
75
|
-
semantic_version_parts[3] = '*'
|
76
|
-
else
|
77
|
-
semantic_version_parts[2] = '*'
|
78
|
-
semantic_version_parts.delete_at(3)
|
79
|
-
end
|
80
|
-
op = ''
|
81
|
-
else
|
82
|
-
semantic_version_parts.delete_at(3)
|
83
|
-
semantic_version_parts.delete_at(2)
|
84
|
-
end
|
85
|
-
version = semantic_version_parts.join('.')
|
86
|
-
else
|
87
|
-
return pretty_version
|
88
|
-
end
|
118
|
+
package.pretty_version
|
119
|
+
end
|
89
120
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
121
|
+
private
|
122
|
+
|
123
|
+
def transform_version(version, pretty_version, stability)
|
124
|
+
# attempt to transform 2.1.1 to 2.1
|
125
|
+
# this allows you to upgrade through minor versions
|
126
|
+
semantic_version_parts = version.split('.')
|
127
|
+
op = '~'
|
94
128
|
|
95
|
-
|
96
|
-
|
129
|
+
# check to see if we have a semver-looking version
|
130
|
+
if semantic_version_parts.length == 4 && /^0\D?/.match(semantic_version_parts[3])
|
131
|
+
# remove the last parts (i.e. the patch version number and any extra)
|
132
|
+
if semantic_version_parts[0] === '0'
|
133
|
+
if semantic_version_parts[1] === '0'
|
134
|
+
semantic_version_parts[3] = '*'
|
135
|
+
else
|
136
|
+
semantic_version_parts[2] = '*'
|
137
|
+
semantic_version_parts.delete_at(3)
|
138
|
+
end
|
139
|
+
op = ''
|
140
|
+
else
|
141
|
+
semantic_version_parts.delete_at(3)
|
142
|
+
semantic_version_parts.delete_at(2)
|
143
|
+
end
|
144
|
+
version = semantic_version_parts.join('.')
|
145
|
+
else
|
146
|
+
return pretty_version
|
97
147
|
end
|
98
148
|
|
99
|
-
|
100
|
-
|
101
|
-
|
149
|
+
# append stability flag if not default
|
150
|
+
if stability != 'stable'
|
151
|
+
version << "@#{stability}"
|
102
152
|
end
|
153
|
+
|
154
|
+
# 2.1 -> ~2.1
|
155
|
+
op + version
|
156
|
+
end
|
157
|
+
|
158
|
+
def parser
|
159
|
+
@parser ||= ::Composer::Semver::VersionParser.new
|
160
|
+
end
|
161
|
+
|
103
162
|
end
|
104
163
|
end
|
105
164
|
end
|
@@ -24,22 +24,65 @@ module Composer
|
|
24
24
|
SEARCH_FULLTEXT = 0
|
25
25
|
SEARCH_NAME = 1
|
26
26
|
|
27
|
-
|
27
|
+
##
|
28
|
+
# Determine whether the specified package is registered (installed).
|
29
|
+
#
|
30
|
+
# @param package ::Composer::Package::Package
|
31
|
+
# The package to check for.
|
32
|
+
# @return bool
|
33
|
+
# True if the package is registered; Otherwise false.
|
34
|
+
#
|
35
|
+
def package?(package)
|
28
36
|
# implement inside child
|
29
37
|
end
|
30
38
|
|
31
|
-
|
39
|
+
##
|
40
|
+
# Searches for the first match of a package by name and version.
|
41
|
+
#
|
42
|
+
# @param name string
|
43
|
+
# The package name.
|
44
|
+
# @param constraint string|::Composer::Semver::Constraint::Constraint
|
45
|
+
# The package version or version constraint to match against
|
46
|
+
#
|
47
|
+
# @return PackageInterface|nil
|
48
|
+
#
|
49
|
+
def find_package(name, constraint)
|
32
50
|
# implement inside child
|
33
51
|
end
|
34
52
|
|
35
|
-
|
53
|
+
##
|
54
|
+
# Searches for all packages matching a name and optionally a version.
|
55
|
+
#
|
56
|
+
# @param name string
|
57
|
+
# The package name.
|
58
|
+
# @param constraint string|::Composer::Semver::Constraint::Constraint
|
59
|
+
# Optional. The package version or version constraint to match against.
|
60
|
+
#
|
61
|
+
# @return ::Composer::Package::Package[]
|
62
|
+
##
|
63
|
+
def find_packages(name, constraint = nil)
|
36
64
|
# implement inside child
|
37
65
|
end
|
38
66
|
|
67
|
+
##
|
68
|
+
# Returns list of registered packages.
|
69
|
+
#
|
70
|
+
# @return ::Composer::Package::Package[]
|
71
|
+
##
|
39
72
|
def packages
|
40
73
|
# implement inside child
|
41
74
|
end
|
42
75
|
|
76
|
+
##
|
77
|
+
# Searches the repository for packages containing the query
|
78
|
+
#
|
79
|
+
# @param query string
|
80
|
+
# The search query
|
81
|
+
# @param mode integer
|
82
|
+
# A set of SEARCH_* constants to search on, implementations should do a best effort only.
|
83
|
+
#
|
84
|
+
# @return hash[] an array of hash { 'name' => '...', 'description' => '...')
|
85
|
+
#
|
43
86
|
def search(query, mode = 0)
|
44
87
|
# implement inside child
|
45
88
|
end
|
@@ -18,7 +18,7 @@ module Composer
|
|
18
18
|
#
|
19
19
|
# Ruby Authors:
|
20
20
|
# Ioannis Kappas <ikappas@devworks.gr>
|
21
|
-
class CompositeRepository < Composer::Repository::BaseRepository
|
21
|
+
class CompositeRepository < ::Composer::Repository::BaseRepository
|
22
22
|
# Initializes filesystem repository.
|
23
23
|
# @param [Array] repositories An array of repositories.
|
24
24
|
def initialize(repositories)
|
@@ -114,17 +114,17 @@ module Composer
|
|
114
114
|
raise ArgumentError,
|
115
115
|
'repository must be specified'
|
116
116
|
end
|
117
|
-
unless repository.is_a?(Composer::Repository::BaseRepository)
|
117
|
+
unless repository.is_a?(::Composer::Repository::BaseRepository)
|
118
118
|
raise TypeError,
|
119
119
|
'repository type must be a \
|
120
120
|
Composer::Repository::BaseRepository or superclass'
|
121
121
|
end
|
122
|
-
if repository.instance_of?(Composer::Repository::CompositeRepository)
|
122
|
+
if repository.instance_of?(::Composer::Repository::CompositeRepository)
|
123
123
|
repository.repositories.each do |repo|
|
124
124
|
add_repository(repo)
|
125
125
|
end
|
126
126
|
else
|
127
|
-
|
127
|
+
@repositories.push(repository)
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
@@ -11,6 +11,8 @@
|
|
11
11
|
|
12
12
|
module Composer
|
13
13
|
module Repository
|
14
|
+
|
15
|
+
##
|
14
16
|
# Filesystem repository.
|
15
17
|
#
|
16
18
|
# PHP Authors:
|
@@ -19,19 +21,24 @@ module Composer
|
|
19
21
|
#
|
20
22
|
# Ruby Authors:
|
21
23
|
# Ioannis Kappas <ikappas@devworks.gr>
|
22
|
-
|
24
|
+
##
|
25
|
+
class FilesystemRepository < ::Composer::Repository::WritableHashRepository
|
23
26
|
|
27
|
+
##
|
24
28
|
# Initializes filesystem repository.
|
25
|
-
#
|
29
|
+
#
|
30
|
+
# @param repository_file Composer::Json::JsonFile
|
31
|
+
# The repository json file
|
32
|
+
##
|
26
33
|
def initialize(repository_file)
|
27
34
|
unless repository_file
|
28
35
|
raise ArgumentError,
|
29
36
|
'repository_file must be specified'
|
30
37
|
end
|
31
|
-
unless repository_file.is_a?(Composer::Json::JsonFile)
|
38
|
+
unless repository_file.is_a?(::Composer::Json::JsonFile)
|
32
39
|
raise TypeError,
|
33
|
-
'repository_file type must be a \
|
34
|
-
Composer::Json::JsonFile or superclass'
|
40
|
+
'repository_file type must be a' \
|
41
|
+
'Composer::Json::JsonFile or superclass'
|
35
42
|
end
|
36
43
|
super([])
|
37
44
|
@file = repository_file
|
@@ -45,7 +52,7 @@ module Composer
|
|
45
52
|
# Writes writable repository.
|
46
53
|
def write
|
47
54
|
data = []
|
48
|
-
dumper = Composer::Package::Dumper::HashDumper.new
|
55
|
+
dumper = ::Composer::Package::Dumper::HashDumper.new
|
49
56
|
|
50
57
|
canonical_packages.each { |package| data << dumper.dump(package) }
|
51
58
|
|
@@ -72,7 +79,7 @@ module Composer
|
|
72
79
|
[#{e.class}] #{e.message}"
|
73
80
|
end
|
74
81
|
|
75
|
-
loader = Composer::Package::Loader::HashLoader.new(nil, true)
|
82
|
+
loader = ::Composer::Package::Loader::HashLoader.new(nil, true)
|
76
83
|
packages_data.each do |package_data|
|
77
84
|
package = loader.load(package_data)
|
78
85
|
add_package(package)
|
@@ -82,4 +89,4 @@ module Composer
|
|
82
89
|
|
83
90
|
end
|
84
91
|
end
|
85
|
-
end
|
92
|
+
end
|
@@ -9,22 +9,23 @@
|
|
9
9
|
# file that was distributed with this source code.
|
10
10
|
#
|
11
11
|
|
12
|
+
require 'composer/semver'
|
13
|
+
|
12
14
|
module Composer
|
13
15
|
module Repository
|
14
|
-
class HashRepository < Composer::Repository::BaseRepository
|
16
|
+
class HashRepository < ::Composer::Repository::BaseRepository
|
17
|
+
|
15
18
|
def initialize(packages = [])
|
16
|
-
packages.each
|
17
|
-
add_package(package)
|
18
|
-
end
|
19
|
+
packages.each {|p| add_package p } if packages.instance_of? Array
|
19
20
|
end
|
20
21
|
|
21
22
|
def find_package(name, version = nil)
|
22
23
|
# normalize name
|
23
|
-
name
|
24
|
+
name.downcase! unless name.nil?
|
24
25
|
|
25
26
|
# normalize version
|
26
|
-
|
27
|
-
version_parser = Composer::
|
27
|
+
unless version.nil?
|
28
|
+
version_parser = ::Composer::Semver::VersionParser.new
|
28
29
|
version = version_parser.normalize(version)
|
29
30
|
end
|
30
31
|
|
@@ -41,47 +42,57 @@ module Composer
|
|
41
42
|
end
|
42
43
|
|
43
44
|
def find_packages(name, version = nil)
|
44
|
-
|
45
|
-
|
45
|
+
# normalize name
|
46
|
+
name.downcase! unless name.nil?
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
# normalize version
|
49
|
+
unless version.nil?
|
50
|
+
version_parser = ::Composer::Semver::VersionParser.new
|
51
|
+
version = version_parser.normalize(version)
|
52
|
+
end
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
54
|
+
matches = []
|
55
|
+
packages.each do |package|
|
56
|
+
if package.name === name && (version.nil? || version === package.version)
|
57
|
+
matches.push package
|
58
58
|
end
|
59
|
-
|
59
|
+
end
|
60
|
+
matches
|
60
61
|
end
|
61
62
|
|
63
|
+
##
|
64
|
+
# Searches the repository for packages containing the query
|
65
|
+
#
|
66
|
+
# @param query string
|
67
|
+
# The search query
|
68
|
+
# @param mode int
|
69
|
+
# A set of SEARCH_* constants to search on, implementations should do a best effort only
|
70
|
+
#
|
71
|
+
# @return array[] an array of array('name' => '...', 'description' => '...')
|
72
|
+
##
|
62
73
|
def search(query, mode = 0)
|
74
|
+
|
63
75
|
regex = /(?:#{query.split(/\s+/).join('|')})/i
|
76
|
+
|
64
77
|
matches = {}
|
65
78
|
packages.each do |package|
|
79
|
+
|
66
80
|
name = package.name
|
67
81
|
|
68
|
-
# already matched
|
82
|
+
# skip if already matched
|
69
83
|
next if matches[name]
|
70
84
|
|
71
85
|
# search
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
86
|
+
if regex.match(name) ||
|
87
|
+
mode === ::Composer::Repository::BaseRepository::SEARCH_FULLTEXT &&
|
88
|
+
package.kind_of?(::Composer::Package::CompletePackage) &&
|
89
|
+
regex.match("#{package.keywords ? package.keywords.join(' ') : ''} #{package.description ? package.description : ''}")
|
90
|
+
|
91
|
+
matches[name] = {
|
92
|
+
'name' => package.pretty_name,
|
93
|
+
'description' => package.send('description'),
|
94
|
+
}
|
78
95
|
end
|
79
|
-
|
80
|
-
matches[name] = {
|
81
|
-
'name' => package.pretty_name,
|
82
|
-
'description' => package.description,
|
83
|
-
}
|
84
|
-
|
85
96
|
end
|
86
97
|
matches.values
|
87
98
|
end
|
@@ -91,7 +102,7 @@ module Composer
|
|
91
102
|
raise ArgumentError,
|
92
103
|
'package must be specified'
|
93
104
|
end
|
94
|
-
unless package.is_a?(Composer::Package::
|
105
|
+
unless package.is_a?(::Composer::Package::Package)
|
95
106
|
raise TypeError,
|
96
107
|
'package must be a class or superclass of \
|
97
108
|
Composer::Package::Package'
|
@@ -105,16 +116,18 @@ module Composer
|
|
105
116
|
false
|
106
117
|
end
|
107
118
|
|
119
|
+
##
|
108
120
|
# Adds a new package to the repository
|
109
121
|
#
|
110
|
-
#
|
111
|
-
#
|
122
|
+
# @param package Composer::Package::Package
|
123
|
+
# The package to add
|
124
|
+
##
|
112
125
|
def add_package(package)
|
113
126
|
unless package
|
114
127
|
raise ArgumentError,
|
115
128
|
'package must be specified'
|
116
129
|
end
|
117
|
-
unless package.is_a?(Composer::Package::
|
130
|
+
unless package.is_a?(::Composer::Package::Package)
|
118
131
|
raise TypeError,
|
119
132
|
'package must be a class or superclass of \
|
120
133
|
Composer::Package::Package'
|
@@ -126,7 +139,7 @@ module Composer
|
|
126
139
|
|
127
140
|
@packages << package
|
128
141
|
|
129
|
-
if package.instance_of?(Composer::Package::AliasPackage)
|
142
|
+
if package.instance_of?(::Composer::Package::AliasPackage)
|
130
143
|
aliased_package = package.alias_of
|
131
144
|
if aliased_package.repository === nil
|
132
145
|
add_package(aliased_package)
|
@@ -134,16 +147,18 @@ module Composer
|
|
134
147
|
end
|
135
148
|
end
|
136
149
|
|
150
|
+
##
|
137
151
|
# Removes package from repository.
|
138
152
|
#
|
139
|
-
#
|
140
|
-
#
|
153
|
+
# @param package Composer::Package::Package
|
154
|
+
# The package instance to remove
|
155
|
+
##
|
141
156
|
def remove_package(package)
|
142
157
|
unless package
|
143
158
|
raise ArgumentError,
|
144
159
|
'package must be specified'
|
145
160
|
end
|
146
|
-
unless package.is_a?(Composer::Package::
|
161
|
+
unless package.is_a?(::Composer::Package::Package)
|
147
162
|
raise TypeError,
|
148
163
|
'package must be a class or superclass of \
|
149
164
|
Composer::Package::Package'
|
@@ -155,7 +170,7 @@ module Composer
|
|
155
170
|
packages.each do |repo_package|
|
156
171
|
if repo_package.unique_name === package_id
|
157
172
|
@packages.delete_at(index)
|
158
|
-
|
173
|
+
break
|
159
174
|
end
|
160
175
|
index = index + 1
|
161
176
|
end
|
@@ -167,24 +182,26 @@ module Composer
|
|
167
182
|
end
|
168
183
|
|
169
184
|
def count
|
170
|
-
|
185
|
+
packages.length
|
171
186
|
end
|
172
187
|
|
173
188
|
protected
|
174
189
|
|
190
|
+
##
|
175
191
|
# Initializes the packages array.
|
176
192
|
# Mostly meant as an extension point.
|
193
|
+
##
|
177
194
|
def initialize_repository
|
178
195
|
@packages = []
|
179
196
|
end
|
180
197
|
|
181
198
|
def create_alias_package(package, version, pretty_version)
|
182
|
-
if package.instance_of?(Composer::Package::AliasPackage)
|
199
|
+
if package.instance_of?(::Composer::Package::AliasPackage)
|
183
200
|
alias_of = package.alias_of
|
184
201
|
else
|
185
202
|
alias_of = package
|
186
203
|
end
|
187
|
-
Composer::Package::AliasPackage.new(
|
204
|
+
::Composer::Package::AliasPackage.new(
|
188
205
|
alias_of,
|
189
206
|
version,
|
190
207
|
pretty_version
|