reapack-index 1.0beta3 → 1.0beta4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +11 -113
- data/Rakefile +1 -1
- data/lib/reapack/index.rb +159 -109
- data/lib/reapack/index/cdetector.rb +120 -0
- data/lib/reapack/index/cli.rb +127 -161
- data/lib/reapack/index/cli/options.rb +29 -10
- data/lib/reapack/index/gem_version.rb +1 -1
- data/lib/reapack/index/git.rb +189 -0
- data/lib/reapack/index/metadata.rb +2 -2
- data/lib/reapack/index/named_node.rb +17 -12
- data/lib/reapack/index/package.rb +16 -9
- data/lib/reapack/index/provides.rb +46 -0
- data/lib/reapack/index/source.rb +59 -0
- data/lib/reapack/index/version.rb +3 -52
- data/reapack-index.gemspec +7 -6
- data/setup/reapack-index.nsi +9 -5
- data/test/cli/test_check.rb +190 -0
- data/test/cli/test_metadata.rb +194 -0
- data/test/cli/test_scan.rb +326 -0
- data/test/data/index.xml +1 -1
- data/test/helper.rb +90 -1
- data/test/index/test_metadata.rb +111 -0
- data/test/index/test_provides.rb +302 -0
- data/test/index/test_scan.rb +333 -0
- data/test/test_cdetector.rb +214 -0
- data/test/test_cli.rb +69 -797
- data/test/test_git.rb +139 -0
- data/test/test_index.rb +109 -703
- data/test/test_metadata.rb +2 -2
- data/test/test_named_node.rb +50 -42
- data/test/test_package.rb +15 -26
- data/test/test_provides.rb +68 -0
- data/test/test_source.rb +115 -0
- data/test/test_version.rb +10 -63
- metadata +33 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b08f343ff91fe1f1f543b9ac82de72f698404ce8
|
4
|
+
data.tar.gz: 3b4f0c39955b88ba41f3bdf0759d7531d57e32ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 545316c4c749f62d19f68b1f3cb82f447a5d8b0b7d9aaaaba815258ee86424e8f6c0e06cfa2c9ef8876b4eb52074f5a5ac193a954070602d859d2c078a4803cc
|
7
|
+
data.tar.gz: b0f6a34ed77612b71fe28a62cea6f0b6b0a7375506e8a2ecfc9ac90496172b2c30228a8212a064ae8c78e9d26103155ff493fab5d749b14ae4e04f2e4e17c5b7
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Package indexer for
|
1
|
+
# Package indexer for git-based ReaPack repositories
|
2
2
|
|
3
3
|
Parent project: [https://github.com/cfillion/reapack](https://github.com/cfillion/reapack)
|
4
4
|
Subproject: [https://github.com/cfillion/metaheader](https://github.com/cfillion/metaheader)
|
@@ -25,19 +25,23 @@ reapack-index [options] [path-to-your-repository]
|
|
25
25
|
```
|
26
26
|
|
27
27
|
```
|
28
|
-
|
29
|
-
-a, --[no-]amend Reindex existing versions
|
28
|
+
Modes:
|
30
29
|
-c, --check Test every package including uncommited changes and exit
|
30
|
+
-s, --scan [COMMIT] Scan new commits (default) or specific commits
|
31
|
+
Indexer options:
|
32
|
+
-a, --[no-]amend Reindex existing versions
|
31
33
|
-i, --ignore PATH Don't check or index any file starting with PATH
|
32
|
-
-n, --name NAME Set the name shown in ReaPack for this repository
|
33
34
|
-U, --url-template TEMPLATE=auto Set the template for implicit download links
|
34
35
|
-o, --output FILE=./index.xml Set the output filename and path for the index
|
36
|
+
Repository metadata:
|
37
|
+
-n, --name NAME Set the name shown in ReaPack for this repository
|
35
38
|
-l, --link LINK Add or remove a website link
|
36
39
|
--donation-link LINK Add or remove a donation link
|
37
40
|
--ls-links Display the link list then exit
|
38
41
|
-A, --about=FILE Set the about content from a file
|
39
42
|
--remove-about Remove the about content from the index
|
40
43
|
--dump-about Dump the raw about content in RTF and exit
|
44
|
+
Misc options:
|
41
45
|
--[no-]progress Enable or disable progress information
|
42
46
|
-V, --[no-]verbose Activate diagnosis messages
|
43
47
|
-C, --[no-]commit Select whether to commit the modified index
|
@@ -50,6 +54,9 @@ Options:
|
|
50
54
|
-h, --help Prints this help
|
51
55
|
```
|
52
56
|
|
57
|
+
A getting started guide and packaging documentation are available in
|
58
|
+
the [wiki](https://github.com/cfillion/reapack-index/wiki).
|
59
|
+
|
53
60
|
### Configuration
|
54
61
|
|
55
62
|
Options can be specified from the command line or stored in configuration files.
|
@@ -60,112 +67,3 @@ The settings are applied in the following order:
|
|
60
67
|
- ~/.reapack-index.conf (`~` = home directory)
|
61
68
|
- ./.reapack-index.conf (`.` = repository root)
|
62
69
|
- command line
|
63
|
-
|
64
|
-
## Packaging Documentation
|
65
|
-
|
66
|
-
This indexer uses metadata found at the start of the files to generate the
|
67
|
-
database in ReaPack format.
|
68
|
-
See also [MetaHeader](https://github.com/cfillion/metaheader)'s documentation.
|
69
|
-
|
70
|
-
All tags are optional unless explicitely marked as required.
|
71
|
-
|
72
|
-
### Package type by extension:
|
73
|
-
|
74
|
-
- `.lua`, `.eel`, `.py`: ReaScripts
|
75
|
-
- `.jsfx`: JS effects
|
76
|
-
- `.ext`: Native extensions (all included files must be explicitely defined)
|
77
|
-
|
78
|
-
### Package Tags
|
79
|
-
|
80
|
-
These tags affects an entire package. Changes to any of those tags are
|
81
|
-
applied immediately and may affect released versions.
|
82
|
-
|
83
|
-
**@noindex**
|
84
|
-
|
85
|
-
Disable indexing for this file. Set this on included files that
|
86
|
-
should not be distributed alone.
|
87
|
-
|
88
|
-
```
|
89
|
-
@noindex
|
90
|
-
|
91
|
-
NoIndex: true
|
92
|
-
```
|
93
|
-
|
94
|
-
**@version** [required]
|
95
|
-
|
96
|
-
The current package version.
|
97
|
-
Value must contain between one and four groups of digits.
|
98
|
-
|
99
|
-
```
|
100
|
-
@version 1.0
|
101
|
-
@version 1.2pre3
|
102
|
-
|
103
|
-
Version: 0.2015.12.25
|
104
|
-
```
|
105
|
-
|
106
|
-
### Version Tags
|
107
|
-
|
108
|
-
These tags are specific to a single package version. You may still edit them
|
109
|
-
after a release by running the indexer with the `--amend` option.
|
110
|
-
|
111
|
-
**@author**
|
112
|
-
|
113
|
-
```
|
114
|
-
@author cfillion
|
115
|
-
|
116
|
-
Author: Christian Fillion
|
117
|
-
```
|
118
|
-
|
119
|
-
**@changelog**
|
120
|
-
|
121
|
-
```
|
122
|
-
@changelog
|
123
|
-
Documented the metadata syntax
|
124
|
-
Added support for deleted scripts
|
125
|
-
|
126
|
-
Changelog:
|
127
|
-
Added an alternate syntax for metadata tags
|
128
|
-
```
|
129
|
-
|
130
|
-
**@provides**
|
131
|
-
|
132
|
-
Add additional files to the package. This is also used to add platform restrictions
|
133
|
-
or set a custom download url (by default the download url is based on the "origin"
|
134
|
-
git remote). These files will be installed/updated together with the package.
|
135
|
-
|
136
|
-
```
|
137
|
-
@provides unicode.dat
|
138
|
-
|
139
|
-
Provides:
|
140
|
-
Images/background.png
|
141
|
-
Images/fader_small.png
|
142
|
-
Images/fader_big.png
|
143
|
-
|
144
|
-
@provides
|
145
|
-
[windows] reaper_extension.dll http://mysite.com/download/$version/$path
|
146
|
-
```
|
147
|
-
|
148
|
-
List of supported platform strings:
|
149
|
-
- `windows`: All versions of Windows
|
150
|
-
- `win32`: Windows 32-bit
|
151
|
-
- `win64`: Windows 64-bit
|
152
|
-
- `darwin`: All versions of OS X
|
153
|
-
- `darwin32`: OS X 32-bit
|
154
|
-
- `darwin64`: OS X 64-bit
|
155
|
-
|
156
|
-
The following variables will be interpolated if found in the URL:
|
157
|
-
- `$path`: The path of the file relative to the package
|
158
|
-
- `$commit`: The hash of the commit being indexed or "master" if unavailable
|
159
|
-
- `$version`: The version of the package being indexed
|
160
|
-
|
161
|
-
Platform restriction and custom url can be set for the package itself,
|
162
|
-
either by using its file name or a dot:
|
163
|
-
|
164
|
-
```
|
165
|
-
-- this is a lua script named `hello_osx.lua`
|
166
|
-
-- @provides
|
167
|
-
-- [darwin] hello_osx.lua
|
168
|
-
|
169
|
-
-- @provides
|
170
|
-
-- [darwin] .
|
171
|
-
```
|
data/Rakefile
CHANGED
data/lib/reapack/index.rb
CHANGED
@@ -14,58 +14,47 @@ require 'rugged'
|
|
14
14
|
require 'shellwords'
|
15
15
|
require 'time'
|
16
16
|
|
17
|
+
require 'reapack/index/cdetector'
|
17
18
|
require 'reapack/index/cli'
|
18
19
|
require 'reapack/index/cli/options'
|
20
|
+
require 'reapack/index/git'
|
19
21
|
require 'reapack/index/metadata'
|
20
22
|
require 'reapack/index/named_node'
|
21
23
|
require 'reapack/index/package'
|
22
24
|
require 'reapack/index/parsers'
|
25
|
+
require 'reapack/index/provides'
|
26
|
+
require 'reapack/index/source'
|
23
27
|
require 'reapack/index/version'
|
24
28
|
|
25
29
|
class ReaPack::Index
|
26
30
|
Error = Class.new RuntimeError
|
27
31
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
'jsfx' => :effect,
|
32
|
+
PKG_TYPES = {
|
33
|
+
script: %w{lua eel py},
|
34
|
+
extension: %w{ext},
|
35
|
+
effect: %w{jsfx},
|
36
|
+
data: %w{data},
|
34
37
|
}.freeze
|
35
38
|
|
36
39
|
WITH_MAIN = [:script, :effect].freeze
|
37
40
|
|
38
|
-
PROVIDES_REGEX = /
|
39
|
-
\A
|
40
|
-
( \[ \s* (?<platform> .+? ) \s* \] )?
|
41
|
-
\s*
|
42
|
-
(?<file> .+?)
|
43
|
-
( \s+ (?<url> (?:file|https?):\/\/.+ ) )?
|
44
|
-
\z
|
45
|
-
/x.freeze
|
46
|
-
|
47
41
|
PROVIDES_VALIDATOR = proc {|value|
|
48
42
|
begin
|
49
|
-
|
50
|
-
m = l.chomp.match PROVIDES_REGEX
|
51
|
-
Source.validate_platform m[:platform]
|
52
|
-
[m[:platform], m[:file]]
|
53
|
-
}
|
54
|
-
dup = files.detect {|f| files.count(f) > 1 }
|
55
|
-
"duplicate file (%s)" % dup[1] if dup
|
43
|
+
Provides.parse_each(value).to_a and nil
|
56
44
|
rescue Error => e
|
57
45
|
e.message
|
58
46
|
end
|
59
|
-
}
|
47
|
+
}
|
60
48
|
|
61
49
|
HEADER_RULES = {
|
62
50
|
# package-wide tags
|
63
|
-
:version =>
|
51
|
+
:version => [
|
52
|
+
MetaHeader::REQUIRED, MetaHeader::VALUE, MetaHeader::SINGLELINE, /\d/],
|
64
53
|
|
65
54
|
# version-specific tags
|
66
|
-
:author => [MetaHeader::
|
67
|
-
:changelog => [MetaHeader::
|
68
|
-
:provides => [MetaHeader::
|
55
|
+
:author => [MetaHeader::VALUE, MetaHeader::SINGLELINE],
|
56
|
+
:changelog => [MetaHeader::VALUE],
|
57
|
+
:provides => [MetaHeader::VALUE, PROVIDES_VALIDATOR]
|
69
58
|
}.freeze
|
70
59
|
|
71
60
|
FS_ROOT = File.expand_path('/').freeze
|
@@ -73,28 +62,51 @@ class ReaPack::Index
|
|
73
62
|
attr_reader :path, :url_template
|
74
63
|
attr_accessor :amend, :files, :time
|
75
64
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
65
|
+
class << self
|
66
|
+
def is_type?(input)
|
67
|
+
PKG_TYPES.has_key? input&.to_sym
|
68
|
+
end
|
80
69
|
|
81
|
-
|
82
|
-
|
83
|
-
|
70
|
+
def type_of(path)
|
71
|
+
# don't treat files in the root directory as packages
|
72
|
+
# because they don't have a category
|
73
|
+
return if File.dirname(path) == '.'
|
84
74
|
|
85
|
-
|
75
|
+
ext = File.extname(path)[1..-1]
|
76
|
+
PKG_TYPES.find {|_, v| v.include? ext }&.first if ext
|
77
|
+
end
|
78
|
+
|
79
|
+
alias :is_package? :type_of
|
80
|
+
|
81
|
+
def resolve_type(input)
|
82
|
+
PKG_TYPES
|
83
|
+
.find {|name, exts| input.to_sym == name || exts.include?(input.to_s) }
|
84
|
+
&.first
|
85
|
+
end
|
86
86
|
end
|
87
87
|
|
88
88
|
def initialize(path)
|
89
89
|
@amend = false
|
90
90
|
@changes = {}
|
91
|
+
@changed_nodes = []
|
91
92
|
@files = []
|
92
93
|
@path = path
|
93
94
|
|
95
|
+
@cdetector = ConflictDetector.new
|
96
|
+
|
94
97
|
if File.exist? path
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
+
begin
|
99
|
+
# noblanks: don't preserve the original white spaces
|
100
|
+
# so we always output a neat document
|
101
|
+
@doc = File.open(path) {|file| Nokogiri::XML file, &:noblanks }
|
102
|
+
rescue Nokogiri::XML::SyntaxError
|
103
|
+
end
|
104
|
+
|
105
|
+
unless @doc&.root&.name == 'index'
|
106
|
+
raise Error, "'#{path}' is not a ReaPack index file"
|
107
|
+
end
|
108
|
+
|
109
|
+
@cdetector.load_xml @doc.root
|
98
110
|
else
|
99
111
|
@dirty = true
|
100
112
|
@is_new = true
|
@@ -113,9 +125,12 @@ class ReaPack::Index
|
|
113
125
|
type = self.class.type_of path
|
114
126
|
return unless type
|
115
127
|
|
116
|
-
|
128
|
+
# variables to restore if an error occur
|
129
|
+
backups = Hash[[:@doc, :@cdetector].map {|var|
|
130
|
+
[var, instance_variable_get(var).clone]
|
131
|
+
}]
|
117
132
|
|
118
|
-
|
133
|
+
mh = MetaHeader.new contents
|
119
134
|
|
120
135
|
if mh[:noindex]
|
121
136
|
remove path
|
@@ -123,13 +138,12 @@ class ReaPack::Index
|
|
123
138
|
end
|
124
139
|
|
125
140
|
if errors = mh.validate(HEADER_RULES)
|
126
|
-
|
127
|
-
raise Error, "invalid metadata:%s" %
|
128
|
-
[prefix + errors.join(prefix)]
|
141
|
+
raise Error, errors.join("\n")
|
129
142
|
end
|
130
143
|
|
131
|
-
cat, pkg =
|
132
|
-
|
144
|
+
cat, pkg = package_for path
|
145
|
+
|
146
|
+
cselector = @cdetector[pkg.type = type, path]
|
133
147
|
|
134
148
|
pkg.version mh[:version] do |ver|
|
135
149
|
next unless ver.is_new? || @amend
|
@@ -138,48 +152,59 @@ class ReaPack::Index
|
|
138
152
|
@currentVersion = ver.name
|
139
153
|
|
140
154
|
ver.author = mh[:author]
|
141
|
-
ver.time = @time if @time
|
155
|
+
ver.time = @time if @time && ver.is_new?
|
142
156
|
ver.changelog = mh[:changelog]
|
143
157
|
|
144
158
|
ver.replace_sources do
|
145
|
-
|
159
|
+
cselector.clear
|
160
|
+
sources = parse_provides mh[:provides], pkg
|
146
161
|
|
147
162
|
if WITH_MAIN.include?(type) && sources.none? {|src| src.file.nil? }
|
148
163
|
# add the package itself as a source
|
149
|
-
|
164
|
+
src = Source.new make_url(path)
|
165
|
+
sources.unshift src
|
166
|
+
|
167
|
+
cselector.push src.platform, path
|
150
168
|
end
|
151
169
|
|
152
170
|
sources.each {|src| ver.add_source src }
|
153
171
|
end
|
154
172
|
end
|
155
173
|
|
174
|
+
if cons = cselector.resolve
|
175
|
+
raise Error, cons.first
|
176
|
+
end
|
177
|
+
|
156
178
|
log_change 'new category', 'new categories' if cat.is_new?
|
157
179
|
|
158
|
-
if pkg.
|
159
|
-
log_change 'new package
|
160
|
-
|
161
|
-
log_change 'modified package'
|
180
|
+
if pkg.modified? && !@changed_nodes.include?(pkg.node)
|
181
|
+
log_change "#{pkg.is_new? ? 'new' : 'modified'} package"
|
182
|
+
@changed_nodes << pkg.node
|
162
183
|
end
|
163
184
|
|
164
185
|
pkg.versions.each {|ver|
|
165
|
-
if ver.
|
166
|
-
log_change 'new version
|
167
|
-
|
168
|
-
log_change 'modified version'
|
186
|
+
if ver.modified? && !@changed_nodes.include?(ver.node)
|
187
|
+
log_change "#{ver.is_new? ? 'new' : 'modified'} version"
|
188
|
+
@changed_nodes << ver.node
|
169
189
|
end
|
170
190
|
}
|
191
|
+
|
192
|
+
bump_commit
|
171
193
|
rescue Error
|
172
|
-
|
194
|
+
backups.each {|var, value| instance_variable_set var, value }
|
173
195
|
raise
|
174
196
|
end
|
175
197
|
|
176
198
|
def remove(path)
|
177
|
-
cat, pkg =
|
199
|
+
cat, pkg = package_for path, false
|
178
200
|
return unless pkg
|
179
201
|
|
202
|
+
@cdetector[pkg.type, path].clear
|
203
|
+
|
180
204
|
pkg.remove
|
181
205
|
cat.remove if cat.empty?
|
182
206
|
|
207
|
+
bump_commit
|
183
208
|
log_change 'removed package'
|
184
209
|
end
|
185
210
|
|
@@ -221,7 +246,7 @@ class ReaPack::Index
|
|
221
246
|
uri.normalize!
|
222
247
|
|
223
248
|
unless (uri.request_uri || uri.path).include? '$path'
|
224
|
-
raise Error, "$path placeholder
|
249
|
+
raise Error, "missing $path placeholder in '#{tpl}'"
|
225
250
|
end
|
226
251
|
|
227
252
|
unless %w{http https file}.include? uri.scheme
|
@@ -230,7 +255,7 @@ class ReaPack::Index
|
|
230
255
|
|
231
256
|
@url_template = uri.to_s.freeze
|
232
257
|
rescue Addressable::URI::InvalidURIError
|
233
|
-
raise Error, "invalid
|
258
|
+
raise Error, "invalid template '#{tpl}'"
|
234
259
|
end
|
235
260
|
|
236
261
|
def version
|
@@ -243,7 +268,7 @@ class ReaPack::Index
|
|
243
268
|
|
244
269
|
def name=(newName)
|
245
270
|
if !/\A[^~#%&*{}\\:<>?\/+|"]+\Z/.match(newName) || /\A\.+\Z/.match(newName)
|
246
|
-
raise Error, "
|
271
|
+
raise Error, "invalid name '#{newName}'"
|
247
272
|
end
|
248
273
|
|
249
274
|
oldName = name
|
@@ -252,19 +277,12 @@ class ReaPack::Index
|
|
252
277
|
end
|
253
278
|
|
254
279
|
def commit
|
255
|
-
@doc.root[:commit]
|
280
|
+
@commit ||= @doc.root[:commit]
|
256
281
|
end
|
257
282
|
|
258
|
-
|
259
|
-
if sha1.nil?
|
260
|
-
@doc.root.remove_attribute 'commit'
|
261
|
-
else
|
262
|
-
@doc.root['commit'] = sha1
|
263
|
-
end
|
264
|
-
end
|
283
|
+
attr_writer :commit
|
265
284
|
|
266
285
|
def write(path)
|
267
|
-
@doc.root.element_children.each {|n| sort n if n.name == 'category' }
|
268
286
|
sort @doc.root
|
269
287
|
|
270
288
|
FileUtils.mkdir_p File.dirname(path)
|
@@ -295,6 +313,29 @@ class ReaPack::Index
|
|
295
313
|
list.join ', '
|
296
314
|
end
|
297
315
|
|
316
|
+
def make_url(path, template = nil)
|
317
|
+
unless template
|
318
|
+
unless @url_template
|
319
|
+
raise Error, 'unable to generate download links: empty url template'
|
320
|
+
end
|
321
|
+
|
322
|
+
unless @files.include? path
|
323
|
+
raise Error, "file not found '#{path}'"
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
(template || @url_template)
|
328
|
+
.sub('$path', path)
|
329
|
+
.sub('$commit', commit || 'master')
|
330
|
+
.sub('$version', @currentVersion.to_s)
|
331
|
+
end
|
332
|
+
|
333
|
+
def self.expand(filepath, basedir)
|
334
|
+
expanded = File.expand_path filepath, FS_ROOT + basedir
|
335
|
+
expanded[0...FS_ROOT.size] = ''
|
336
|
+
expanded
|
337
|
+
end
|
338
|
+
|
298
339
|
private
|
299
340
|
def log_change(desc, plural = nil)
|
300
341
|
@dirty = true
|
@@ -303,62 +344,71 @@ private
|
|
303
344
|
@changes[desc][0] += 1
|
304
345
|
end
|
305
346
|
|
306
|
-
def
|
307
|
-
|
308
|
-
name == '.' ? nil : name
|
309
|
-
end
|
310
|
-
|
311
|
-
def find(path, create = true)
|
312
|
-
cat_name = dirname(path) || 'Other'
|
347
|
+
def package_for(path, create = true)
|
348
|
+
cat_name = File.dirname path
|
313
349
|
pkg_name = File.basename path
|
314
350
|
|
315
|
-
cat = Category.
|
316
|
-
pkg = Package.
|
351
|
+
cat = Category.fetch cat_name, @doc.root, create
|
352
|
+
pkg = Package.fetch pkg_name, cat&.node, create
|
317
353
|
|
318
354
|
[cat, pkg]
|
319
355
|
end
|
320
356
|
|
321
|
-
def
|
322
|
-
|
323
|
-
raise Error, 'unable to generate a download link' \
|
324
|
-
' – the url template is unset' unless @url_template
|
325
|
-
|
326
|
-
raise Error, "#{path}: No such file or directory" unless @files.include? path
|
327
|
-
end
|
357
|
+
def parse_provides(provides, pkg)
|
358
|
+
pathdir = Pathname.new pkg.category
|
328
359
|
|
329
|
-
(
|
330
|
-
.
|
331
|
-
.sub('$commit', commit || 'master')
|
332
|
-
.sub('$version', @currentVersion || '0.0')
|
333
|
-
end
|
360
|
+
Provides.parse_each(provides).map {|line|
|
361
|
+
line.file_pattern = pkg.name if line.file_pattern == '.'
|
334
362
|
|
335
|
-
|
336
|
-
|
337
|
-
basedir = dirname path
|
363
|
+
expanded = self.class.expand line.file_pattern, pkg.category
|
364
|
+
cselector = @cdetector[line.type || pkg.type, pkg.path]
|
338
365
|
|
339
|
-
|
340
|
-
|
366
|
+
if expanded == pkg.path
|
367
|
+
# always resolve path even when an url template is set
|
368
|
+
files = [expanded]
|
369
|
+
elsif line.url_template.nil?
|
370
|
+
files = @files.select {|f| File.fnmatch expanded, f, File::FNM_PATHNAME }
|
371
|
+
raise Error, "file not found '#{line.file_pattern}'" if files.empty?
|
372
|
+
else
|
373
|
+
# use the relative path for external urls
|
374
|
+
files = [line.file_pattern]
|
375
|
+
end
|
341
376
|
|
342
|
-
|
377
|
+
files.map {|file|
|
378
|
+
src = Source.new make_url(file, line.url_template)
|
379
|
+
src.platform = line.platform
|
380
|
+
src.type = line.type
|
343
381
|
|
344
|
-
|
345
|
-
file = nil if file == basename || file == '.'
|
382
|
+
cselector.push src.platform, line.url_template ? expanded : file
|
346
383
|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
end
|
384
|
+
if file != pkg.path
|
385
|
+
if line.url_template
|
386
|
+
src.file = file
|
387
|
+
else
|
388
|
+
src.file = Pathname.new(file).relative_path_from(pathdir).to_s
|
389
|
+
end
|
390
|
+
end
|
355
391
|
|
356
|
-
|
357
|
-
|
392
|
+
src
|
393
|
+
}
|
394
|
+
}.flatten
|
358
395
|
end
|
359
396
|
|
360
397
|
def sort(node)
|
398
|
+
node.children.each {|n| sort n }
|
399
|
+
|
400
|
+
return if node.name == Package.tag
|
361
401
|
sorted = node.children.sort_by{|n| n[:name].to_s }.sort_by {|n| n.name }
|
362
402
|
sorted.each {|n| node << n }
|
363
403
|
end
|
404
|
+
|
405
|
+
def bump_commit
|
406
|
+
sha1 = commit()
|
407
|
+
|
408
|
+
if sha1.nil?
|
409
|
+
@doc.root.remove_attribute 'commit'
|
410
|
+
else
|
411
|
+
@doc.root['commit'] = sha1
|
412
|
+
end
|
413
|
+
end
|
364
414
|
end
|