polisher 0.4 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -661
- data/README.md +39 -0
- data/Rakefile +11 -88
- data/bin/binary_gem_resolver.rb +95 -0
- data/bin/gem_dependency_checker.rb +165 -0
- data/bin/git_gem_updater.rb +86 -0
- data/bin/ruby_rpm_spec_updater.rb +29 -0
- data/lib/polisher.rb +19 -0
- data/lib/polisher/apt.rb +12 -0
- data/lib/polisher/bodhi.rb +21 -0
- data/lib/polisher/bugzilla.rb +9 -0
- data/lib/polisher/core.rb +33 -0
- data/lib/polisher/errata.rb +43 -0
- data/lib/polisher/fedora.rb +43 -0
- data/lib/polisher/gem.rb +155 -0
- data/lib/polisher/gemfile.rb +72 -0
- data/lib/polisher/gemspec.rb +32 -0
- data/lib/polisher/git.rb +135 -0
- data/lib/polisher/koji.rb +54 -0
- data/lib/polisher/rhn.rb +14 -0
- data/lib/polisher/rpmspec.rb +254 -0
- data/lib/polisher/upstream.rb +29 -0
- data/lib/polisher/vendor.rb +9 -0
- data/lib/polisher/version_checker.rb +100 -0
- data/lib/polisher/yum.rb +28 -0
- data/spec/core_spec.rb +64 -0
- data/spec/fedora_spec.rb +14 -0
- data/spec/gem_spec.rb +82 -0
- data/spec/gemfile_spec.rb +45 -0
- data/spec/git_spec.rb +74 -0
- data/spec/rpmspec_spec.rb +105 -0
- data/spec/spec_helper.rb +50 -37
- data/spec/upstream_spec.rb +39 -0
- metadata +173 -179
- data/COPYING +0 -8
- data/README.rdoc +0 -105
- data/TODO +0 -7
- data/bin/server +0 -4
- data/config.ru +0 -25
- data/config/database.yml +0 -13
- data/config/polisher.yml +0 -5
- data/db/connection.rb +0 -52
- data/db/migrations/001_create_projects.rb +0 -23
- data/db/migrations/002_create_sources.rb +0 -25
- data/db/migrations/003_create_project_source_versions.rb +0 -28
- data/db/migrations/004_create_events.rb +0 -27
- data/db/migrations/005_create_project_dependencies.rb +0 -28
- data/db/models/event.rb +0 -87
- data/db/models/project.rb +0 -110
- data/db/models/project_dependency.rb +0 -27
- data/db/models/project_source_version.rb +0 -31
- data/db/models/source.rb +0 -101
- data/lib/common.rb +0 -71
- data/lib/dsl.rb +0 -292
- data/lib/event_handlers.rb +0 -166
- data/lib/gem_adapter.rb +0 -94
- data/lib/sinatra/url_for.rb +0 -40
- data/polisher.rb +0 -372
- data/public/stylesheets/style.css +0 -67
- data/spec/common_spec.rb +0 -28
- data/spec/dsl_spec.rb +0 -357
- data/spec/event_handlers_spec.rb +0 -300
- data/spec/gem_adapter_spec.rb +0 -89
- data/spec/models_spec.rb +0 -721
- data/spec/polisher_spec.rb +0 -573
- data/views/layout.haml +0 -22
- data/views/projects/index.haml +0 -42
- data/views/projects/index.html.haml +0 -38
- data/views/result.haml +0 -9
- data/views/sources/index.haml +0 -24
- data/views/sources/index.html.haml +0 -26
@@ -0,0 +1,29 @@
|
|
1
|
+
# Polisher Upstream Operations
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'polisher/gem'
|
7
|
+
require 'polisher/gemfile'
|
8
|
+
|
9
|
+
module Polisher
|
10
|
+
class Upstream
|
11
|
+
# Parse the specified upstream source, automatically
|
12
|
+
# dispatches to correct upstream parser depending on
|
13
|
+
# format of specified source
|
14
|
+
#
|
15
|
+
# @returns instance of class representing parsed source
|
16
|
+
def self.parse(source)
|
17
|
+
if source.gem?
|
18
|
+
Polisher::Gem.parse(:gem => source)
|
19
|
+
|
20
|
+
elsif source.gemspec?
|
21
|
+
Polisher::Gem.parse(:gemspec => source)
|
22
|
+
|
23
|
+
elsif source.gemfile?
|
24
|
+
Polisher::Gemfile.parse(source)
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# Helpers to check versions
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'polisher/gem'
|
7
|
+
require 'polisher/fedora'
|
8
|
+
require 'polisher/koji'
|
9
|
+
require 'polisher/git'
|
10
|
+
require 'polisher/bodhi'
|
11
|
+
require 'polisher/yum'
|
12
|
+
|
13
|
+
module Polisher
|
14
|
+
class VersionChecker
|
15
|
+
GEM_TARGET = :gem
|
16
|
+
KOJI_TARGET = :koji
|
17
|
+
FEDORA_TARGET = :fedora
|
18
|
+
GIT_TARGET = :git
|
19
|
+
YUM_TARGET = :yum
|
20
|
+
ALL_TARGETS = [GEM_TARGET, KOJI_TARGET, FEDORA_TARGET,
|
21
|
+
GIT_TARGET, YUM_TARGET]
|
22
|
+
|
23
|
+
# Enable the specified target(s) in the list of target to check
|
24
|
+
def self.check(target)
|
25
|
+
@check_list ||= []
|
26
|
+
if target.is_a?(Array)
|
27
|
+
target.each { |t| self.check(t) }
|
28
|
+
return
|
29
|
+
end
|
30
|
+
|
31
|
+
@check_list << target
|
32
|
+
end
|
33
|
+
|
34
|
+
# Retrieve all the versions of the specified package using
|
35
|
+
# the configured targets.
|
36
|
+
#
|
37
|
+
# If not specified, all targets are checked
|
38
|
+
# @param [String] name name of package to query
|
39
|
+
# @param [Callable] bl optional block to invoke with versions retrieved
|
40
|
+
# @returns [Hash<target,Array<String>>] returns a hash of target to versions
|
41
|
+
# available for specified package
|
42
|
+
def self.versions_for(name, &bl)
|
43
|
+
@check_list ||= ALL_TARGETS
|
44
|
+
versions = {}
|
45
|
+
|
46
|
+
if @check_list.include?(GEM_TARGET)
|
47
|
+
versions.merge! :gem => Gem.local_versions_for(name, &bl)
|
48
|
+
end
|
49
|
+
|
50
|
+
if @check_list.include?(FEDORA_TARGET)
|
51
|
+
versions.merge! :fedora => Fedora.versions_for(name, &bl)
|
52
|
+
end
|
53
|
+
|
54
|
+
if @check_list.include?(KOJI_TARGET)
|
55
|
+
versions.merge! :koji => Koji.versions_for(name, &bl)
|
56
|
+
end
|
57
|
+
|
58
|
+
if @check_list.include?(GIT_TARGET)
|
59
|
+
versions.merge! :git => [GitPackage.version_for(name, &bl)]
|
60
|
+
end
|
61
|
+
|
62
|
+
if @check_list.include?(YUM_TARGET)
|
63
|
+
versions.merge! :yum => [Yum.version_for(name, &bl)]
|
64
|
+
end
|
65
|
+
|
66
|
+
#bodhi_version = Bodhi.versions_for(name, &bl)
|
67
|
+
#errata_version = Errata.version_for('url?', name, &bl)
|
68
|
+
|
69
|
+
versions
|
70
|
+
end
|
71
|
+
|
72
|
+
# Return version of package most frequent in all configured targets.
|
73
|
+
# Invokes query as normal then counts versions over all targets and
|
74
|
+
# returns the max.
|
75
|
+
def self.version_for(name)
|
76
|
+
versions = self.versions_for(name).values
|
77
|
+
versions.inject(Hasn.new(0)) { |total, i| total[i] += 1; total }.first
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Helper module to be included in components
|
82
|
+
# that contain lists of dependencies which include version information
|
83
|
+
module VersionedDependencies
|
84
|
+
|
85
|
+
# Return list of versions of dependencies of component.
|
86
|
+
#
|
87
|
+
# Requires module define 'deps' method which returns list
|
88
|
+
# of gem names representing component dependencies. List
|
89
|
+
# will be iterated over, versions will be looked up
|
90
|
+
# recursively and returned
|
91
|
+
def dependency_versions(&bl)
|
92
|
+
versions = {}
|
93
|
+
self.deps.each do |dep|
|
94
|
+
gem = Polisher::Gem.retrieve(dep)
|
95
|
+
versions.merge!(gem.versions(:recursive => true, :dev_deps => true, &bl))
|
96
|
+
end
|
97
|
+
versions
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/polisher/yum.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Polisher Yum Operations
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'pkgwat'
|
7
|
+
|
8
|
+
module Polisher
|
9
|
+
class Yum
|
10
|
+
YUM_CMD = '/usr/bin/yum'
|
11
|
+
|
12
|
+
# Retrieve version of gem available in yum
|
13
|
+
#
|
14
|
+
# @param [String] name name of gem to loopup
|
15
|
+
# @param [Callable] bl optional callback to invoke with version retrieved
|
16
|
+
# @returns [String] version of gem in yum or nil if not found
|
17
|
+
def self.version_for(name, &bl)
|
18
|
+
version = nil
|
19
|
+
out=`#{YUM_CMD} info rubygem-#{name} 2> /dev/null`
|
20
|
+
if out.include?("Version")
|
21
|
+
version = out.lines.to_a.find { |l| l =~ /^Version.*/ }
|
22
|
+
version = version.split(':').last.strip
|
23
|
+
end
|
24
|
+
bl.call(:yum, name, [version]) unless(bl.nil?)
|
25
|
+
version
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/core_spec.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Polisher Core Extensions Specs
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'spec_helper'
|
7
|
+
require 'polisher/core'
|
8
|
+
|
9
|
+
describe String do
|
10
|
+
describe "#gem?" do
|
11
|
+
context "string represents path to gem" do
|
12
|
+
it "returns true" do
|
13
|
+
"/foo/rails.gem".should be_gem
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "string does not represent path to gem" do
|
18
|
+
it "returns false" do
|
19
|
+
"/foo/rails.gemspec".should_not be_gem
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#gemspec?" do
|
25
|
+
context "string represents path to gemspec" do
|
26
|
+
it "returns true" do
|
27
|
+
"/foo/rails.gemspec".should be_gemspec
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "string does not represent path to gemspec" do
|
32
|
+
it "returns false" do
|
33
|
+
"/foo/rails.gem".should_not be_gemspec
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#gemfile?" do
|
39
|
+
context "string represents path to gemfile" do
|
40
|
+
it "returns true" do
|
41
|
+
"/foo/Gemfile".should be_gemfile
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "string does not represent path to gemfile" do
|
46
|
+
it "returns false" do
|
47
|
+
"/foo/foobar".should_not be_gemfile
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "unrpmize" do
|
53
|
+
it "returns string with rpm macros removed/replaced" do
|
54
|
+
"%doc ".unrpmize.should == ""
|
55
|
+
"%{_bindir}".unrpmize.should == "/bin"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#rpmize" do
|
60
|
+
it "returns string with rpm macros swapped in" do
|
61
|
+
"/bin".rpmize.should == "%{_bindir}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end # describe String
|
data/spec/fedora_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Polisher Fedora Spec
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'polisher/fedora'
|
7
|
+
|
8
|
+
module Polisher
|
9
|
+
describe Fedora do
|
10
|
+
describe "#gems_owned_by" do
|
11
|
+
it "retrieves gems owned by the specified user"
|
12
|
+
end
|
13
|
+
end # describe Fedora
|
14
|
+
end # module Polisher
|
data/spec/gem_spec.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# Polisher Gem Specs
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'polisher/gem'
|
7
|
+
|
8
|
+
module Polisher
|
9
|
+
describe Gem do
|
10
|
+
describe "#initialize" do
|
11
|
+
it "sets gemfile attributes" do
|
12
|
+
gem = Polisher::Gem.new :name => 'rails',
|
13
|
+
:version => '4.0.0',
|
14
|
+
:deps => ['activesupport', 'activerecord'],
|
15
|
+
:dev_deps => ['rake']
|
16
|
+
gem.name.should == 'rails'
|
17
|
+
gem.version.should == '4.0.0'
|
18
|
+
gem.deps.should == ['activesupport', 'activerecord']
|
19
|
+
gem.dev_deps.should == ['rake']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#parse" do
|
24
|
+
it "returns new gem" do
|
25
|
+
gem = Polisher::Gem.parse
|
26
|
+
gem.should be_an_instance_of(Polisher::Gem)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "parses gem from gem spec" do
|
30
|
+
spec = Polisher::Test::GEM_SPEC
|
31
|
+
gem = Polisher::Gem.parse(:gemspec => spec[:path])
|
32
|
+
gem.name.should == spec[:name]
|
33
|
+
gem.version.should == spec[:version]
|
34
|
+
gem.deps.should == spec[:deps]
|
35
|
+
gem.dev_deps.should == spec[:dev_deps]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "parses gem from gem at path"
|
39
|
+
|
40
|
+
it "parses gem from metadata hash" do
|
41
|
+
gemj = Polisher::Test::GEM_JSON
|
42
|
+
gem = Polisher::Gem.parse gemj[:json]
|
43
|
+
gem.name.should == gemj[:name]
|
44
|
+
gem.version.should == gemj[:version]
|
45
|
+
gem.deps.should == gemj[:deps]
|
46
|
+
gem.dev_deps.should == gemj[:dev_deps]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#retrieve" do
|
51
|
+
before(:each) do
|
52
|
+
@local_gem = Polisher::Test::LOCAL_GEM
|
53
|
+
|
54
|
+
# stub out expected calls to curl
|
55
|
+
@curl1 = Curl::Easy.new
|
56
|
+
@curl2 = Curl::Easy.new
|
57
|
+
|
58
|
+
Curl::Easy.should_receive(:http_get).with(@local_gem[:json_url]).and_return(@curl1)
|
59
|
+
@curl1.should_receive(:body_str).and_return(@local_gem[:json])
|
60
|
+
|
61
|
+
Curl::Easy.should_receive(:new).with(@local_gem[:url]).and_return(@curl2)
|
62
|
+
@curl2.should_receive(:http_get)
|
63
|
+
@curl2.should_receive(:body_str).and_return(@local_gem[:contents])
|
64
|
+
end
|
65
|
+
|
66
|
+
it "returns gem retrieved from rubygems" do
|
67
|
+
gem = Polisher::Gem.retrieve(@local_gem[:name])
|
68
|
+
gem.should be_an_instance_of(Polisher::Gem)
|
69
|
+
gem.name.should == @local_gem[:name]
|
70
|
+
gem.version.should == @local_gem[:version]
|
71
|
+
gem.deps.should == @local_gem[:deps]
|
72
|
+
gem.dev_deps.should == @local_gem[:dev_deps]
|
73
|
+
end
|
74
|
+
|
75
|
+
it "sets gem files" do
|
76
|
+
gem = Polisher::Gem.retrieve(@local_gem[:name])
|
77
|
+
gem.should be_an_instance_of(Polisher::Gem)
|
78
|
+
gem.files.should == @local_gem[:files]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end # describe Gem
|
82
|
+
end # module Polisher
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Polisher Gemfile Specs
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'polisher/gemfile'
|
7
|
+
|
8
|
+
module Bundler
|
9
|
+
describe "#gem" do
|
10
|
+
it "stores parsed gems"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Polisher
|
15
|
+
describe Gemfile do
|
16
|
+
describe "#initialize" do
|
17
|
+
it "sets gemfile deps,dev_deps" do
|
18
|
+
gemfile = Polisher::Gemfile.new :deps => ['rails'], :dev_deps => ['rake']
|
19
|
+
gemfile.deps.should == ['rails']
|
20
|
+
gemfile.dev_deps.should == ['rake']
|
21
|
+
end
|
22
|
+
|
23
|
+
it "sets default gemfile version,files" do
|
24
|
+
gemfile = Polisher::Gemfile.new
|
25
|
+
gemfile.version.should be_nil
|
26
|
+
gemfile.files.should == []
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#parse" do
|
31
|
+
it "returns new gemfile instance" do
|
32
|
+
gemfile = Polisher::Test::GEMFILE
|
33
|
+
pgemfile = Polisher::Gemfile.parse gemfile[:path]
|
34
|
+
pgemfile.should be_an_instance_of(Polisher::Gemfile)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "parses deps,dev_deps from spec" do
|
38
|
+
gemfile = Polisher::Test::GEMFILE
|
39
|
+
pgemfile = Polisher::Gemfile.parse gemfile[:path]
|
40
|
+
pgemfile.deps.should == gemfile[:deps]
|
41
|
+
#pgemfile.dev_deps.should...
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end # describe Gemfile
|
45
|
+
end # module Polisher
|
data/spec/git_spec.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Polisher Git Spec
|
2
|
+
#
|
3
|
+
# Licensed under the MIT license
|
4
|
+
# Copyright (C) 2013 Red Hat, Inc.
|
5
|
+
|
6
|
+
require 'polisher/git'
|
7
|
+
|
8
|
+
module Polisher
|
9
|
+
describe GitPackage do
|
10
|
+
describe "#rpm_name" do
|
11
|
+
it "returns rubygem-gem_name" do
|
12
|
+
pkg = Polisher::GitPackage.new :name => 'rails'
|
13
|
+
pkg.rpm_name.should == 'rubygem-rails'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#srpm" do
|
18
|
+
it "returns name of srpm" do
|
19
|
+
pkg = Polisher::GitPackage.new :name => 'rails', :version => '1.0.0'
|
20
|
+
pkg.srpm.should == 'rubygem-rails-1.0.0-1.*.src.rpm'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#spec" do
|
25
|
+
it "returns name of spec" do
|
26
|
+
pkg = Polisher::GitPackage.new :name => 'rails'
|
27
|
+
pkg.spec.should == 'rubygem-rails.spec'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#clone" do
|
32
|
+
context "package directory does not exist" do
|
33
|
+
it "uses package command to clone package"
|
34
|
+
end
|
35
|
+
|
36
|
+
context "dead.package file exists" do
|
37
|
+
it "raises Exception"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "checks out master branch"
|
41
|
+
it "resets head"
|
42
|
+
it "pulls from remote"
|
43
|
+
|
44
|
+
it "returns new GitPackage instance"
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#update_to" do
|
48
|
+
it "updates rpm spec"
|
49
|
+
it "updates sources file"
|
50
|
+
it "updates .gitignore file"
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#build" do
|
54
|
+
it "uses package command to build srpm"
|
55
|
+
it "uses build command to build srpm"
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#has_check?" do
|
59
|
+
context "package spec has %check section" do
|
60
|
+
it "returns true"
|
61
|
+
end
|
62
|
+
|
63
|
+
context "package spec does not have a %check section" do
|
64
|
+
it "returns false"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#commit" do
|
69
|
+
it "git adds the sources, .gitignore, and spec files"
|
70
|
+
it "commits the package"
|
71
|
+
end
|
72
|
+
|
73
|
+
end # describe GitPackage
|
74
|
+
end # module Polisher
|