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
@@ -0,0 +1,181 @@
|
|
1
|
+
#
|
2
|
+
# This file was ported to ruby from Composer php source code.
|
3
|
+
#
|
4
|
+
# Original Source: Composer\Package\Loader\ArrayLoader.php
|
5
|
+
# Ref SHA: a1427d7fd626d4308c190a267dd7a993f87c6a2a
|
6
|
+
#
|
7
|
+
# (c) Nils Adermann <naderman@naderman.de>
|
8
|
+
# Jordi Boggiano <j.boggiano@seld.be>
|
9
|
+
#
|
10
|
+
# For the full copyright and license information, please view the LICENSE
|
11
|
+
# file that was distributed with this source code.
|
12
|
+
#
|
13
|
+
|
14
|
+
module Composer
|
15
|
+
module Package
|
16
|
+
module Loader
|
17
|
+
class HashLoader
|
18
|
+
|
19
|
+
attr_loader :type do |config, package|
|
20
|
+
if config.key? 'type'
|
21
|
+
package.type = config['type'].downcase
|
22
|
+
else
|
23
|
+
package.type = 'library'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_loader :target_dir
|
28
|
+
|
29
|
+
attr_loader :extra do |config, package|
|
30
|
+
if config.key?('extra') && config['extra'].is_a?(Hash)
|
31
|
+
package.extra = config['extra']
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_loader :binaries do |config, package|
|
36
|
+
if config.key?('bin')
|
37
|
+
unless config['bin'].is_a?(Array)
|
38
|
+
raise UnexpectedValueError,
|
39
|
+
"Package #{config['name']}'s bin key should be an hash,\n
|
40
|
+
#{config['bin'].class.name} given."
|
41
|
+
end
|
42
|
+
config['bin'].each do |bin|
|
43
|
+
bin.gsub!(/^\/+/, '')
|
44
|
+
end
|
45
|
+
package.binaries = config['bin']
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_loader :installation_source
|
50
|
+
|
51
|
+
attr_loader :source do |config, package|
|
52
|
+
if config.key?('source')
|
53
|
+
if [:type, :url, :reference].all? {|k| config['source'].key? k}
|
54
|
+
raise UnexpectedValueError,
|
55
|
+
"Package #{config['name']}'s source key should be specified as\n
|
56
|
+
{\"type\": ..., \"url\": ..., \"reference\": ...}, \n
|
57
|
+
#{config['source'].to_json} given."
|
58
|
+
end
|
59
|
+
package.source_type = config['source']['type']
|
60
|
+
package.source_url = config['source']['url']
|
61
|
+
package.source_reference = config['source']['reference']
|
62
|
+
if config['source'].key?('mirrors')
|
63
|
+
package.source_mirrors = config['source']['mirrors']
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
attr_loader :dist do |config, package|
|
69
|
+
if config.key?('dist')
|
70
|
+
if [:type, :url].all? {|k| config['dist'].key? k}
|
71
|
+
raise UnexpectedValueError,
|
72
|
+
"Package #{config['name']}'s dist key should be specified as\n
|
73
|
+
{\"type\": ..., \"url\": ..., \"reference\": ..., \"shasum\": ...},\n
|
74
|
+
#{config['dist'].to_json} given."
|
75
|
+
end
|
76
|
+
package.dist_type = config['dist']['type']
|
77
|
+
package.dist_url = config['dist']['url']
|
78
|
+
package.dist_reference = config['dist'].key?('reference') ? config['dist']['reference'] : nil
|
79
|
+
package.dist_sha1_checksum = config['dist'].key?('shasum') ? config['dist']['shasum'] : nil
|
80
|
+
if config['dist'].key?('mirrors')
|
81
|
+
package.dist_mirrors = config['dist']['mirrors']
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
SUPPORTED_LINK_TYPES.each do |type, opts|
|
87
|
+
attr_loader opts[:method] do |config, package|
|
88
|
+
if config.key?(type)
|
89
|
+
package.send(
|
90
|
+
"#{opts[:method]}=",
|
91
|
+
parse_links(
|
92
|
+
package.name,
|
93
|
+
package.pretty_version,
|
94
|
+
opts[:description],
|
95
|
+
config[type]
|
96
|
+
)
|
97
|
+
)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
attr_loader :suggests do |config, package|
|
103
|
+
if config.key?('suggest') && config['suggest'].is_a?(Hash)
|
104
|
+
config['suggest'].each do |target, reason|
|
105
|
+
if 'self.version' === reason.strip!
|
106
|
+
config['suggest'][target] = package.pretty_version
|
107
|
+
end
|
108
|
+
end
|
109
|
+
package.suggests = config['suggest']
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
attr_loader :autoload
|
114
|
+
|
115
|
+
attr_loader :dev_autoload, from: 'autoload-dev'
|
116
|
+
|
117
|
+
attr_loader :include_paths, from: 'include-path'
|
118
|
+
|
119
|
+
attr_loader :release_date, from: 'time' do |config, package|
|
120
|
+
if config.key?('time')
|
121
|
+
unless config['time'].empty?
|
122
|
+
time = config['time'] =~ /[[:digit:]]/ ? "@#{config['time']}" : config['time']
|
123
|
+
date = Time.zone.parse(time) rescue false
|
124
|
+
package.release_date = date unless date
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
attr_loader :notification_url do |config, package|
|
130
|
+
if config.key?('notification-url')
|
131
|
+
unless config['notification-url'].empty?
|
132
|
+
package.notification_url = config['notification-url']
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
attr_loader :archive_excludes do |config, package|
|
138
|
+
if config.key?('archive')
|
139
|
+
if config['archive'].key?('exclude')
|
140
|
+
unless config['archive']['exclude'].empty?
|
141
|
+
package.archive_excludes = config['archive']['exclude']
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
##
|
148
|
+
# @param source string
|
149
|
+
# The source package name
|
150
|
+
# @param source_version string
|
151
|
+
# The source package version (pretty version ideally)
|
152
|
+
# @param description string
|
153
|
+
# The link description (e.g. requires, replaces, ..)
|
154
|
+
# @param links hash
|
155
|
+
# The hash of package name => constraint mappings
|
156
|
+
#
|
157
|
+
# @return Link{}
|
158
|
+
##
|
159
|
+
def parse_links(source, source_version, description, links)
|
160
|
+
res = {}
|
161
|
+
links.each do |target, constraint|
|
162
|
+
if 'self.version' === constraint
|
163
|
+
parsed_constraint = @version_parser.parse_constraints(source_version)
|
164
|
+
else
|
165
|
+
parsed_constraint = @version_parser.parse_constraints(constraint)
|
166
|
+
end
|
167
|
+
res[target.downcase] = Composer::Package::Link.new(
|
168
|
+
source,
|
169
|
+
target,
|
170
|
+
parsed_constraint,
|
171
|
+
description,
|
172
|
+
constraint
|
173
|
+
)
|
174
|
+
end
|
175
|
+
res
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# This file was ported to ruby from Composer php source code.
|
3
|
+
#
|
4
|
+
# Original Source: Composer\Package\Loader\ArrayLoader.php
|
5
|
+
# Ref SHA: a1427d7fd626d4308c190a267dd7a993f87c6a2a
|
6
|
+
#
|
7
|
+
# (c) Nils Adermann <naderman@naderman.de>
|
8
|
+
# Jordi Boggiano <j.boggiano@seld.be>
|
9
|
+
#
|
10
|
+
# For the full copyright and license information, please view the LICENSE
|
11
|
+
# file that was distributed with this source code.
|
12
|
+
#
|
13
|
+
|
14
|
+
module Composer
|
15
|
+
module Package
|
16
|
+
module Loader
|
17
|
+
class HashLoader
|
18
|
+
|
19
|
+
# on_load ::Composer::Package::RootPackage do |config, package|
|
20
|
+
#
|
21
|
+
# if config.key?('minimum-stabitily')
|
22
|
+
# package.minimum_stability = config['minimum-stability']
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# end
|
26
|
+
|
27
|
+
attr_loader :minimum_stability
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# This file was ported to ruby from Composer php source code.
|
3
|
+
#
|
3
4
|
# Original Source: Composer\Package\Loader\JsonLoader.php
|
5
|
+
# Ref SHA: ef637c8f1a894157e2f012ad3571183f12fde19f
|
4
6
|
#
|
5
7
|
# (c) Nils Adermann <naderman@naderman.de>
|
6
8
|
# Jordi Boggiano <j.boggiano@seld.be>
|
@@ -26,17 +28,13 @@ module Composer
|
|
26
28
|
# Param: string|JsonFile json A filename, json string or JsonFile instance to load the package from
|
27
29
|
# Returns: Composer::Package::Package
|
28
30
|
def load(json)
|
29
|
-
if json.
|
31
|
+
if json.kind_of? ::Composer::Json::JsonFile
|
30
32
|
config = json.read
|
31
33
|
elsif File.exists?(json)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
elsif json.class === "String"
|
37
|
-
config = Composer::Json::JsonFile.parse_json(
|
38
|
-
json
|
39
|
-
)
|
34
|
+
content = File.open(json, 'r') { |f| f.read }
|
35
|
+
config = ::Composer::Json::JsonFile.parse_json content, json
|
36
|
+
elsif json.is_a? String
|
37
|
+
config = ::Composer::Json::JsonFile.parse_json json
|
40
38
|
end
|
41
39
|
@loader.load(config)
|
42
40
|
end
|
@@ -9,41 +9,106 @@
|
|
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 Package
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
SUPPORTED_LINK_TYPES = {
|
18
|
+
'require' => {
|
19
|
+
description: 'requires',
|
20
|
+
method: 'requires'
|
21
|
+
},
|
22
|
+
'conflict' => {
|
23
|
+
description: 'conflicts',
|
24
|
+
method: 'conflicts'
|
25
|
+
},
|
26
|
+
'provide' => {
|
27
|
+
description: 'provides',
|
28
|
+
method: 'provides'
|
29
|
+
},
|
30
|
+
'replace' => {
|
31
|
+
description: 'replaces',
|
32
|
+
method: 'replaces'
|
33
|
+
},
|
34
|
+
'require-dev' => {
|
35
|
+
description: 'requires (for development)',
|
36
|
+
method: 'dev_requires'
|
37
|
+
}
|
38
|
+
}.freeze
|
18
39
|
|
19
|
-
|
40
|
+
STABILITY_STABLE = 0
|
41
|
+
STABILITY_RC = 5
|
42
|
+
STABILITY_BETA = 10
|
43
|
+
STABILITY_ALPHA = 15
|
44
|
+
STABILITY_DEV = 20
|
20
45
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
# complete package attributes
|
46
|
+
STABILITIES = {
|
47
|
+
'stable' => STABILITY_STABLE,
|
48
|
+
'RC' => STABILITY_RC,
|
49
|
+
'beta' => STABILITY_BETA,
|
50
|
+
'alpha' => STABILITY_ALPHA,
|
51
|
+
'dev' => STABILITY_DEV,
|
52
|
+
}.freeze()
|
30
53
|
|
54
|
+
##
|
55
|
+
# Core package definitions that are needed to resolve dependencies
|
56
|
+
# and install packages
|
57
|
+
##
|
58
|
+
class Package
|
31
59
|
|
60
|
+
##
|
32
61
|
# Creates a new in memory package.
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
62
|
+
#
|
63
|
+
# @param name string
|
64
|
+
# The package's name
|
65
|
+
# @param version string
|
66
|
+
# The package's version
|
67
|
+
# @param: pretty_version string
|
68
|
+
# The package's non-normalized version
|
69
|
+
##
|
36
70
|
def initialize(name, version, pretty_version)
|
37
|
-
|
71
|
+
|
72
|
+
@pretty_name = name
|
73
|
+
@name = name.downcase
|
74
|
+
@id = -1
|
75
|
+
@transport_options = []
|
76
|
+
@repository = nil
|
77
|
+
@type = nil
|
38
78
|
|
39
79
|
# default values
|
80
|
+
@type = nil
|
81
|
+
@target_dir = nil
|
82
|
+
@installation_source = nil
|
83
|
+
@source_type = nil
|
84
|
+
@source_url = nil
|
85
|
+
@source_reference = nil
|
86
|
+
@source_mirrors = nil
|
87
|
+
@dist_type = nil
|
88
|
+
@dist_url = nil
|
89
|
+
@dist_reference = nil
|
90
|
+
@dist_sha1_checksum = nil
|
91
|
+
@dist_mirrors = nil
|
92
|
+
@version = nil
|
93
|
+
@pretty_version = nil
|
94
|
+
@release_date = nil
|
40
95
|
@extra = {}
|
41
96
|
@binaries = []
|
97
|
+
@dev = nil
|
98
|
+
@stability = nil
|
99
|
+
@notification_url = nil
|
100
|
+
|
101
|
+
# @var Hash of package name => Link
|
42
102
|
@requires = {}
|
103
|
+
# @var Hash of package name => Link
|
43
104
|
@conflicts = {}
|
105
|
+
# @var Hash of package name => Link
|
44
106
|
@provides = {}
|
107
|
+
# @var Hash of package name => Link
|
45
108
|
@replaces = {}
|
109
|
+
# @var Hash of package name => Link
|
46
110
|
@dev_requires = {}
|
111
|
+
|
47
112
|
@suggests = {}
|
48
113
|
@autoload = {}
|
49
114
|
@dev_autoload = {}
|
@@ -55,62 +120,565 @@ module Composer
|
|
55
120
|
|
56
121
|
end
|
57
122
|
|
58
|
-
|
59
|
-
|
60
|
-
|
123
|
+
##
|
124
|
+
# Returns whether the package is a development virtual package or a concrete one
|
125
|
+
# @return bool
|
126
|
+
##
|
127
|
+
def is_dev?
|
128
|
+
@dev
|
61
129
|
end
|
62
130
|
|
63
|
-
|
64
|
-
#
|
65
|
-
|
66
|
-
|
131
|
+
##
|
132
|
+
# Allows the solver to set an id for this package to refer to it.
|
133
|
+
#
|
134
|
+
# @param id integer
|
135
|
+
##
|
136
|
+
attr_writer :id
|
137
|
+
|
138
|
+
##
|
139
|
+
# Retrieves the package's id
|
140
|
+
#
|
141
|
+
# @return int The previously set package id
|
142
|
+
##
|
143
|
+
attr_reader :id
|
144
|
+
|
145
|
+
##
|
146
|
+
# Get the package name
|
147
|
+
#
|
148
|
+
# @return string
|
149
|
+
##
|
150
|
+
attr_reader :name
|
151
|
+
|
152
|
+
##
|
153
|
+
# Get the package pretty name
|
154
|
+
#
|
155
|
+
# @return string
|
156
|
+
##
|
157
|
+
attr_reader :pretty_name
|
158
|
+
|
159
|
+
##
|
160
|
+
# Returns a set of names that could refer to this package
|
161
|
+
#
|
162
|
+
# No version or release type information should be included in any of the
|
163
|
+
# names. Provided or replaced package names need to be returned as well.
|
164
|
+
#
|
165
|
+
# @return array An array of strings referring to this package
|
166
|
+
##
|
167
|
+
def names
|
168
|
+
names = {}
|
169
|
+
|
170
|
+
names[name] = true
|
171
|
+
|
172
|
+
provides.each do |link|
|
173
|
+
names[link.target] = true
|
174
|
+
end
|
175
|
+
|
176
|
+
replaces.each do |link|
|
177
|
+
names[link.target] = true
|
178
|
+
end
|
179
|
+
|
180
|
+
names.keys
|
67
181
|
end
|
68
182
|
|
69
|
-
|
70
|
-
|
183
|
+
|
184
|
+
##
|
185
|
+
# Set the package type.
|
186
|
+
# @param type string
|
187
|
+
##
|
188
|
+
attr_writer :type
|
189
|
+
|
190
|
+
##
|
191
|
+
# Get package type.
|
192
|
+
# @return string
|
71
193
|
def type
|
72
194
|
@type ? @type : 'library'
|
73
195
|
end
|
74
196
|
|
75
|
-
|
76
|
-
|
197
|
+
##
|
198
|
+
# Get the package stability.
|
199
|
+
#
|
200
|
+
# @return string|nil
|
201
|
+
##
|
202
|
+
attr_reader :stability
|
203
|
+
|
204
|
+
##
|
205
|
+
# Get the package stability priority.
|
206
|
+
##
|
207
|
+
def stability_priority
|
208
|
+
::Composer::Package::STABILITIES[stability]
|
77
209
|
end
|
78
210
|
|
211
|
+
##
|
212
|
+
# Set the target directory
|
213
|
+
# @param target_dir string
|
214
|
+
##
|
215
|
+
attr_writer :target_dir
|
216
|
+
|
217
|
+
##
|
218
|
+
# Get target directory
|
219
|
+
# @return string| nil
|
220
|
+
#
|
79
221
|
def target_dir
|
80
|
-
return
|
222
|
+
return if @target_dir.nil?
|
81
223
|
regex = '(?:^|[\\\\/]+)\.\.?(?:[\\\\/]+|$)(?:\.\.?(?:[\\\\/]+|$))*'
|
82
224
|
@target_dir.gsub(/#{regex}/x, '/').gsub(/^\/+/, '')
|
83
225
|
end
|
84
226
|
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
|
89
|
-
|
227
|
+
##
|
228
|
+
# Set the package extra
|
229
|
+
# @param extra Hash
|
230
|
+
##
|
231
|
+
attr_writer :extra
|
232
|
+
|
233
|
+
##
|
234
|
+
# Get the package extra
|
235
|
+
# @return Hash
|
236
|
+
##
|
237
|
+
attr_reader :extra
|
238
|
+
|
239
|
+
##
|
240
|
+
# Set the package binaries
|
241
|
+
# @param binaries Array
|
242
|
+
##
|
243
|
+
attr_writer :binaries
|
244
|
+
|
245
|
+
##
|
246
|
+
# Get the package binaries
|
247
|
+
# @return Hash|nil
|
248
|
+
##
|
249
|
+
attr_reader :binaries
|
250
|
+
|
251
|
+
##
|
252
|
+
# Set the package installation source
|
253
|
+
# @param installation_source string
|
254
|
+
##
|
255
|
+
attr_writer :installation_source
|
256
|
+
|
257
|
+
##
|
258
|
+
# Get the package installation source
|
259
|
+
# @return string|nil
|
260
|
+
##
|
261
|
+
attr_reader :installation_source
|
262
|
+
|
263
|
+
##
|
264
|
+
# Set the package source type
|
265
|
+
# @param source_type string
|
266
|
+
##
|
267
|
+
attr_writer :source_type
|
268
|
+
|
269
|
+
##
|
270
|
+
# Get the package source type
|
271
|
+
# @return string|nil
|
272
|
+
##
|
273
|
+
attr_reader :source_type
|
274
|
+
|
275
|
+
##
|
276
|
+
# Set the package source url
|
277
|
+
# @param source_url string
|
278
|
+
##
|
279
|
+
attr_writer :source_url
|
280
|
+
|
281
|
+
##
|
282
|
+
# Get the package source url
|
283
|
+
# @return string|nil
|
284
|
+
##
|
285
|
+
attr_reader :source_url
|
286
|
+
|
287
|
+
##
|
288
|
+
# Set the package source reference
|
289
|
+
# @param source_reference string
|
290
|
+
##
|
291
|
+
attr_writer :source_reference
|
292
|
+
|
293
|
+
##
|
294
|
+
# Get the package source reference
|
295
|
+
# @return string|nil
|
296
|
+
##
|
297
|
+
attr_reader :source_reference
|
298
|
+
|
299
|
+
# Get/Set the package source mirrors
|
300
|
+
# @param source_mirrors array|nil
|
301
|
+
##
|
302
|
+
attr_writer :source_mirrors
|
303
|
+
|
304
|
+
##
|
305
|
+
# Get the package source mirrors
|
306
|
+
# @return string|nil
|
307
|
+
##
|
308
|
+
attr_reader :source_mirrors
|
309
|
+
|
310
|
+
##
|
311
|
+
# Get the package source urls
|
312
|
+
# @return array
|
313
|
+
##
|
314
|
+
def source_urls
|
315
|
+
get_urls( source_url, source_mirrors, source_reference, source_type, 'source')
|
90
316
|
end
|
91
317
|
|
92
|
-
|
93
|
-
|
318
|
+
##
|
319
|
+
# Set the package distribution type
|
320
|
+
# @param dist_type string
|
321
|
+
##
|
322
|
+
attr_writer :dist_type
|
323
|
+
|
324
|
+
##
|
325
|
+
# Get the package distribution type
|
326
|
+
# @return string|nil
|
327
|
+
##
|
328
|
+
attr_reader :dist_type
|
329
|
+
|
330
|
+
##
|
331
|
+
# Set the package distribution url
|
332
|
+
# @param dist_url string
|
333
|
+
##
|
334
|
+
attr_writer :dist_url
|
335
|
+
|
336
|
+
##
|
337
|
+
# Get the package distribution url
|
338
|
+
# @return string|nil
|
339
|
+
##
|
340
|
+
attr_reader :dist_url
|
341
|
+
|
342
|
+
##
|
343
|
+
# Set the package distribution reference
|
344
|
+
# @param dist_reference string
|
345
|
+
##
|
346
|
+
attr_writer :dist_reference
|
347
|
+
|
348
|
+
##
|
349
|
+
# Get the package distribution reference
|
350
|
+
# @return string|nil
|
351
|
+
##
|
352
|
+
attr_reader :dist_reference
|
353
|
+
|
354
|
+
##
|
355
|
+
# Set the package distribution sha1 checksum
|
356
|
+
# @param dist_sha1_checksum string
|
357
|
+
##
|
358
|
+
attr_writer :dist_sha1_checksum
|
359
|
+
|
360
|
+
##
|
361
|
+
# Get the package distribution sha1 checksum
|
362
|
+
# @return string|nil
|
363
|
+
##
|
364
|
+
attr_reader :dist_sha1_checksum
|
365
|
+
|
366
|
+
##
|
367
|
+
# Set the package distribution mirrors
|
368
|
+
# @param dist_mirrors string
|
369
|
+
##
|
370
|
+
attr_writer :dist_mirrors
|
371
|
+
|
372
|
+
##
|
373
|
+
# Get the package distribution mirrors
|
374
|
+
# @return string|nil
|
375
|
+
##
|
376
|
+
attr_reader :dist_mirrors
|
377
|
+
|
378
|
+
##
|
379
|
+
# Get the package distribution urls
|
380
|
+
# @return array
|
381
|
+
##
|
382
|
+
def dist_urls
|
383
|
+
get_urls( dist_url, dist_mirrors, dist_reference, dist_type, 'dist' )
|
94
384
|
end
|
95
385
|
|
96
|
-
|
97
|
-
#
|
98
|
-
|
99
|
-
|
386
|
+
##
|
387
|
+
# Get the package version
|
388
|
+
# @return string
|
389
|
+
##
|
390
|
+
attr_reader :version
|
391
|
+
|
392
|
+
##
|
393
|
+
# Get the package pretty version
|
394
|
+
# @return string
|
395
|
+
##
|
396
|
+
attr_reader :pretty_version
|
397
|
+
|
398
|
+
##
|
399
|
+
# Returns the pretty version string plus a git or hg commit hash of this package
|
400
|
+
#
|
401
|
+
# @see pretty_version
|
402
|
+
#
|
403
|
+
# @param truncate bool
|
404
|
+
# If the source reference is a sha1 hash, truncate it
|
405
|
+
#
|
406
|
+
# @return string
|
407
|
+
##
|
408
|
+
def full_pretty_version(truncate = true)
|
409
|
+
unless is_dev? || %w{hg git}.include?(source_type)
|
410
|
+
return pretty_version
|
411
|
+
end
|
412
|
+
|
413
|
+
# if source reference is a sha1 hash -- truncate
|
414
|
+
if truncate && source_reference.length === 40
|
415
|
+
return "#{pretty_version} #{source_reference[0..6]}"
|
416
|
+
end
|
417
|
+
|
418
|
+
"#{pretty_version} #{source_reference}"
|
100
419
|
end
|
101
420
|
|
421
|
+
##
|
102
422
|
# Replaces current version and pretty version with passed values.
|
103
423
|
# It also sets stability.
|
104
|
-
#
|
105
|
-
#
|
424
|
+
#
|
425
|
+
# @param version string version
|
426
|
+
# The package's normalized version
|
427
|
+
# @param pretty_version string
|
428
|
+
# The package's non-normalized version
|
429
|
+
##
|
106
430
|
def replace_version(version, pretty_version)
|
107
431
|
@version = version
|
108
432
|
@pretty_version = pretty_version
|
109
433
|
|
110
|
-
@stability = Composer::
|
434
|
+
@stability = ::Composer::Semver::VersionParser::parse_stability(version)
|
111
435
|
@dev = @stability === 'dev'
|
112
436
|
end
|
113
437
|
|
438
|
+
##
|
439
|
+
# Set the package release date
|
440
|
+
# @param release_date Date
|
441
|
+
##
|
442
|
+
attr_writer :release_date
|
443
|
+
|
444
|
+
##
|
445
|
+
# Get the package release date
|
446
|
+
# @return Date|nil
|
447
|
+
##
|
448
|
+
attr_reader :release_date
|
449
|
+
|
450
|
+
##
|
451
|
+
# Set the package requires
|
452
|
+
# @param requires Hash of package name => Link
|
453
|
+
##
|
454
|
+
attr_writer :requires
|
455
|
+
|
456
|
+
##
|
457
|
+
# Get the package requires
|
458
|
+
# @return Hash of package name => Link
|
459
|
+
##
|
460
|
+
attr_reader :requires
|
461
|
+
|
462
|
+
##
|
463
|
+
# Set the package conflicts
|
464
|
+
# @param conflicts Hash of package name => Link
|
465
|
+
##
|
466
|
+
attr_writer :conflicts
|
467
|
+
|
468
|
+
##
|
469
|
+
# Get the package conflicts
|
470
|
+
# @return Hash of package name => Link
|
471
|
+
##
|
472
|
+
attr_reader :conflicts
|
473
|
+
|
474
|
+
##
|
475
|
+
# Set the package provides
|
476
|
+
# @param provides Hash of package name => Link
|
477
|
+
##
|
478
|
+
attr_writer :provides
|
479
|
+
|
480
|
+
##
|
481
|
+
# Get the package provides
|
482
|
+
# @return Hash of package name => Link
|
483
|
+
##
|
484
|
+
attr_reader :provides
|
485
|
+
|
486
|
+
##
|
487
|
+
# Set the package replaces
|
488
|
+
# @param replaces Hash of package name => Link
|
489
|
+
##
|
490
|
+
attr_writer :replaces
|
491
|
+
|
492
|
+
##
|
493
|
+
# Get the package replaces
|
494
|
+
# @return Hash of package name => Link
|
495
|
+
##
|
496
|
+
attr_reader :replaces
|
497
|
+
|
498
|
+
##
|
499
|
+
# Set the package dev requires
|
500
|
+
# @param dev_requires Hash of package name => Link
|
501
|
+
##
|
502
|
+
attr_writer :dev_requires
|
503
|
+
|
504
|
+
##
|
505
|
+
# Get the package dev requires
|
506
|
+
# @return Hash of package name => Link
|
507
|
+
##
|
508
|
+
attr_reader :dev_requires
|
509
|
+
|
510
|
+
##
|
511
|
+
# Set the package suggests
|
512
|
+
# @param suggests Hash of package name => comments
|
513
|
+
##
|
514
|
+
attr_writer :suggests
|
515
|
+
|
516
|
+
##
|
517
|
+
# Get the package suggests
|
518
|
+
# @return Hash of package name => Link
|
519
|
+
##
|
520
|
+
attr_reader :suggests
|
521
|
+
|
522
|
+
##
|
523
|
+
# Set the package autoload mapping
|
524
|
+
# @param autoload Hash Mapping of auto-loading rules
|
525
|
+
##
|
526
|
+
attr_writer :autoload
|
527
|
+
|
528
|
+
##
|
529
|
+
# Get the package autoload mapping
|
530
|
+
# TODO: This conflicts with kernel method autoload
|
531
|
+
# @return Array
|
532
|
+
##
|
533
|
+
attr_reader :autoload
|
534
|
+
|
535
|
+
##
|
536
|
+
# Set the package dev autoload mapping
|
537
|
+
# @param dev_autoload Array Mapping of dev auto-loading rules
|
538
|
+
##
|
539
|
+
attr_writer :dev_autoload
|
540
|
+
|
541
|
+
##
|
542
|
+
# Get the package dev autoload mapping
|
543
|
+
# @return Array
|
544
|
+
##
|
545
|
+
attr_reader :dev_autoload
|
546
|
+
|
547
|
+
##
|
548
|
+
# Set the list of paths added to PHP's include path.
|
549
|
+
# @param include_paths Array List of directories
|
550
|
+
##
|
551
|
+
attr_writer :include_paths
|
552
|
+
|
553
|
+
##
|
554
|
+
# Get the package include_paths mapping
|
555
|
+
# @return Array
|
556
|
+
##
|
557
|
+
attr_reader :include_paths
|
558
|
+
|
559
|
+
##
|
560
|
+
# Set the package notification url
|
561
|
+
# @param notification_url string
|
562
|
+
##
|
563
|
+
attr_writer :notification_url
|
564
|
+
|
565
|
+
##
|
566
|
+
# Get the package notification url
|
567
|
+
# @return string|nil
|
568
|
+
##
|
569
|
+
attr_reader :notification_url
|
570
|
+
|
571
|
+
# Set a list of patterns to be excluded from archives
|
572
|
+
# @param archive_excludes Array
|
573
|
+
##
|
574
|
+
attr_writer :archive_excludes
|
575
|
+
|
576
|
+
##
|
577
|
+
# Get the package archive_excludes mapping
|
578
|
+
# @return Array
|
579
|
+
##
|
580
|
+
attr_reader :archive_excludes
|
581
|
+
|
582
|
+
##
|
583
|
+
# Set the list of options to download package dist files
|
584
|
+
# @param transport_options array
|
585
|
+
##
|
586
|
+
attr_writer :transport_options
|
587
|
+
|
588
|
+
##
|
589
|
+
# Returns a list of options to download package dist files
|
590
|
+
# @return array
|
591
|
+
##
|
592
|
+
attr_reader :transport_options
|
593
|
+
|
594
|
+
##
|
595
|
+
# Stores a reference to the repository that owns the package
|
596
|
+
# @param repository ::Composer::Repository::Repository
|
597
|
+
##
|
598
|
+
def repository=(repository)
|
599
|
+
unless @repository.nil? || @repository.equal?(repository)
|
600
|
+
raise LogicError,
|
601
|
+
'A package can only be added to one repository'
|
602
|
+
end
|
603
|
+
@repository = repository
|
604
|
+
end
|
605
|
+
|
606
|
+
##
|
607
|
+
# Returns a reference to the repository that owns the package
|
608
|
+
# @return RepositoryInterface
|
609
|
+
##
|
610
|
+
attr_reader :repository
|
611
|
+
|
612
|
+
##
|
613
|
+
# Returns package unique name, constructed from name and version.
|
614
|
+
# @return string
|
615
|
+
##
|
616
|
+
def unique_name
|
617
|
+
"#{name}-#{version}"
|
618
|
+
end
|
619
|
+
|
620
|
+
##
|
621
|
+
# Converts the package into a readable and unique string
|
622
|
+
# @return string
|
623
|
+
##
|
624
|
+
def to_s
|
625
|
+
unique_name
|
626
|
+
end
|
627
|
+
|
628
|
+
##
|
629
|
+
# Converts the package into a pretty readable string
|
630
|
+
# @return string
|
631
|
+
##
|
632
|
+
def pretty_string
|
633
|
+
"#{pretty_name} #{pretty_version}"
|
634
|
+
end
|
635
|
+
|
636
|
+
def is_platform?
|
637
|
+
# repository.instance_of?(PlatformRepository)
|
638
|
+
false
|
639
|
+
end
|
640
|
+
|
641
|
+
##
|
642
|
+
# Determine whether the specified package is equal to this package.
|
643
|
+
# @param package
|
644
|
+
##
|
645
|
+
def equal?(package)
|
646
|
+
target = self
|
647
|
+
if self.kind_of? ::Composer::Package::AliasPackage
|
648
|
+
target = alias_of
|
649
|
+
end
|
650
|
+
if package.kind_of? ::Composer::Package::AliasPackage
|
651
|
+
package = package.alias_of
|
652
|
+
end
|
653
|
+
package === target
|
654
|
+
end
|
655
|
+
|
656
|
+
protected
|
657
|
+
|
658
|
+
##
|
659
|
+
# Helper method to combine urls by type
|
660
|
+
##
|
661
|
+
def get_urls(url, mirrors, ref, type, url_type)
|
662
|
+
return [] if url.nil?
|
663
|
+
urls = [ url ]
|
664
|
+
if mirrors
|
665
|
+
mirrors.each do |mirror|
|
666
|
+
if url_type === 'dist'
|
667
|
+
mirror_url = ::Composer::Util::ComposerMirror::process_url(mirror['url'], name, version, ref, type)
|
668
|
+
elsif url_type === 'source' && type === 'git'
|
669
|
+
mirror_url = ::Composer::Util::ComposerMirror::process_git_url(mirror['url'], name, url, type)
|
670
|
+
elsif url_type === 'source' && type === 'hg'
|
671
|
+
mirror_url = ::Composer::Util::ComposerMirror::process_hg_url(mirror['url'], name, url, type)
|
672
|
+
end
|
673
|
+
unless urls.include? mirror_url
|
674
|
+
func = mirror['preferred'] ? 'unshift' : 'push'
|
675
|
+
urls.send(func, mirror_url)
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
urls
|
680
|
+
end
|
681
|
+
|
114
682
|
end
|
115
683
|
end
|
116
684
|
end
|