pkg-wizard 0.1.27 → 0.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/pkg-wizard.rb CHANGED
@@ -4,7 +4,7 @@ require 'mixlib/cli'
4
4
 
5
5
  module PKGWizard
6
6
 
7
- VERSION = '0.1.27'
7
+ VERSION = '0.1.28'
8
8
 
9
9
  class Distribution
10
10
  def self.detect
@@ -13,6 +13,7 @@ require 'term/ansicolor'
13
13
  require 'pp'
14
14
  require 'yaml'
15
15
  require 'daemons'
16
+ require 'singleton'
16
17
 
17
18
  module FakeColor
18
19
  def red; "<span style='color: red'>#{self}</span>"; end
@@ -48,6 +49,15 @@ module PKGWizard
48
49
  end
49
50
  end
50
51
 
52
+ class BuildBotConfig
53
+ include Singleton
54
+ attr_accessor :mock_profile
55
+
56
+ def initialize
57
+ @mock_profile = "epel-5-x86_64"
58
+ end
59
+ end
60
+
51
61
  class BuildBot < Command
52
62
 
53
63
  registry << { :name => 'build-bot', :klass => self }
@@ -63,7 +73,8 @@ module PKGWizard
63
73
 
64
74
  option :mock_profile,
65
75
  :short => '-m PROF',
66
- :long => '--mock-profile PROF'
76
+ :long => '--mock-profile PROF',
77
+ :description => 'Default Mock Profile'
67
78
 
68
79
  option :port,
69
80
  :short => '-p PORT',
@@ -99,12 +110,17 @@ module PKGWizard
99
110
 
100
111
  post '/tag/:name' do
101
112
  name = params[:name]
113
+ profile = params[:mock_profile]
114
+ meta = {
115
+ :name => name,
116
+ :mock_profile => profile
117
+ }
102
118
  if name.nil? or name.strip.chomp.empty?
103
119
  status 400
104
120
  'Invalid tag'
105
121
  else
106
122
  File.open('tags/.tag', 'w') do |f|
107
- f.puts name
123
+ f.puts meta.to_yaml
108
124
  end
109
125
  "Tagging #{name}..."
110
126
  end
@@ -134,6 +150,11 @@ module PKGWizard
134
150
 
135
151
  post '/build/' do
136
152
  pkg = params[:pkg]
153
+ build_profile = params[:mock_profile] || BuildBotConfig.instance.mock_profile
154
+ metadata = {
155
+ :mock_profile => build_profile
156
+ }
157
+
137
158
  if pkg.nil?
138
159
  Logger.instance.error '400: Invalid arguments. Needs pkg in post request'
139
160
  status 400
@@ -142,6 +163,9 @@ module PKGWizard
142
163
  incoming_file = "incoming/#{pkg[:filename]}"
143
164
  puts "* incoming file".ljust(40) + "#{pkg[:filename]}"
144
165
  FileUtils.cp pkg[:tempfile].path, incoming_file
166
+ File.open("incoming/#{pkg[:filename]}.metadata", 'w') do |f|
167
+ f.puts metadata.to_yaml
168
+ end
145
169
  end
146
170
  end
147
171
 
@@ -314,6 +338,7 @@ module PKGWizard
314
338
  end
315
339
 
316
340
  mock_profile = cli.config[:mock_profile]
341
+ BuildBotConfig.instance.mock_profile = mock_profile
317
342
  if not mock_profile
318
343
  $stderr.puts 'Invalid mock profile.'
319
344
  $stderr.puts cli.opt_parser.help
@@ -367,20 +392,40 @@ module PKGWizard
367
392
  tag_sched = Rufus::Scheduler.start_new
368
393
  tag_sched.every '2s', :blocking => true do
369
394
  if File.exist?('tags/.tag')
370
- tag = File.read('tags/.tag').strip.chomp
371
- tag_dir = "tags/#{tag}"
372
- Dir.mkdir(tag_dir) if not File.exist?(tag_dir)
373
- Dir["output/*/result/*.rpm"].sort.each do |rpm|
374
- FileUtils.cp rpm, tag_dir
375
- end
376
- puts "* create tag #{tag} repo START"
377
- output = `createrepo -q -o #{tag_dir} --update -d #{tag_dir} 2>&1`
378
- if $? != 0
379
- puts "create tag #{tag} operation failed: #{output}".red.bold
395
+ tag_meta = YAML.load_file 'tags/.tag' rescue nil
396
+ if tag_meta
397
+ tag_dir = "tags/#{tag_meta[:name]}"
398
+ tag_mock_profile = tag_meta[:mock_profile]
399
+
400
+ tag_pkgs = []
401
+ Dir["output/*/result/*.rpm"].sort.each do |rpm|
402
+ p = YAML.load_file(File.join(File.dirname(rpm), '/../meta.yml'))[:mock_profile]
403
+ if p == tag_mock_profile or tag_mock_profile.nil?
404
+ tag_pkgs << rpm
405
+ end
406
+ end
407
+
408
+ if not tag_pkgs.empty?
409
+ puts "* create tag #{tag_meta[:name]} repo START"
410
+ Dir.mkdir(tag_dir) if not File.exist?(tag_dir)
411
+ tag_pkgs.each do |rpm|
412
+ FileUtils.cp rpm, tag_dir
413
+ end
414
+ output = `createrepo -q -o #{tag_dir} --update -d #{tag_dir} 2>&1`
415
+ if $? != 0
416
+ puts "create tag #{tag_meta[:name]} operation failed: #{output}".red.bold
417
+ else
418
+ puts "* create tag #{tag_meta[:name]} DONE"
419
+ end
420
+ else
421
+ puts "* WARNING: trying to create a tag with no packages."
422
+ end
423
+ FileUtils.rm 'tags/.tag'
380
424
  else
381
- puts "* create tag #{tag} DONE"
425
+ puts "* ERROR: error creating tag, could not parse tag metadata."
382
426
  end
383
- FileUtils.rm 'tags/.tag'
427
+ else
428
+
384
429
  end
385
430
  end
386
431
 
@@ -429,6 +474,7 @@ module PKGWizard
429
474
  scheduler = Rufus::Scheduler.start_new
430
475
  scheduler.every '2s', :blocking => true do
431
476
  meta[:start_time] = Time.now
477
+ meta[:mock_profile] = mock_profile
432
478
  queue = Dir['incoming/*.src.rpm'].sort_by {|filename| File.mtime(filename) }
433
479
  if not queue.empty?
434
480
  # Clean workspace first
@@ -436,7 +482,22 @@ module PKGWizard
436
482
  FileUtils.rm_rf j
437
483
  end
438
484
  job_dir = "workspace/job_#{Time.now.strftime '%Y%m%d_%H%M%S'}"
485
+ imeta_file = "#{queue.first}.metadata"
439
486
  qfile = File.join(job_dir, File.basename(queue.first))
487
+ if File.exist?(imeta_file)
488
+ begin
489
+ imeta = YAML.load_file(imeta_file)
490
+ if imeta
491
+ m = YAML.load_file(imeta_file)
492
+ meta[:mock_profile] = m[:mock_profile] || BuildBotConfig.mock_profile
493
+ end
494
+ rescue Exception
495
+ puts "* ERROR: parsing #{queue.first} metadata"
496
+ end
497
+ FileUtils.rm imeta_file
498
+ else
499
+ puts "* WARNING: #{queue.first} does not have metadata!"
500
+ end
440
501
  job_time = Time.now.strftime '%Y%m%d_%H%M%S'
441
502
  result_dir = job_dir + '/result'
442
503
  FileUtils.mkdir_p result_dir
@@ -446,18 +507,18 @@ module PKGWizard
446
507
  f.puts meta.to_yaml
447
508
  end
448
509
  FileUtils.mv queue.first, qfile
449
- puts "Building pkg [job_#{job_time}]".ljust(40).yellow.bold + "#{File.basename(qfile)}"
510
+ puts "Building pkg [job_#{job_time}][#{meta[:mock_profile]}] ".ljust(40).yellow.bold + "#{File.basename(qfile)}"
450
511
 
451
512
  rdir = nil
452
513
  begin
453
- PKGWizard::Mock.srpm :srpm => qfile, :profile => mock_profile, :resultdir => result_dir
514
+ PKGWizard::Mock.srpm :srpm => qfile, :profile => meta[:mock_profile], :resultdir => result_dir
454
515
  meta[:status] = 'ok'
455
516
  meta[:end_time] = Time.now
456
517
  meta[:build_time] = meta[:end_time] - meta[:start_time]
457
- puts "Build OK [job_#{job_time}] #{meta[:build_time].to_i}s ".ljust(40).green.bold + "#{File.basename(qfile)}"
518
+ puts "Build OK [job_#{job_time}][#{meta[:mock_profile]}] ".ljust(40).green.bold + "#{File.basename(qfile)}"
458
519
  rescue Exception => e
459
520
  meta[:status] = 'error'
460
- puts "Build FAILED [job_#{job_time}]".ljust(40).red.bold + "#{File.basename(qfile)}"
521
+ puts "Build FAILED [job_#{job_time}][#{meta[:mock_profile]}]".ljust(40).red.bold + "#{File.basename(qfile)}"
461
522
  File.open(job_dir + '/buildbot.log', 'w') do |f|
462
523
  f.puts "#{e.backtrace.join("\n")}"
463
524
  f.puts "#{e.message}"
@@ -0,0 +1,69 @@
1
+ require 'pkg-wizard/command'
2
+ require 'pkg-wizard/rpm'
3
+ require 'tmpdir'
4
+ require 'fileutils'
5
+ require 'pkg-wizard/streaming_downloader'
6
+ require 'uri'
7
+
8
+ module PKGWizard
9
+ class DownloadSources < Command
10
+ registry << { :name => 'download-sources', :klass => self }
11
+
12
+ option :help,
13
+ :short => "-h",
14
+ :long => "--help",
15
+ :description => "Show this message",
16
+ :on => :tail,
17
+ :boolean => true,
18
+ :show_options => true,
19
+ :exit => 0
20
+
21
+ option :define,
22
+ :short => '-d MACRO',
23
+ :long => '--define MACRO',
24
+ :description => 'Define macro that will be replaced in the sources'
25
+
26
+ option :spec,
27
+ :short => '-s SPEC',
28
+ :long => '--spec SPEC',
29
+ :description => 'Spec file where the sources are declared'
30
+
31
+ def self.perform
32
+ cmd = DownloadSources.new
33
+ cmd.banner = "\nUsage: pkgwiz download-sources (options)\n\n"
34
+ cmd.parse_options
35
+
36
+ spec = nil
37
+ if cmd.config[:spec]
38
+ spec = PKGWizard::SpecFile.parse cmd.config[:spec]
39
+ else
40
+ files = Dir["*.spec"]
41
+ if files.size > 1
42
+ $stderr.puts 'Multiple spec files found in current dir. Use --spec option.'
43
+ exit 1
44
+ elsif files.empty?
45
+ $stderr.puts 'No spec files found in current dir. Use --spec option.'
46
+ exit 1
47
+ else
48
+ spec = PKGWizard::SpecFile.parse files[0]
49
+ end
50
+ end
51
+ define = cmd.config[:define]
52
+ spec.download_source_files(define) do |s|
53
+ puts "Downloading #{s}..."
54
+ end
55
+ end
56
+
57
+ def self.download_from_url(url, tmpdir = '.')
58
+ uri = URI.parse(url)
59
+ remote_pkg = uri.path.split('/').last
60
+ d = StreamingDownloader.new
61
+ f = "#{tmpdir}/#{remote_pkg}"
62
+ tmpfile = File.new(f, 'w')
63
+ d.download!(url, tmpfile)
64
+ tmpfile.close
65
+ f
66
+ end
67
+
68
+ end
69
+ end
@@ -30,7 +30,7 @@ module PKGWizard
30
30
  end
31
31
  if File.exist?('/etc/redhat-release')
32
32
  puts '* Installing RHEL/Fedora requirements... '
33
- rhel_ver = File.readlines('/etc/redhat-release').first.match(/release\s+(\d)\./)[1] rescue nil
33
+ rhel_ver = File.readlines('/etc/redhat-release').first.match(/release\s+(\d+)/)[1] rescue nil
34
34
  if not rhel_ver
35
35
  $stderr.puts "Unsupported RHEL/Fedora distribution"
36
36
  exit 1
@@ -47,6 +47,11 @@ module PKGWizard
47
47
  :description => 'Directory for downloaded files to be put',
48
48
  :default => '/tmp'
49
49
 
50
+ option :mock_profile,
51
+ :short => '-m ',
52
+ :long => '--mock-profile PROFILE',
53
+ :description => 'Mock profile to use for building'
54
+
50
55
  def self.perform
51
56
  cli = RemoteBuild.new
52
57
  cli.banner = "\nUsage: pkgwiz remote-build (options)\n\n"
@@ -124,9 +129,12 @@ module PKGWizard
124
129
  count = 0
125
130
  $stdout.sync = true
126
131
  line_reset = "\r\e[0K"
132
+ params = {}
133
+ params[:mock_profile] = cli.config[:mock_profile] if cli.config[:mock_profile]
134
+ params[:pkg] = fo
127
135
  res = StreamingUploader.post(
128
136
  bbot_url + '/build/',
129
- { 'pkg' => fo }
137
+ params
130
138
  ) do |size|
131
139
  count += size
132
140
  per = (100*count)/fsize
@@ -1,27 +1,179 @@
1
1
  require 'fileutils'
2
+ require 'pkg-wizard/streaming_downloader'
3
+ require 'uri'
2
4
 
3
5
  module PKGWizard
4
6
  class NoSpecFound < Exception; end
5
7
  class RPMBuildError < Exception; end
6
8
 
7
9
  class RPM
10
+
11
+ def initialize(pkg)
12
+ @pkg = pkg.strip.chomp
13
+ raise ArgumentError.new("Invalid package.") if pkg !~ /.*\.rpm$/
14
+ raise ArgumentError.new("Invalid package.") if not File.exist?(pkg)
15
+ end
16
+
17
+ def source_package_name
18
+ info = `rpm -qi -qp #{@pkg} 2>/dev/null`.lines
19
+ info.find do |s|
20
+ s =~ /^Source RPM\s*:(.*)$/
21
+ end
22
+ $1.strip.chomp
23
+ end
24
+
8
25
  end
9
26
 
10
27
  class SpecFile
11
- attr_accessor :name, :release, :version
28
+ attr_accessor :spec
12
29
 
13
30
  def self.parse(file)
14
- f = File.read(file)
31
+ f = ''
32
+ if File.exist?(file)
33
+ f = File.read(file)
34
+ else
35
+ f = file
36
+ end
15
37
  spec = SpecFile.new
16
- spec.name = f.match(/Name:(.*?)$/)[1].strip.chomp
17
- spec.version = f.match(/Version:(.*?)$/)[1].strip.chomp
18
- spec.release = f.match(/Release:(.*?)$/)[1].strip.chomp.gsub(/%\{\?.*\}/, '')
38
+ spec.spec = f
19
39
  spec
20
40
  end
21
41
 
42
+ def files
43
+ buf = []
44
+ in_files = false
45
+ @spec.each_line do |l|
46
+ if l =~ /^\s*%files/
47
+ in_files = true
48
+ next
49
+ end
50
+ if l =~ /^\s*%(changelog|pre|pro|prep|preun|postun|post|install|clean|build|define)/ and in_files
51
+ break
52
+ end
53
+ if in_files
54
+ buf << l.strip.chomp if not l.strip.chomp.empty?
55
+ end
56
+ end
57
+ buf
58
+ end
59
+
60
+ def release
61
+ @spec.match(/Release:(.*?)$/i)[1].strip.chomp.gsub(/%\{\?.*\}/, '') rescue nil
62
+ end
63
+
64
+ def name
65
+ @spec.match(/Name:(.*?)$/i)[1].strip.chomp rescue nil
66
+ end
67
+
68
+ def version
69
+ @spec.match(/Version:(.*?)$/i)[1].strip.chomp rescue nil
70
+ end
71
+
72
+ def sources
73
+ s = []
74
+ @spec.each_line do |line|
75
+ if line =~ /^\s*Source\d*:(.*)$/i
76
+ s << $1.strip.chomp
77
+ end
78
+ end
79
+ s
80
+ end
81
+
82
+ def build_requires
83
+ build_requires = []
84
+ @spec.each_line do |l|
85
+ if l =~ /^\s*buildrequires:(.*)$/i
86
+ build_requires = $1.split
87
+ build_requires.reject! { |i| i !~ /^[a-zA-Z0-9]/ }
88
+ end
89
+ end
90
+ build_requires
91
+ end
92
+
93
+ def requires
94
+ requires = []
95
+ @spec.each_line do |l|
96
+ if l =~ /^\s*requires:(.*)$/i
97
+ requires = $1.split
98
+ requires.reject! { |i| i !~ /^[a-zA-Z0-9]/ }
99
+ end
100
+ end
101
+ requires
102
+ end
103
+
104
+ def changelog
105
+ buf = ""
106
+ in_changelog = false
107
+ @spec.each_line do |l|
108
+ if l =~ /%changelog/
109
+ in_changelog = true
110
+ next
111
+ end
112
+ if in_changelog
113
+ buf += l
114
+ end
115
+ end
116
+ return buf
117
+ end
118
+
119
+ def changelog_entries
120
+ entries = []
121
+ cursor = -1
122
+ changelog.each_line do |l|
123
+ if l =~ /^\*/
124
+ cursor += 1
125
+ entries[cursor] = l
126
+ else
127
+ entries[cursor] += l if not l.strip.chomp.empty?
128
+ end
129
+ end
130
+ entries
131
+ end
132
+
133
+ def download_source_files(defines = [], dest_dir = '.')
134
+ define = ''
135
+ if defines.is_a? Array and defines.size >= 1
136
+ define = defines[0]
137
+ elsif defines.is_a? String
138
+ define = defines
139
+ else
140
+ define = nil
141
+ end
142
+ if define
143
+ if define !~ /\w\s+\w/
144
+ raise ArgumentError.new "Invalid --define syntax. Use 'macro_name macro_value'"
145
+ else
146
+ new_sources = []
147
+ def_tokens = define.split
148
+ sources.each do |s|
149
+ new_sources << s.gsub(/%\{\??#{def_tokens[0]}\}/, def_tokens[1])
150
+ end
151
+ end
152
+ else
153
+ new_sources = sources
154
+ end
155
+ new_sources.each do |s|
156
+ next if s !~ /http:\/\//
157
+ yield s if block_given?
158
+ download_from_url s, dest_dir
159
+ end
160
+ end
161
+
22
162
  def pkgname
23
163
  "#{name}-#{version}-#{release}"
24
164
  end
165
+
166
+ private
167
+ def download_from_url(url, tmpdir = '.')
168
+ uri = URI.parse(url)
169
+ remote_pkg = uri.path.split('/').last
170
+ d = StreamingDownloader.new
171
+ f = "#{tmpdir}/#{remote_pkg}"
172
+ tmpfile = File.new(f, 'w')
173
+ d.download!(url, tmpfile)
174
+ tmpfile.close
175
+ f
176
+ end
25
177
 
26
178
  end
27
179
 
@@ -1,3 +1,7 @@
1
+ require 'net/http'
2
+ require 'openssl'
3
+ require 'uri'
4
+
1
5
  module PKGWizard
2
6
 
3
7
  #
@@ -54,9 +58,10 @@ module PKGWizard
54
58
  destination_file.write(segment)
55
59
  end
56
60
  end
57
- end
58
- rescue SocketError
59
- raise Errors::DownloaderHTTPSocketError.new
60
- end
61
+ end
62
+ puts
63
+ rescue SocketError
64
+ raise Errors::DownloaderHTTPSocketError.new
65
+ end
61
66
  end
62
67
  end
@@ -14,21 +14,17 @@
14
14
  # Source networking configuration.
15
15
  . /etc/sysconfig/network
16
16
 
17
- if [ -f /etc/sysconfig/pkgwiz-buildbot ];then
18
- . /etc/sysconfig/pkgwiz-buildbot
17
+ MOCK_PROFILE='epel-5-x86_64'
18
+
19
+ if [ -f /etc/sysconfig/pkg-wizard ];then
20
+ . /etc/sysconfig/pkg-wizard
19
21
  else
20
- echo "Config file not found in /etc/sysconfig/pkgwiz-buildbot. Aborting."
21
- exit 1
22
+ echo "WARNING: /etc/sysconfig/pkg-wizard config missing"
22
23
  fi
23
24
 
24
25
  # Check that networking is up.
25
26
  [ "$NETWORKING" = "no" ] && exit 0
26
27
 
27
- if [ -z "$MOCK_PROFILE" ]; then
28
- echo "Mock profile not defined in /etc/sysconfig/pkgwiz-buildbot. Aborting."
29
- exit 1
30
- fi
31
-
32
28
  pkgwiz="/usr/bin/pkgwiz"
33
29
  workingdir=/home/buildbot
34
30
  user="buildbot"
@@ -0,0 +1,79 @@
1
+ require 'pkg-wizard'
2
+ require 'pkg-wizard/rpm'
3
+ require 'test/unit'
4
+
5
+ include PKGWizard
6
+
7
+ class SpecFileTest < Test::Unit::TestCase
8
+
9
+
10
+ def test_sources
11
+ assert SpecFile.parse('').sources.empty?
12
+ assert SpecFile.parse("""
13
+ Source: foobar
14
+ Source1: stuff
15
+ Source0: bar
16
+ """).sources.size == 3
17
+ end
18
+
19
+ def test_name
20
+ assert SpecFile.parse('').name.nil?
21
+ assert SpecFile.parse('Name: package-foo').name == 'package-foo'
22
+ assert SpecFile.parse('name: package-foo').name == 'package-foo'
23
+ end
24
+
25
+ def test_version
26
+ assert SpecFile.parse('').version.nil?
27
+ assert SpecFile.parse('Version: 1.1').version == '1.1'
28
+ assert SpecFile.parse('version: 1.1').version == '1.1'
29
+ end
30
+
31
+ def test_release
32
+ assert SpecFile.parse('').release.nil?
33
+ assert SpecFile.parse('Release: 1').release == '1'
34
+ assert SpecFile.parse('release: 1').release == '1'
35
+ end
36
+
37
+ def test_files
38
+ assert SpecFile.parse('').files.empty?
39
+ assert SpecFile.parse("""
40
+ Source: foobar
41
+ Source1: stuff
42
+ Source0: bar
43
+ Name: foo
44
+ Release: 1
45
+ Version: 1.1
46
+ %pre
47
+ foo
48
+ %install
49
+ %post
50
+ foo
51
+ %files
52
+ /foo/bar
53
+ %config /etc/foo
54
+ %defattr(-,root,root)
55
+
56
+ %changelog
57
+ """).files.size == 3
58
+ assert SpecFile.parse("""
59
+ Source: foobar
60
+ Source1: stuff
61
+ Source0: bar
62
+ Name: foo
63
+ Release: 1
64
+ Version: 1.1
65
+ %pre
66
+ foo
67
+ %install
68
+ %post
69
+ foo
70
+ %files
71
+ /foo/bar
72
+ %config /etc/foo
73
+ %defattr(-,root,root)
74
+
75
+ %changelog
76
+ """).files.first == '/foo/bar'
77
+ end
78
+
79
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pkg-wizard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 45
5
- prerelease: false
4
+ hash: 35
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 27
10
- version: 0.1.27
9
+ - 28
10
+ version: 0.1.28
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sergio Rubio
@@ -15,12 +15,9 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-13 00:00:00 +02:00
19
- default_executable: pkgwiz
18
+ date: 2011-07-20 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- type: :development
23
- name: bundler
24
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
25
22
  none: false
26
23
  requirements:
@@ -32,11 +29,11 @@ dependencies:
32
29
  - 0
33
30
  - 0
34
31
  version: 1.0.0
32
+ type: :development
35
33
  requirement: *id001
36
34
  prerelease: false
35
+ name: bundler
37
36
  - !ruby/object:Gem::Dependency
38
- type: :development
39
- name: jeweler
40
37
  version_requirements: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
39
  requirements:
@@ -48,11 +45,11 @@ dependencies:
48
45
  - 5
49
46
  - 2
50
47
  version: 1.5.2
48
+ type: :development
51
49
  requirement: *id002
52
50
  prerelease: false
51
+ name: jeweler
53
52
  - !ruby/object:Gem::Dependency
54
- type: :runtime
55
- name: SystemTimer
56
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
57
54
  none: false
58
55
  requirements:
@@ -62,11 +59,11 @@ dependencies:
62
59
  segments:
63
60
  - 0
64
61
  version: "0"
62
+ type: :runtime
65
63
  requirement: *id003
66
64
  prerelease: false
65
+ name: SystemTimer
67
66
  - !ruby/object:Gem::Dependency
68
- type: :runtime
69
- name: resque
70
67
  version_requirements: &id004 !ruby/object:Gem::Requirement
71
68
  none: false
72
69
  requirements:
@@ -76,11 +73,11 @@ dependencies:
76
73
  segments:
77
74
  - 0
78
75
  version: "0"
76
+ type: :runtime
79
77
  requirement: *id004
80
78
  prerelease: false
79
+ name: resque
81
80
  - !ruby/object:Gem::Dependency
82
- type: :runtime
83
- name: git
84
81
  version_requirements: &id005 !ruby/object:Gem::Requirement
85
82
  none: false
86
83
  requirements:
@@ -90,11 +87,11 @@ dependencies:
90
87
  segments:
91
88
  - 0
92
89
  version: "0"
90
+ type: :runtime
93
91
  requirement: *id005
94
92
  prerelease: false
93
+ name: git
95
94
  - !ruby/object:Gem::Dependency
96
- type: :runtime
97
- name: sinatra
98
95
  version_requirements: &id006 !ruby/object:Gem::Requirement
99
96
  none: false
100
97
  requirements:
@@ -104,11 +101,11 @@ dependencies:
104
101
  segments:
105
102
  - 0
106
103
  version: "0"
104
+ type: :runtime
107
105
  requirement: *id006
108
106
  prerelease: false
107
+ name: sinatra
109
108
  - !ruby/object:Gem::Dependency
110
- type: :runtime
111
- name: thin
112
109
  version_requirements: &id007 !ruby/object:Gem::Requirement
113
110
  none: false
114
111
  requirements:
@@ -118,11 +115,11 @@ dependencies:
118
115
  segments:
119
116
  - 0
120
117
  version: "0"
118
+ type: :runtime
121
119
  requirement: *id007
122
120
  prerelease: false
121
+ name: thin
123
122
  - !ruby/object:Gem::Dependency
124
- type: :runtime
125
- name: rufus-scheduler
126
123
  version_requirements: &id008 !ruby/object:Gem::Requirement
127
124
  none: false
128
125
  requirements:
@@ -132,11 +129,11 @@ dependencies:
132
129
  segments:
133
130
  - 0
134
131
  version: "0"
132
+ type: :runtime
135
133
  requirement: *id008
136
134
  prerelease: false
135
+ name: rufus-scheduler
137
136
  - !ruby/object:Gem::Dependency
138
- type: :runtime
139
- name: term-ansicolor
140
137
  version_requirements: &id009 !ruby/object:Gem::Requirement
141
138
  none: false
142
139
  requirements:
@@ -146,11 +143,11 @@ dependencies:
146
143
  segments:
147
144
  - 0
148
145
  version: "0"
146
+ type: :runtime
149
147
  requirement: *id009
150
148
  prerelease: false
149
+ name: term-ansicolor
151
150
  - !ruby/object:Gem::Dependency
152
- type: :runtime
153
- name: mixlib-cli
154
151
  version_requirements: &id010 !ruby/object:Gem::Requirement
155
152
  none: false
156
153
  requirements:
@@ -160,11 +157,11 @@ dependencies:
160
157
  segments:
161
158
  - 0
162
159
  version: "0"
160
+ type: :runtime
163
161
  requirement: *id010
164
162
  prerelease: false
163
+ name: mixlib-cli
165
164
  - !ruby/object:Gem::Dependency
166
- type: :runtime
167
- name: daemons
168
165
  version_requirements: &id011 !ruby/object:Gem::Requirement
169
166
  none: false
170
167
  requirements:
@@ -174,8 +171,10 @@ dependencies:
174
171
  segments:
175
172
  - 0
176
173
  version: "0"
174
+ type: :runtime
177
175
  requirement: *id011
178
176
  prerelease: false
177
+ name: daemons
179
178
  description: Tools to manage,create and build distribution packages
180
179
  email: rubiojr@frameos.org
181
180
  executables:
@@ -205,6 +204,7 @@ files:
205
204
  - lib/pkg-wizard/command.rb
206
205
  - lib/pkg-wizard/commands/build_bot.rb
207
206
  - lib/pkg-wizard/commands/create_srpm.rb
207
+ - lib/pkg-wizard/commands/download_sources.rb
208
208
  - lib/pkg-wizard/commands/init_env.rb
209
209
  - lib/pkg-wizard/commands/remote_build.rb
210
210
  - lib/pkg-wizard/git.rb
@@ -229,7 +229,7 @@ files:
229
229
  - resources/public/screen.css
230
230
  - resources/public/server.js.tmpl
231
231
  - resources/public/ws.js
232
- has_rdoc: true
232
+ - test/test_specfile.rb
233
233
  homepage: http://github.com/rubiojr/pkg-wizard
234
234
  licenses:
235
235
  - MIT
@@ -259,9 +259,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
259
  requirements: []
260
260
 
261
261
  rubyforge_project:
262
- rubygems_version: 1.3.7
262
+ rubygems_version: 1.8.5
263
263
  signing_key:
264
264
  specification_version: 3
265
265
  summary: Package Wizards Tools
266
- test_files: []
267
-
266
+ test_files:
267
+ - test/test_specfile.rb