sixarma-bt 0.7.4 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +4 -1
- data/Rakefile +3 -3
- data/lib/sixarma-bt-cli.rb +1 -3
- data/lib/sixarma/bt.rb +129 -137
- data/lib/sixarma/bt/build.rb +35 -39
- data/lib/sixarma/bt/nsis.rb +6 -6
- data/lib/sixarma/bt/options.rb +4 -2
- data/lib/sixarma/bt/sign.rb +17 -17
- data/lib/sixarma/bt/svn.rb +5 -5
- metadata +4 -4
data/README
CHANGED
@@ -5,4 +5,7 @@ Documentation:
|
|
5
5
|
- If the most recent version is tagged as released: false,
|
6
6
|
the next time you run the program it will assume that this will be the version to work with.
|
7
7
|
If released: true, then it will assume you intend to create the next version.
|
8
|
-
- run bt-cli -? for help
|
8
|
+
- run bt-cli -? for help
|
9
|
+
|
10
|
+
- If you need to change the default settings of sixarma/sixcore modules, please copy their config yaml files into
|
11
|
+
PROGRAM_FOLDER\config and adjust them as you wish.
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ require 'rake/testtask'
|
|
13
13
|
spec = Gem::Specification.new do |s|
|
14
14
|
s.name = 'sixarma-bt'
|
15
15
|
s.rubyforge_project = s.name
|
16
|
-
s.version = '0.
|
16
|
+
s.version = '0.8.0'
|
17
17
|
s.has_rdoc = true
|
18
18
|
s.extra_rdoc_files = ['README', 'LICENSE']
|
19
19
|
s.summary = 'BuildTools for full conversion Mods for Armed Assault'
|
@@ -25,8 +25,8 @@ spec = Gem::Specification.new do |s|
|
|
25
25
|
s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,spec}/**/*.rb") + Dir.glob("{bin,lib,spec}/**/*.yaml")
|
26
26
|
s.require_path = 'lib'
|
27
27
|
s.bindir = 'bin'
|
28
|
-
s.add_dependency('sixarma', '>= 0.
|
29
|
-
s.add_dependency('sixcore', '>= 0.
|
28
|
+
s.add_dependency('sixarma', '>= 0.5.0')
|
29
|
+
s.add_dependency('sixcore', '>= 0.4.0')
|
30
30
|
end
|
31
31
|
|
32
32
|
Rake::GemPackageTask.new(spec) do |p|
|
data/lib/sixarma-bt-cli.rb
CHANGED
data/lib/sixarma/bt.rb
CHANGED
@@ -2,11 +2,8 @@
|
|
2
2
|
6thSense.eu ArmA BuildTools (Automation Suite), by Sickboy (sb_at_6thSense.eu)
|
3
3
|
|
4
4
|
# TODO: Tweak / Clean / Merge / Split / Optimize
|
5
|
-
# TODO: log4r support per module instead of all in core?
|
6
5
|
# TODO: Implement FATAL, WARN etc loglevels?
|
7
6
|
# TODO: Convert all Config/Stats classes from CON_STANT to ConStant variation
|
8
|
-
# TODO: Move Regex into Constants
|
9
|
-
# FIXME: Look at Keys Cleaning for 'whole' processing
|
10
7
|
# TODO: List:
|
11
8
|
- More sophisticated svn changes system which goes beyond 'Addons' and 'Dta' etc
|
12
9
|
-- CONFIG_MOD_SUBFOLDERS per mod implemented, but only active for creating addons and signing
|
@@ -39,6 +36,10 @@ require 'sixarma/bt/sign'
|
|
39
36
|
module SixArma
|
40
37
|
# Build Tools Module
|
41
38
|
module Bt
|
39
|
+
COMPONENT = 'SixArma::Bt::Builder'
|
40
|
+
TITLE = '6thSense.eu ArmA BuildTools'
|
41
|
+
VERSION = '0.8.0'
|
42
|
+
|
42
43
|
# Main Config Structure
|
43
44
|
CONFIG = Struct.new(:title, :titlelong, :outroot, :verpath, :veraddon, :changelog, :workdir, :workbin, :workpbo, :work3rd, :work3rd_pbo,
|
44
45
|
:workdel, :listbin, :listpbo, :list3rd_pbo, :sign, :nsis, :ftp, :mods)
|
@@ -67,46 +68,67 @@ module SixArma
|
|
67
68
|
# Changelog Structure
|
68
69
|
STATS_MOD_CHANGELOG = Struct.new(:added, :updated, :removed, :changed, :fixed, :local)
|
69
70
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
'UPDATED', 'UPDATE', 'UPD', 'U',
|
75
|
-
'DELETED', 'DELETE', 'DEL', 'REMOVED',
|
76
|
-
'LOCAL', 'MOVED', 'MOV', 'REVERTED', 'RENAMED', 'R']
|
77
|
-
|
78
|
-
# Log entries class
|
79
|
-
class LogEntries < Array
|
80
|
-
def add_entries(array, type)
|
81
|
-
unless array.empty?
|
82
|
-
push "** #{type}:"
|
83
|
-
array.each do |e|
|
84
|
-
push "*** #{e}"
|
85
|
-
end
|
86
|
-
push ''
|
87
|
-
end
|
88
|
-
end
|
71
|
+
@@log = Log4r::Logger.new('SixCore::SixArma-Bt')
|
72
|
+
module_function
|
73
|
+
def log
|
74
|
+
@@log
|
89
75
|
end
|
76
|
+
|
90
77
|
# Main Program Class
|
91
78
|
class Builder
|
92
79
|
COMPONENT = 'SixArma::Bt::Builder'
|
93
80
|
|
81
|
+
TYPE_PATTERN = [
|
82
|
+
'CHANGED', 'CHANGE', 'C', 'MODIFIED', 'MOD',
|
83
|
+
'ADDED', 'ADD', 'A',
|
84
|
+
'FIXED', 'FIX', 'F',
|
85
|
+
'UPDATED', 'UPDATE', 'UPD', 'U',
|
86
|
+
'DELETED', 'DELETE', 'DEL', 'REMOVED',
|
87
|
+
'LOCAL', 'MOVED', 'MOV', 'REVERTED', 'RENAMED', 'R'].join '|'
|
88
|
+
|
89
|
+
REGEX_DEVS = /ace_dev_|ace_support_|wgl_support_|wgl_dev_|wgl_supporter_/i
|
90
|
+
REGEX_LONG = /^\s*~?\s*(#{TYPE_PATTERN})\s+-\s*((\w+)(\s*(and|&)\s*(\w+))?(\s*(and|&)\s*(\w+))?):?\s*(.+?)\s*$/i
|
91
|
+
REGEX_PLACE = /^\s*~?\s*(#{TYPE_PATTERN})\s+(\w+_\w+):\s*(.+?)\s*$/i
|
92
|
+
REGEX_TYPE1 = /^\s*~?\s*(#{TYPE_PATTERN})\s*?[\s:]\s*(.+?)\s*$/i
|
93
|
+
REGEX_TYPE2 = /^\s*~?\s*(#{TYPE_PATTERN})\s+(.+?)\s*$/i
|
94
|
+
REGEX_COMMENT1 = /^\s*~\s*(.*?)\s*$/
|
95
|
+
REGEX_COMMENT2 = /^\s*(.*?)\s*$/
|
96
|
+
REGEX_LOCAL = /version tag|buildscripts?|build[_\s+]|readme|credits|\.txt|\.bat|changelog| txt |this/i
|
97
|
+
REGEX_NOGO = /penis|dildo|noob/i
|
98
|
+
REGEX_NIL = /^\s*([:\-\.~,]|\**)\s*/
|
99
|
+
REGEX_FIRST = /^\w+/
|
100
|
+
|
101
|
+
REGEX_TODO = /TODO|RESTORED/i
|
102
|
+
REGEX_CHANGED = /^CH?A?N?G?E?D?/i
|
103
|
+
REGEX_MODIFIED = /^MODIFIED|MOD|RENAMED/i
|
104
|
+
REGEX_ADDED = /^AD?D?E?D?/i
|
105
|
+
REGEX_REMOVED = /^RE?M?O?V?E?D/i
|
106
|
+
REGEX_DELETED = /^DELE?T?E?D?/i
|
107
|
+
REGEX_UPDATED = /^UP?D?A?T?E?D?/i
|
108
|
+
REGEX_FIXED = /^FI?X?E?D?/i
|
109
|
+
REGEX_MOVED = /^MOVE?D?/i
|
110
|
+
REGEX_REVERT = /^LOCAL|REVERTE?D?/i
|
111
|
+
|
112
|
+
REGEX_VERSION = /(.)\.(.)(.)/
|
113
|
+
|
114
|
+
@@log = SixArma::Bt.log
|
115
|
+
|
94
116
|
attr_reader(:config, :stats)
|
95
117
|
attr_accessor :threads
|
96
118
|
|
97
119
|
# yaml:: Yaml configuration file
|
98
120
|
# halt:: Wait for user input every step?
|
99
121
|
def initialize(yaml, halt)
|
100
|
-
|
122
|
+
@@log.info "Start Time: #{Time.now}"
|
101
123
|
|
102
124
|
@halt = halt
|
103
125
|
@threads = []
|
104
126
|
@stats = STATS.new()
|
105
127
|
if FileTest.exist?(yaml)
|
106
|
-
|
128
|
+
@@log.info "Reading From Configuration File: #{yaml}"
|
107
129
|
File.open(yaml) { |yf| @config = YAML::load( yf ) }
|
108
130
|
else
|
109
|
-
|
131
|
+
@@log.info "Yaml file not found (#{yaml})"
|
110
132
|
Process.exit
|
111
133
|
end
|
112
134
|
read_stats()
|
@@ -117,11 +139,11 @@ module SixArma
|
|
117
139
|
# source:: Source path
|
118
140
|
# destination:: Destination path
|
119
141
|
def update_all(source, destination)
|
120
|
-
SixCore::
|
121
|
-
|
142
|
+
@@log.info SixCore::prep_msg('Update_All', :format => 'title') # TODO
|
143
|
+
@@log.info "Updating *all* files - source: #{source} - destination: #{destination}..."
|
122
144
|
SixCore::fileupdate(
|
123
|
-
"#{@config.outroot}
|
124
|
-
"#{@config.outroot}
|
145
|
+
"#{@config.outroot}/files/#{source}/",
|
146
|
+
"#{@config.outroot}/files/#{destination}/"
|
125
147
|
)
|
126
148
|
end
|
127
149
|
|
@@ -129,11 +151,11 @@ module SixArma
|
|
129
151
|
# source:: Source path
|
130
152
|
# destination:: Destination path
|
131
153
|
def update_sign(source, destination)
|
132
|
-
SixCore::
|
133
|
-
|
154
|
+
@@log.info SixCore::prep_msg('Update_Sign', :format => 'title') # TODO
|
155
|
+
@@log.info "Updating *sign* files - source: #{source} - destination: #{destination}..."
|
134
156
|
SixCore::fileupdate(
|
135
|
-
"#{@config.outroot}
|
136
|
-
"#{@config.outroot}
|
157
|
+
"#{@config.outroot}/files/#{source}/",
|
158
|
+
"#{@config.outroot}/files/#{destination}/",
|
137
159
|
'/IF *.bisign *.bikey'
|
138
160
|
)
|
139
161
|
end
|
@@ -157,15 +179,15 @@ module SixArma
|
|
157
179
|
# put:: File to upload
|
158
180
|
# type:: Type (update or full)
|
159
181
|
def upload(put, type, tmp = true)
|
160
|
-
SixCore::
|
182
|
+
@@log.info SixCore::prep_msg('Upload', :format => 'title')
|
161
183
|
@config.ftp.each do |f|
|
162
184
|
path = eval "f.path#{type}"
|
163
|
-
|
185
|
+
@@log.info "Uploading #{put} to #{f.host}/#{path}..."
|
164
186
|
ftp = SixCore::Ftp.new(f.host, f.user, f.pass)
|
165
|
-
ftp.put(put, "#{@config.outroot}
|
187
|
+
ftp.put(put, "#{@config.outroot}/", path, true, tmp)
|
166
188
|
ftp.ftp.close
|
167
189
|
end
|
168
|
-
|
190
|
+
@@log.info "Uploading #{put} finished!"
|
169
191
|
SixCore::halt() if @halt
|
170
192
|
end
|
171
193
|
|
@@ -175,19 +197,19 @@ module SixArma
|
|
175
197
|
name = eval("@stats.#{type}file")
|
176
198
|
tmp = []
|
177
199
|
@config.ftp.each do |f|
|
178
|
-
tmp << [f.host, f.user, f.pass, eval("f.path#{type}"), "#{@config.outroot}
|
200
|
+
tmp << [f.host, f.user, f.pass, eval("f.path#{type}"), "#{@config.outroot}/", name]
|
179
201
|
end
|
180
202
|
@threads << Thread.new(tmp,name) do |ftps,name|
|
181
|
-
SixCore::
|
182
|
-
|
203
|
+
@@log.info SixCore::prep_msg('Upload', :format => 'title')
|
204
|
+
@@log.info "Uploading #{name}..."
|
183
205
|
ftps.each { |f| upload_raw(*f) }
|
184
|
-
|
206
|
+
@@log.info "Uploading #{name} finished..."
|
185
207
|
end
|
186
208
|
end
|
187
209
|
|
188
210
|
# Releases uploaded update/full setup files
|
189
211
|
def release()
|
190
|
-
|
212
|
+
@@log.info "Releasing #{@stats.newver}..."
|
191
213
|
@config.ftp.each do |f|
|
192
214
|
begin
|
193
215
|
raise 'Error' if @stats.fullfile.nil? && @stats.updatefile.nil?
|
@@ -204,7 +226,7 @@ module SixArma
|
|
204
226
|
end
|
205
227
|
end
|
206
228
|
@stats.released = true
|
207
|
-
|
229
|
+
@@log.info "Version Info: #{@stats.newver} Released!"
|
208
230
|
|
209
231
|
write_stats()
|
210
232
|
end
|
@@ -212,14 +234,14 @@ module SixArma
|
|
212
234
|
# Reads stats from yaml version file
|
213
235
|
def read_stats()
|
214
236
|
# TODO: Prettify
|
215
|
-
dir = Dir
|
216
|
-
if dir.size >
|
237
|
+
dir = Dir["#{@config.outroot}/versions/*.yaml"]
|
238
|
+
if dir.size > 0
|
217
239
|
dir.reverse!
|
218
|
-
File.open(
|
219
|
-
|
240
|
+
File.open(dir[0]) do |yf|
|
241
|
+
@@log.info "Reading From Stats File: #{dir[0]}"
|
220
242
|
stats = YAML::load(yf)
|
221
243
|
if stats.released
|
222
|
-
|
244
|
+
@@log.info 'Previous version was released; New Version'
|
223
245
|
@stats = STATS.new()
|
224
246
|
@stats.mods = []
|
225
247
|
@stats.oldver = stats.newver.to_s
|
@@ -228,8 +250,8 @@ module SixArma
|
|
228
250
|
# TODO: Prettify??
|
229
251
|
@stats.newver << '0' # always append extra 0 due to floating point 0.50 --> 0.5
|
230
252
|
@stats.oldver << '0' # always append extra 0 due to floating point 0.50 --> 0.5
|
231
|
-
@stats.newver =
|
232
|
-
@stats.oldver =
|
253
|
+
@stats.newver = @stats.newver[REGEX_VERSION].to_s
|
254
|
+
@stats.oldver = @stats.oldver[REGEX_VERSION].to_s
|
233
255
|
|
234
256
|
@stats.released = false
|
235
257
|
stats.mods.each do |mod|
|
@@ -237,16 +259,14 @@ module SixArma
|
|
237
259
|
modstats.subfolders = []
|
238
260
|
mod.subfolders.each do
|
239
261
|
sf = STATS_MOD_SUBFOLDERS.new()
|
240
|
-
sf.add = []
|
241
|
-
sf.del = []
|
242
|
-
sf.change = []
|
262
|
+
sf.add, sf.del, sf.change = [], [], []
|
243
263
|
modstats.subfolders << sf
|
244
264
|
end
|
245
265
|
modstats.oldrev = mod.newrev
|
246
266
|
@stats.mods << modstats
|
247
267
|
end
|
248
268
|
else
|
249
|
-
|
269
|
+
@@log.info 'Previous version wasn\'t released; Sticking to current version'
|
250
270
|
@stats = stats
|
251
271
|
end
|
252
272
|
end
|
@@ -255,10 +275,10 @@ module SixArma
|
|
255
275
|
Process.exit
|
256
276
|
end
|
257
277
|
|
258
|
-
|
278
|
+
@@log.info "Current Version: #{@stats.newver} | Previous Version: #{@stats.oldver}"
|
259
279
|
|
260
280
|
# update the version files
|
261
|
-
|
281
|
+
@@log.info 'Updating version.txt...'
|
262
282
|
# used by updater setup program
|
263
283
|
File.open("#{@config.outroot}/files/update/#{@config.mods[0].destination}/#{@config.verpath}/version.txt", 'w') do |f|
|
264
284
|
f << @stats.newver
|
@@ -285,20 +305,19 @@ module SixArma
|
|
285
305
|
write_stats()
|
286
306
|
|
287
307
|
# Write all in one changelog all versions and mods
|
308
|
+
@@log.info SixCore::prep_msg 'Writing Changelog', :format => 'title'
|
288
309
|
write_changelog2()
|
289
|
-
|
310
|
+
@@log.info 'Latest Commits by:'
|
290
311
|
@names.each do |k, v|
|
291
|
-
|
312
|
+
@@log.info "#{k}: #{v} commits"
|
292
313
|
end
|
293
314
|
end
|
294
315
|
|
295
316
|
# Experimental: "Replay SVN Log and Reimport"
|
296
317
|
def tmp
|
297
|
-
Dir
|
298
|
-
|
299
|
-
|
300
|
-
File.open("#{@config.outroot}/versions/#{f}") do |yf|
|
301
|
-
SixCore::info "Reading From Stats File: #{f}"
|
318
|
+
Dir["#{@config.outroot}/versions/*.yaml"].each do |f|
|
319
|
+
File.open(f) do |yf|
|
320
|
+
@@log.info "Reading From Stats File: #{f}"
|
302
321
|
@stats = YAML::load(yf)
|
303
322
|
read_changelog(false)
|
304
323
|
write_stats()
|
@@ -309,12 +328,8 @@ module SixArma
|
|
309
328
|
def read_changelog(readrev = true)
|
310
329
|
@stats.mods.each_with_index do |mod, idx|
|
311
330
|
mod.changelog = STATS_MOD_CHANGELOG.new()
|
312
|
-
mod.changelog.changed = []
|
313
|
-
mod.changelog.
|
314
|
-
mod.changelog.fixed = []
|
315
|
-
mod.changelog.added = []
|
316
|
-
mod.changelog.updated = []
|
317
|
-
mod.changelog.local = []
|
331
|
+
mod.changelog.changed, mod.changelog.removed, mod.changelog.fixed = [], [], []
|
332
|
+
mod.changelog.added, mod.changelog.updated, mod.changelog.local = [], [], []
|
318
333
|
mod2 = @config.mods[idx]
|
319
334
|
unless mod2.svn.nil?
|
320
335
|
svn = SixCore::Svn.new("#{mod2.path}#{mod2.source}", mod2.svn.user, mod2.svn.pass)
|
@@ -325,14 +340,13 @@ module SixArma
|
|
325
340
|
if l[1].size > 0
|
326
341
|
# TODO Pretify
|
327
342
|
name = l[0][1]
|
328
|
-
name.gsub!(
|
343
|
+
name.gsub!(REGEX_DEVS, '')
|
329
344
|
name.capitalize!
|
330
|
-
@names[name]
|
331
|
-
type_pattern = COMMENT_TYPES.join '|'
|
345
|
+
@names[name] += 1
|
332
346
|
l[1].each do |c|
|
333
347
|
if true #c =~ /^\s*~\s*/
|
334
348
|
is_valid, type, places, comment = case c
|
335
|
-
when
|
349
|
+
when REGEX_LONG
|
336
350
|
# ~ type - place: comment
|
337
351
|
# ~ type - place comment
|
338
352
|
# ~ type - place
|
@@ -348,26 +362,26 @@ module SixArma
|
|
348
362
|
|
349
363
|
[true, $1, found, $10]
|
350
364
|
|
351
|
-
when
|
365
|
+
when REGEX_PLACE
|
352
366
|
# ~ type place: comment
|
353
367
|
# type place: comment
|
354
368
|
[true, $1, [$2], $3]
|
355
369
|
|
356
|
-
when
|
370
|
+
when REGEX_TYPE1
|
357
371
|
# ~ type comment
|
358
372
|
# type comment
|
359
373
|
# ~ type: comment
|
360
374
|
# type: comment
|
361
375
|
[true, $1, [], $2]
|
362
376
|
|
363
|
-
when
|
377
|
+
when REGEX_TYPE2
|
364
378
|
[true, $1, [], $2]
|
365
379
|
|
366
|
-
when
|
380
|
+
when REGEX_COMMENT1
|
367
381
|
# ~ comment
|
368
382
|
[true, 'CHANGED', [], $1]
|
369
383
|
|
370
|
-
when
|
384
|
+
when REGEX_COMMENT2
|
371
385
|
# comment
|
372
386
|
[true, 'LOCAL', [], $1]
|
373
387
|
|
@@ -377,16 +391,16 @@ module SixArma
|
|
377
391
|
|
378
392
|
if is_valid
|
379
393
|
case comment
|
380
|
-
when
|
394
|
+
when REGEX_LOCAL
|
381
395
|
type = 'LOCAL'
|
382
396
|
end
|
383
|
-
comment.gsub!(
|
384
|
-
comment.gsub!(
|
397
|
+
comment.gsub!(REGEX_NOGO, '****')
|
398
|
+
comment.gsub!(REGEX_NIL, '')
|
385
399
|
# FIXME: Shouldn't this be possible with just 1* regex?
|
386
|
-
comment.gsub!(
|
400
|
+
comment.gsub!(REGEX_NIL, '')
|
387
401
|
comment.gsub!('http', 'ticket: http')
|
388
402
|
unless comment.empty?
|
389
|
-
f = comment[
|
403
|
+
f = comment[REGEX_FIRST]
|
390
404
|
unless f.nil?
|
391
405
|
case f
|
392
406
|
#when /REMOVED|DELETED/i
|
@@ -394,11 +408,11 @@ module SixArma
|
|
394
408
|
# comment.sub!(f, '')
|
395
409
|
# comment.gsub!(/^[:\-\.~]/, '')
|
396
410
|
# f = comment[/^\w+/]
|
397
|
-
when
|
411
|
+
when REGEX_TODO
|
398
412
|
type = 'LOCAL'
|
399
413
|
end
|
400
414
|
# Capitalize only first word
|
401
|
-
comment.gsub!(
|
415
|
+
comment.gsub!(REGEX_FIRST, '')
|
402
416
|
f.capitalize!
|
403
417
|
comment = "#{f}#{comment}"
|
404
418
|
end
|
@@ -409,17 +423,17 @@ module SixArma
|
|
409
423
|
end
|
410
424
|
entry = "#{entry} [#{name}]"
|
411
425
|
case type
|
412
|
-
when
|
426
|
+
when REGEX_CHANGED, REGEX_MODIFIED
|
413
427
|
mod.changelog.changed << entry
|
414
|
-
when
|
428
|
+
when REGEX_ADDED
|
415
429
|
mod.changelog.added << entry
|
416
|
-
when
|
430
|
+
when REGEX_REMOVED, REGEX_DELETED
|
417
431
|
mod.changelog.removed << entry
|
418
|
-
when
|
432
|
+
when REGEX_UPDATED
|
419
433
|
mod.changelog.updated << entry
|
420
|
-
when
|
434
|
+
when REGEX_FIXED
|
421
435
|
mod.changelog.fixed << entry
|
422
|
-
when
|
436
|
+
when REGEX_MOVED, REGEX_REVERT
|
423
437
|
mod.changelog.local << entry
|
424
438
|
end
|
425
439
|
end
|
@@ -429,29 +443,20 @@ module SixArma
|
|
429
443
|
end
|
430
444
|
end
|
431
445
|
end
|
432
|
-
mod.changelog.
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
mod.
|
438
|
-
|
439
|
-
mod.changelog.changed.sort!
|
440
|
-
mod.changelog.added.sort!
|
441
|
-
mod.changelog.removed.sort!
|
442
|
-
mod.changelog.updated.sort!
|
443
|
-
mod.changelog.fixed.sort!
|
444
|
-
mod.changelog.local.sort!
|
445
|
-
|
446
|
-
SixCore::info "SVN #{mod2.destination} Current Rev: #{mod.newrev} | Previous Rev: #{mod.oldrev}"
|
446
|
+
mod.changelog.values.each do |log|
|
447
|
+
log.uniq!
|
448
|
+
log.sort!
|
449
|
+
end
|
450
|
+
|
451
|
+
@@log.info "SVN #{mod2.destination} Current Rev: #{mod.newrev} | Previous Rev: #{mod.oldrev}"
|
447
452
|
end
|
448
453
|
end
|
449
454
|
end
|
450
455
|
|
451
456
|
# Writes stats to yaml version file
|
452
457
|
def write_stats()
|
453
|
-
SixCore::
|
454
|
-
|
458
|
+
@@log.debug SixCore::prep_msg('Writing Version Stats', :format => 'title')
|
459
|
+
@@log.debug "Current Ver: #{@stats.newver}"
|
455
460
|
|
456
461
|
File.open("#{@config.outroot}/versions/_version_#{@stats.newver}.yaml", 'w' ) do |out|
|
457
462
|
YAML.dump( @stats, out )
|
@@ -460,23 +465,20 @@ module SixArma
|
|
460
465
|
|
461
466
|
|
462
467
|
def gen_clog(stream)
|
463
|
-
Dir.chdir("#{@config.outroot}/versions")
|
464
468
|
ar = []
|
465
|
-
Dir.
|
469
|
+
Dir["#{@config.outroot}/versions/*.yaml"].each do |f|
|
466
470
|
ar << f
|
467
471
|
end
|
468
472
|
ar.reverse!
|
469
|
-
|
473
|
+
@@log.info "Replaying logfiles from Stats Files: #{ar.first} - #{ar.last}"
|
470
474
|
ar.each do |f|
|
471
|
-
File.open(
|
475
|
+
File.open(f) do |yf|
|
472
476
|
stats = YAML::load(yf)
|
473
477
|
stream.puts ''
|
474
478
|
stream.puts "== v#{stats.newver} =="
|
475
479
|
stats.mods.each_with_index do |mod, idx|
|
476
480
|
mod2 = @config.mods[idx]
|
477
|
-
unless mod2.svn.nil?
|
478
|
-
generate_log(mod, mod2, stream, 1)
|
479
|
-
end
|
481
|
+
generate_log(mod, mod2, stream, 1) unless mod2.svn.nil?
|
480
482
|
end
|
481
483
|
end
|
482
484
|
end
|
@@ -490,9 +492,10 @@ module SixArma
|
|
490
492
|
changelog = mod.changelog
|
491
493
|
|
492
494
|
return if changelog.values.inject(true) { |b, a| b and a.empty? }
|
493
|
-
|
495
|
+
case type
|
496
|
+
when 1
|
494
497
|
stream.puts "* #{mod2.destination}, Revision: #{mod.newrev} - #{mod.oldrev}"
|
495
|
-
|
498
|
+
when 2
|
496
499
|
stream.puts "* #{mod2.destination} v#{@stats.newver}, Revision: #{mod.newrev} - #{mod.oldrev}"
|
497
500
|
end
|
498
501
|
generate_log_entries(changelog.added, 'ADDED', stream)
|
@@ -500,28 +503,21 @@ module SixArma
|
|
500
503
|
generate_log_entries(changelog.removed, 'REMOVED', stream)
|
501
504
|
generate_log_entries(changelog.changed, 'CHANGED', stream)
|
502
505
|
generate_log_entries(changelog.fixed, 'FIXED', stream)
|
503
|
-
# etc
|
504
506
|
end
|
505
507
|
|
506
508
|
def generate_log_entries(changelog, type, stream)
|
507
509
|
return if changelog.empty?
|
508
510
|
|
509
511
|
stream.puts "** #{type}:"
|
510
|
-
|
511
|
-
changelog.each do |e|
|
512
|
-
stream.puts "*** #{e}"
|
513
|
-
end
|
514
|
-
|
512
|
+
changelog.each do |line| stream.puts "*** #{line}" end
|
515
513
|
stream.puts
|
516
514
|
end
|
517
515
|
|
518
516
|
# Formats and writes changelog for all versions
|
519
517
|
def write_changelog2()
|
520
|
-
File.open("#{@config.outroot}/files/update/#{@config.mods[0].destination}/Docs
|
521
|
-
SixCore::info 'Writing Changelog'
|
518
|
+
File.open("#{@config.outroot}/files/update/#{@config.mods[0].destination}/Docs/#{@config.changelog}.txt", 'w') do |lf|
|
522
519
|
lf.puts '= Changelog ='
|
523
520
|
gen_clog(lf)
|
524
|
-
Dir.chdir(SixCore::MAINDIR)
|
525
521
|
end
|
526
522
|
end
|
527
523
|
|
@@ -529,11 +525,9 @@ module SixArma
|
|
529
525
|
def write_changelog()
|
530
526
|
@stats.mods.each_with_index do |mod, idx|
|
531
527
|
mod2 = @config.mods[idx]
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
end
|
536
|
-
end
|
528
|
+
File.open("#{@config.mods[idx].changes}/changelog.txt", 'w') do |lf|
|
529
|
+
generate_log(mod, mod2, lf, 2)
|
530
|
+
end unless mod2.svn.nil?
|
537
531
|
end
|
538
532
|
end
|
539
533
|
|
@@ -616,10 +610,8 @@ module SixArma
|
|
616
610
|
@threads.each { |t| t.join } if thread
|
617
611
|
end
|
618
612
|
end
|
619
|
-
end
|
620
|
-
end
|
621
613
|
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
614
|
+
@@log.debug "#{COMPONENT} #{VERSION} loaded"
|
615
|
+
@@log.info SixCore::prep_msg("#{TITLE} v#{VERSION}, by Sickboy (sb_at_6thSense.eu)", :format => 'title')
|
616
|
+
end
|
617
|
+
end
|
data/lib/sixarma/bt/build.rb
CHANGED
@@ -9,15 +9,15 @@ module SixArma
|
|
9
9
|
case folder.type
|
10
10
|
when 'addons'
|
11
11
|
# Remove deleted files
|
12
|
-
|
12
|
+
@@log.info 'Removing Deleted Files from Full...'
|
13
13
|
delete = File.open("#{mod.changes}/#{@config.workdel}_#{folder.name}.txt") { |file| file.readlines.map { |line| SixCore::clean(line) } }
|
14
14
|
delete.each do |item|
|
15
|
-
|
15
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/full/#{mod.destination}/#{folder.name}/#{item}.*"]
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
@@log.info 'Cleaning Update folder...'
|
19
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/update/#{mod.destination}/#{folder.name}/*.pbo"]
|
20
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/update/#{mod.destination}/#{folder.name}/*.bisign"]
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -28,19 +28,19 @@ module SixArma
|
|
28
28
|
def copy_stuff(mod, folder)
|
29
29
|
case folder.type
|
30
30
|
when 'addons'
|
31
|
-
|
31
|
+
@@log.info 'Copying 3rd_Party_Pbos...'
|
32
32
|
thirdparty_pbo = File.open("#{mod.changes}/#{@config.work3rd_pbo}_#{folder.name}.txt") { |file| file.readlines.map { |line| SixCore::clean(line) } }
|
33
|
-
source = "#{mod.path}
|
34
|
-
dest = "#{@config.outroot}
|
35
|
-
thirdparty_pbo.each do |item|
|
33
|
+
source = "#{mod.path}/#{mod.source}/#{folder.name}"
|
34
|
+
dest = "#{@config.outroot}/files/update/#{mod.destination}/#{folder.name}"
|
35
|
+
thirdparty_pbo.each do |item| FileUtils.cp_r "#{source}/#{item}", destination, :preserve => true end
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
# Verify if altsource exists, if not, use real source
|
40
40
|
def check_source(mod, folder, item)
|
41
|
-
source = "#{mod.path}
|
41
|
+
source = "#{mod.path}/#{mod.source}/#{folder.name}/#{item}"
|
42
42
|
unless mod.altsource.nil?
|
43
|
-
tmp = "#{mod.path}
|
43
|
+
tmp = "#{mod.path}/#{mod.altsource}/#{folder.name}/#{item}"
|
44
44
|
source = tmp if FileTest.directory?(tmp)
|
45
45
|
end
|
46
46
|
return source
|
@@ -53,57 +53,53 @@ module SixArma
|
|
53
53
|
# read files into arrays, strip newline chars
|
54
54
|
exclude = []
|
55
55
|
tmp = "#{mod.changes}/_exclude_#{folder.name}.txt"
|
56
|
-
if FileTest.exist?(tmp)
|
57
|
-
exclude = File.open(tmp) { |file| file.readlines.map { |line| SixCore::clean(line) } }
|
58
|
-
end
|
56
|
+
exclude = File.open(tmp) do |file| file.readlines.map { |line| SixCore::clean(line) } end if FileTest.exist?(tmp)
|
59
57
|
|
60
|
-
delete = File.open("#{mod.changes}/#{@config.workdel}_#{folder.name}.txt")
|
58
|
+
delete = File.open("#{mod.changes}/#{@config.workdel}_#{folder.name}.txt") do |file| file.readlines.map { |line| SixCore::clean(line) } end
|
61
59
|
|
62
|
-
tmp = File.open("#{mod.changes}/#{@config.workbin}_#{folder.name}.txt")
|
60
|
+
tmp = File.open("#{mod.changes}/#{@config.workbin}_#{folder.name}.txt") do |file| file.readlines.map { |line| SixCore::clean(line) } end
|
63
61
|
binfiles = []
|
64
|
-
tmp.each do |
|
65
|
-
binfiles <<
|
62
|
+
tmp.each do |addon|
|
63
|
+
binfiles << addon unless delete.include?(addon) || exclude.include?(addon)
|
66
64
|
end
|
67
65
|
|
68
|
-
tmp = File.open("#{mod.changes}/#{@config.workpbo}_#{folder.name}.txt")
|
66
|
+
tmp = File.open("#{mod.changes}/#{@config.workpbo}_#{folder.name}.txt") do |file| file.readlines.map { |line| SixCore::clean(line) } end
|
69
67
|
pbofiles = []
|
70
|
-
tmp.each do |
|
71
|
-
pbofiles <<
|
68
|
+
tmp.each do |addon|
|
69
|
+
pbofiles << addon unless delete.include?(addon) || exclude.include?(addon)
|
72
70
|
end
|
73
71
|
combined = []
|
74
72
|
combined += pbofiles
|
75
73
|
combined += binfiles
|
76
74
|
|
77
|
-
dest = "#{@config.outroot}
|
75
|
+
dest = "#{@config.outroot}/files/update/#{mod.destination}/#{folder.name}"
|
78
76
|
|
79
77
|
# Create folders and mirror SOURCE files
|
80
|
-
|
78
|
+
@@log.info 'Creating folders and mirroring source files...'
|
81
79
|
combined.each do |item|
|
82
80
|
source = check_source(mod, folder, item)
|
83
|
-
SixCore::filemirror(source, "#{@config.workdir}
|
81
|
+
SixCore::filemirror(source, "#{@config.workdir}/#{item}", '/XD .svn')
|
84
82
|
# When using alternate prefixes, also mirror files to prefix folder name
|
85
83
|
prefix = SixArma::PboTools::check_prefix(source, '__AUTO__')
|
86
|
-
unless prefix == '' or prefix != prefix.gsub!('
|
87
|
-
SixCore::filemirror(source, "#{@config.workdir}
|
84
|
+
unless prefix == '' or prefix != prefix.gsub!('/', '')
|
85
|
+
SixCore::filemirror(source, "#{@config.workdir}/#{prefix}", '/XD .svn')
|
88
86
|
end
|
89
87
|
end
|
90
88
|
|
91
89
|
# Build the addons
|
92
|
-
|
93
|
-
binfiles.each do |item|
|
94
|
-
SixArma::PboTools.binarize("#{@config.workdir}\\#{item}", dest, '__AUTO__')
|
95
|
-
end
|
90
|
+
@@log.info 'Binarizing...'
|
91
|
+
binfiles.each do |item| SixArma::PboTools.binarize("#{@config.workdir}/#{item}", dest, '__AUTO__') end
|
96
92
|
|
97
|
-
|
98
|
-
pbofiles.each do |item|
|
99
|
-
SixArma::PboTools.pack("#{@config.workdir}\\#{item}", dest, '__AUTO__')
|
100
|
-
end
|
93
|
+
@@log.info 'PBOing...'
|
94
|
+
pbofiles.each do |item| SixArma::PboTools.pack("#{@config.workdir}/#{item}", dest, '__AUTO__') end
|
101
95
|
|
102
96
|
# CleanUp
|
103
|
-
|
104
|
-
|
97
|
+
@@log.info 'Cleaning up...'
|
98
|
+
FileUtils::mv Dir["#{dest}/*.log"], "#{@config.outroot}/log/", :force => true
|
99
|
+
FileUtils::rm_f Dir["#{dest}/*.log"]
|
105
100
|
# combined.each do |item|
|
106
|
-
#
|
101
|
+
# FileUtils::mv "#{dest}/#{item}.log", "#{@config.outroot}/log/", :force => true
|
102
|
+
# FileUtils::rm_f "#{dest}/#{item}.log"
|
107
103
|
# end
|
108
104
|
end
|
109
105
|
|
@@ -112,7 +108,7 @@ module SixArma
|
|
112
108
|
def clear()
|
113
109
|
@config.mods.each do |mod|
|
114
110
|
mod.subfolders.each do |folder|
|
115
|
-
SixCore::
|
111
|
+
@@log.info SixCore::prep_msg("Clear Addon Folders - #{mod.destination}/#{folder.name}", :format => 'title')
|
116
112
|
clear_folders(mod, folder)
|
117
113
|
end
|
118
114
|
end
|
@@ -123,7 +119,7 @@ module SixArma
|
|
123
119
|
def addon_changes()
|
124
120
|
@config.mods.each do |mod|
|
125
121
|
mod.subfolders.each do |folder|
|
126
|
-
SixCore::
|
122
|
+
@@log.info SixCore::prep_msg("BuildChanges - #{mod.destination}/#{folder.name}", :format => 'title')
|
127
123
|
pbotools_build(mod, folder) if folder.type == 'addons'
|
128
124
|
copy_stuff(mod, folder)
|
129
125
|
end
|
data/lib/sixarma/bt/nsis.rb
CHANGED
@@ -4,7 +4,7 @@ module SixArma
|
|
4
4
|
# Build an NSIS setup file
|
5
5
|
# type:: update or full
|
6
6
|
def nsis_build(type)
|
7
|
-
SixCore::
|
7
|
+
@@log.info SixCore::prep_msg("Nsis Build - #{type}", :format => 'title')
|
8
8
|
cfg = @config.nsis
|
9
9
|
|
10
10
|
newdelete = "";
|
@@ -13,7 +13,7 @@ module SixArma
|
|
13
13
|
del = File.open("#{mod.changes}/#{@config.workdel}_#{folder.name}.txt") do |file|
|
14
14
|
file.readlines.map { |line| SixCore::clean(line) }
|
15
15
|
end
|
16
|
-
del.each { |item| newdelete += "\n Delete \"#{mod.nsis.out}
|
16
|
+
del.each { |item| newdelete += "\n Delete \"#{mod.nsis.out}/#{folder.name}/#{item}.*\"" }
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -27,11 +27,11 @@ module SixArma
|
|
27
27
|
]
|
28
28
|
|
29
29
|
out = "#{cfg.out}_v#{@stats.newver}#{type}.exe"
|
30
|
-
nsis = SixCore::Nsis.new("#{@config.outroot}
|
31
|
-
|
30
|
+
nsis = SixCore::Nsis.new("#{@config.outroot}/#{cfg.template}", "#{@config.outroot}/#{cfg.output}")
|
31
|
+
@@log.info "Creating Setup File: #{out}..."
|
32
32
|
nsis.create_output(replace)
|
33
|
-
size = (File.size("#{@config.outroot}
|
34
|
-
|
33
|
+
size = (File.size("#{@config.outroot}/#{out}") / 1024) / 1024
|
34
|
+
@@log.info "Finished Creating Setup File: #{out} (#{size}MB)..."
|
35
35
|
|
36
36
|
return out
|
37
37
|
end
|
data/lib/sixarma/bt/options.rb
CHANGED
@@ -120,14 +120,16 @@ option_parser = OptionParser.new do |opts|
|
|
120
120
|
|
121
121
|
opts.on_tail('-?', '--help', 'Display this message') do |o|
|
122
122
|
puts opts.help
|
123
|
+
Process.exit
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
126
127
|
option_parser.parse!
|
127
128
|
|
129
|
+
|
128
130
|
if ARGV.empty?
|
129
|
-
@options.configfile = '
|
130
|
-
SixCore::info 'Please use parameter -? for help'
|
131
|
+
@options.configfile = 'example.yaml'
|
132
|
+
SixCore::log.info 'Please use parameter -? for help'
|
131
133
|
else
|
132
134
|
@options.configfile = ARGV[0]
|
133
135
|
end
|
data/lib/sixarma/bt/sign.rb
CHANGED
@@ -10,8 +10,8 @@ module SixArma
|
|
10
10
|
# create the key
|
11
11
|
name = "#{cfg.file}_v#{@stats.newver}"
|
12
12
|
r = SixArma::Sign.create(name)
|
13
|
-
|
14
|
-
|
13
|
+
FileUtils::cp_r "#{r[2]}/#{r[1]}", "#{@config.outroot}/files/#{type}/keys/", :preserve => true
|
14
|
+
r
|
15
15
|
end
|
16
16
|
|
17
17
|
# Alternative signature creator (per folder)
|
@@ -23,19 +23,19 @@ module SixArma
|
|
23
23
|
# create the key
|
24
24
|
name = "#{cfg.file}_#{folder}_v#{@stats.newver}"
|
25
25
|
r = SixArma::Sign.create(name)
|
26
|
-
|
27
|
-
|
26
|
+
FileUtils::cp_r "#{r[2]}/#{r[1]}", "#{@config.outroot}/files/#{type}/keys/", :preserve => true
|
27
|
+
r
|
28
28
|
end
|
29
29
|
|
30
30
|
# Signs addons
|
31
31
|
# type:: update or full
|
32
32
|
def sign_do(type)
|
33
|
-
SixCore::
|
33
|
+
@@log.info SixCore::prep_msg("Sign Do - #{type}", :format => 'title')
|
34
34
|
|
35
35
|
case @config.sign.keytype
|
36
36
|
when 'whole'
|
37
|
-
|
38
|
-
|
37
|
+
FileUtils::rm_f "#{@config.outroot}/files/update/Keys/#{@config.sign.file}_*.bikey"
|
38
|
+
FileUtils::rm_f "#{@config.outroot}/files/full/Keys/#{@config.sign.file}_*.bikey"
|
39
39
|
signfiles = sign_create('full')
|
40
40
|
signfiles = sign_create('update') # TODO - Lame, function copies instead of create new one, but still - need to move
|
41
41
|
|
@@ -43,10 +43,10 @@ module SixArma
|
|
43
43
|
@config.mods.each do |mod|
|
44
44
|
mod.subfolders.each do |folder|
|
45
45
|
if folder.type == 'addons'
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
SixArma::Sign.sign("#{@config.outroot}
|
46
|
+
@@log.info "Clearing signatures - #{type}/#{mod.destination}/#{folder.name}..."
|
47
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/#{type}/#{mod.destination}/#{folder.name}/*.bisign"]
|
48
|
+
@@log.info "Signing - #{mod.destination}/#{folder.name}..."
|
49
|
+
SixArma::Sign.sign("#{@config.outroot}/files/#{type}/#{mod.destination}/#{folder.name}", signfiles[0])
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -61,18 +61,18 @@ module SixArma
|
|
61
61
|
#sf = mod.destination.gsub('@', '')
|
62
62
|
#sf = mod.destination if sf.nil? or sf.empty?
|
63
63
|
# TODO: Lame update+full processing
|
64
|
-
|
65
|
-
|
64
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/update/Keys/#{@config.sign.file}_#{mod.destination}*.bikey"]
|
65
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/full/Keys/#{@config.sign.file}_#{mod.destination}*.bikey"]
|
66
66
|
|
67
67
|
signfiles = sign_create2('full', mod.destination)
|
68
68
|
signfiles = sign_create2('update', mod.destination)
|
69
69
|
|
70
70
|
mod.subfolders.each do |folder|
|
71
71
|
if folder.type == 'addons'
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
SixArma::Sign.sign("#{@config.outroot}
|
72
|
+
@@log.info "Clearing signatures - #{type}/#{mod.destination}/#{folder.name}..."
|
73
|
+
FileUtils::rm_f Dir["#{@config.outroot}/files/#{type}/#{mod.destination}/#{folder.name}/*.bisign"]
|
74
|
+
@@log.info "Signing - #{mod.destination}/#{folder.name}..."
|
75
|
+
SixArma::Sign.sign("#{@config.outroot}/files/#{type}/#{mod.destination}/#{folder.name}", signfiles[0])
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
data/lib/sixarma/bt/svn.rb
CHANGED
@@ -6,7 +6,7 @@ module SixArma
|
|
6
6
|
# cfg:: Mod Config Object
|
7
7
|
# cfg2:: Mod Stats Object
|
8
8
|
def svn_write_list(cfg, cfg2)
|
9
|
-
|
9
|
+
@@log.info 'Writing SVN Changelog...'
|
10
10
|
cfg.subfolders.each_with_index do |folder,idx|
|
11
11
|
folder2 = cfg2.subfolders[idx]
|
12
12
|
case folder.type
|
@@ -60,7 +60,7 @@ module SixArma
|
|
60
60
|
end
|
61
61
|
|
62
62
|
if t.size > 0
|
63
|
-
|
63
|
+
@@log.info "ABORT: Changed but not found in lists: #{t}"
|
64
64
|
Process.exit
|
65
65
|
end
|
66
66
|
|
@@ -76,13 +76,13 @@ module SixArma
|
|
76
76
|
# cfg:: Mod Config Object
|
77
77
|
# cfg2:: Mod Stats Object
|
78
78
|
def svn_generate(cfg, cfg2)
|
79
|
-
|
79
|
+
@@log.info 'Generating SVN Changelog...'
|
80
80
|
svn = SixCore::Svn.new("#{cfg.path}#{cfg.source}", cfg.svn.user, cfg.svn.pass)
|
81
81
|
|
82
82
|
svn.diff(cfg2.oldrev, cfg2.newrev).each do |entry|
|
83
83
|
# only want to process folders under the given folder
|
84
84
|
cfg.subfolders.each_with_index do |f, idx|
|
85
|
-
entrymod = entry.gsub("#{svn.repos}\\#{f.name}\\", '')
|
85
|
+
entrymod = entry.gsub("#{svn.repos.gsub('/', '\\')}\\#{f.name}\\", '')
|
86
86
|
if entrymod != entry
|
87
87
|
f2 = cfg2.subfolders[idx]
|
88
88
|
if f.type == 'addons'
|
@@ -118,7 +118,7 @@ module SixArma
|
|
118
118
|
# Meta method, runs generate and write_list for every mod
|
119
119
|
def svn_do()
|
120
120
|
@config.mods.each_with_index do |mod,idx|
|
121
|
-
SixCore::
|
121
|
+
@@log.info SixCore::prep_msg("SVN Sync - #{mod.destination}", :format => 'title')
|
122
122
|
# Clean arrays
|
123
123
|
@stats.mods[idx].subfolders.each do |f|
|
124
124
|
f.add = []
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sixarma-bt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sickboy
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-02 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.
|
23
|
+
version: 0.5.0
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sixcore
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.4.0
|
34
34
|
version:
|
35
35
|
description: The program uses a few of my other libraries and tools available for the Armed Assault Game, and subversion, to automate the building process of Full Conversion Mods, while keeping flexibility and configurability in mind
|
36
36
|
email: sb@6thsense.eu
|