librarian 0.0.9 → 0.0.10
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/CHANGELOG.md +4 -0
- data/lib/librarian.rb +5 -178
- data/lib/librarian/action.rb +5 -0
- data/lib/librarian/action/base.rb +22 -0
- data/lib/librarian/action/clean.rb +56 -0
- data/lib/librarian/action/ensure.rb +24 -0
- data/lib/librarian/action/install.rb +101 -0
- data/lib/librarian/action/resolve.rb +81 -0
- data/lib/librarian/action/update.rb +76 -0
- data/lib/librarian/chef/cli.rb +7 -2
- data/lib/librarian/chef/dsl.rb +0 -3
- data/lib/librarian/chef/environment.rb +19 -0
- data/lib/librarian/chef/extension.rb +1 -16
- data/lib/librarian/chef/integration/knife.rb +9 -16
- data/lib/librarian/chef/source/git.rb +0 -2
- data/lib/librarian/chef/source/local.rb +1 -74
- data/lib/librarian/chef/source/local/manifest.rb +82 -0
- data/lib/librarian/chef/source/path.rb +0 -2
- data/lib/librarian/chef/source/site.rb +9 -89
- data/lib/librarian/chef/source/site/manifest.rb +94 -0
- data/lib/librarian/cli.rb +56 -17
- data/lib/librarian/dependency.rb +2 -2
- data/lib/librarian/dsl.rb +15 -5
- data/lib/librarian/dsl/receiver.rb +2 -0
- data/lib/librarian/dsl/target.rb +13 -1
- data/lib/librarian/environment.rb +94 -0
- data/lib/librarian/error.rb +4 -0
- data/lib/librarian/helpers/debug.rb +6 -6
- data/lib/librarian/lockfile.rb +7 -5
- data/lib/librarian/lockfile/compiler.rb +5 -4
- data/lib/librarian/lockfile/parser.rb +6 -5
- data/lib/librarian/manifest.rb +2 -2
- data/lib/librarian/mock/cli.rb +6 -1
- data/lib/librarian/mock/dsl.rb +0 -3
- data/lib/librarian/mock/environment.rb +24 -0
- data/lib/librarian/mock/extension.rb +1 -20
- data/lib/librarian/mock/source/mock.rb +7 -7
- data/lib/librarian/mock/source/mock/registry.rb +16 -12
- data/lib/librarian/resolver.rb +5 -116
- data/lib/librarian/resolver/implementation.rb +117 -0
- data/lib/librarian/source/git.rb +8 -7
- data/lib/librarian/source/git/repository.rb +7 -5
- data/lib/librarian/source/local.rb +1 -1
- data/lib/librarian/source/path.rb +7 -6
- data/lib/librarian/spec_change_set.rb +6 -5
- data/lib/librarian/specfile.rb +10 -4
- data/lib/librarian/version.rb +1 -1
- data/librarian.gemspec +1 -0
- data/spec/functional/chef/source/git_spec.rb +177 -89
- data/spec/functional/chef/source/site_spec.rb +111 -52
- data/spec/unit/action/base_spec.rb +18 -0
- data/spec/unit/action/clean_spec.rb +133 -0
- data/spec/unit/action/ensure_spec.rb +37 -0
- data/spec/unit/action/install_spec.rb +113 -0
- data/spec/unit/dsl_spec.rb +15 -13
- data/spec/unit/environment_spec.rb +9 -0
- data/spec/unit/lockfile_spec.rb +15 -4
- data/spec/unit/mock/source/mock.rb +22 -0
- data/spec/unit/resolver_spec.rb +24 -24
- data/spec/unit/spec_change_set_spec.rb +29 -25
- metadata +47 -19
- data/lib/librarian/chef/particularity.rb +0 -9
- data/lib/librarian/mock/particularity.rb +0 -9
- data/lib/librarian/particularity.rb +0 -7
    
        data/spec/unit/dsl_spec.rb
    CHANGED
    
    | @@ -6,11 +6,13 @@ module Librarian | |
| 6 6 |  | 
| 7 7 | 
             
                describe Dsl do
         | 
| 8 8 |  | 
| 9 | 
            +
                  let(:env) { Environment.new }
         | 
| 10 | 
            +
             | 
| 9 11 | 
             
                  context "a single dependency but no applicable source" do
         | 
| 10 12 |  | 
| 11 13 | 
             
                    it "should not run without any sources" do
         | 
| 12 14 | 
             
                      expect do
         | 
| 13 | 
            -
                         | 
| 15 | 
            +
                        env.dsl do
         | 
| 14 16 | 
             
                          dep 'dependency-1'
         | 
| 15 17 | 
             
                        end
         | 
| 16 18 | 
             
                      end.to raise_error(Dsl::Error)
         | 
| @@ -18,7 +20,7 @@ module Librarian | |
| 18 20 |  | 
| 19 21 | 
             
                    it "should not run when a block source is defined but the dependency is outside the block" do
         | 
| 20 22 | 
             
                      expect do
         | 
| 21 | 
            -
                         | 
| 23 | 
            +
                        env.dsl do
         | 
| 22 24 | 
             
                          src 'source-1' do end
         | 
| 23 25 | 
             
                          dep 'dependency-1'
         | 
| 24 26 | 
             
                        end
         | 
| @@ -30,7 +32,7 @@ module Librarian | |
| 30 32 | 
             
                  context "a simple specfile - a single source, a single dependency, no transitive dependencies" do
         | 
| 31 33 |  | 
| 32 34 | 
             
                    it "should run with a hash source" do
         | 
| 33 | 
            -
                      spec =  | 
| 35 | 
            +
                      spec = env.dsl do
         | 
| 34 36 | 
             
                        dep 'dependency-1',
         | 
| 35 37 | 
             
                          :src => 'source-1'
         | 
| 36 38 | 
             
                      end
         | 
| @@ -41,7 +43,7 @@ module Librarian | |
| 41 43 | 
             
                    end
         | 
| 42 44 |  | 
| 43 45 | 
             
                    it "should run with a shortcut source" do
         | 
| 44 | 
            -
                      spec =  | 
| 46 | 
            +
                      spec = env.dsl do
         | 
| 45 47 | 
             
                        dep 'dependency-1',
         | 
| 46 48 | 
             
                          :source => :a
         | 
| 47 49 | 
             
                      end
         | 
| @@ -52,7 +54,7 @@ module Librarian | |
| 52 54 | 
             
                    end
         | 
| 53 55 |  | 
| 54 56 | 
             
                    it "should run with a block hash source" do
         | 
| 55 | 
            -
                      spec =  | 
| 57 | 
            +
                      spec = env.dsl do
         | 
| 56 58 | 
             
                        source :src => 'source-1' do
         | 
| 57 59 | 
             
                          dep 'dependency-1'
         | 
| 58 60 | 
             
                        end
         | 
| @@ -64,7 +66,7 @@ module Librarian | |
| 64 66 | 
             
                    end
         | 
| 65 67 |  | 
| 66 68 | 
             
                    it "should run with a block named source" do
         | 
| 67 | 
            -
                      spec =  | 
| 69 | 
            +
                      spec = env.dsl do
         | 
| 68 70 | 
             
                        src 'source-1' do
         | 
| 69 71 | 
             
                          dep 'dependency-1'
         | 
| 70 72 | 
             
                        end
         | 
| @@ -76,7 +78,7 @@ module Librarian | |
| 76 78 | 
             
                    end
         | 
| 77 79 |  | 
| 78 80 | 
             
                    it "should run with a default hash source" do
         | 
| 79 | 
            -
                      spec =  | 
| 81 | 
            +
                      spec = env.dsl do
         | 
| 80 82 | 
             
                        source :src => 'source-1'
         | 
| 81 83 | 
             
                        dep 'dependency-1'
         | 
| 82 84 | 
             
                      end
         | 
| @@ -88,7 +90,7 @@ module Librarian | |
| 88 90 | 
             
                    end
         | 
| 89 91 |  | 
| 90 92 | 
             
                    it "should run with a default named source" do
         | 
| 91 | 
            -
                      spec =  | 
| 93 | 
            +
                      spec = env.dsl do
         | 
| 92 94 | 
             
                        src 'source-1'
         | 
| 93 95 | 
             
                        dep 'dependency-1'
         | 
| 94 96 | 
             
                      end
         | 
| @@ -100,7 +102,7 @@ module Librarian | |
| 100 102 | 
             
                    end
         | 
| 101 103 |  | 
| 102 104 | 
             
                    it "should run with a default shortcut source" do
         | 
| 103 | 
            -
                      spec =  | 
| 105 | 
            +
                      spec = env.dsl do
         | 
| 104 106 | 
             
                        source :a
         | 
| 105 107 | 
             
                        dep 'dependency-1'
         | 
| 106 108 | 
             
                      end
         | 
| @@ -112,7 +114,7 @@ module Librarian | |
| 112 114 | 
             
                    end
         | 
| 113 115 |  | 
| 114 116 | 
             
                    it "should run with a shortcut source hash definition" do
         | 
| 115 | 
            -
                      spec =  | 
| 117 | 
            +
                      spec = env.dsl do
         | 
| 116 118 | 
             
                        source :b, :src => 'source-b'
         | 
| 117 119 | 
             
                        dep 'dependency-1', :source => :b
         | 
| 118 120 | 
             
                      end
         | 
| @@ -123,7 +125,7 @@ module Librarian | |
| 123 125 | 
             
                    end
         | 
| 124 126 |  | 
| 125 127 | 
             
                    it "should run with a shortcut source block definition" do
         | 
| 126 | 
            -
                      spec =  | 
| 128 | 
            +
                      spec = env.dsl do
         | 
| 127 129 | 
             
                        source :b, proc { src 'source-b' }
         | 
| 128 130 | 
             
                        dep 'dependency-1', :source => :b
         | 
| 129 131 | 
             
                      end
         | 
| @@ -134,7 +136,7 @@ module Librarian | |
| 134 136 | 
             
                    end
         | 
| 135 137 |  | 
| 136 138 | 
             
                    it "should run with a default shortcut source hash definition" do
         | 
| 137 | 
            -
                      spec =  | 
| 139 | 
            +
                      spec = env.dsl do
         | 
| 138 140 | 
             
                        source :b, :src => 'source-b'
         | 
| 139 141 | 
             
                        source :b
         | 
| 140 142 | 
             
                        dep 'dependency-1'
         | 
| @@ -147,7 +149,7 @@ module Librarian | |
| 147 149 | 
             
                    end
         | 
| 148 150 |  | 
| 149 151 | 
             
                    it "should run with a default shortcut source block definition" do
         | 
| 150 | 
            -
                      spec =  | 
| 152 | 
            +
                      spec = env.dsl do
         | 
| 151 153 | 
             
                        source :b, proc { src 'source-b' }
         | 
| 152 154 | 
             
                        source :b
         | 
| 153 155 | 
             
                        dep 'dependency-1'
         | 
    
        data/spec/unit/lockfile_spec.rb
    CHANGED
    
    | @@ -4,8 +4,10 @@ require 'librarian/mock' | |
| 4 4 | 
             
            module Librarian
         | 
| 5 5 | 
             
              describe Lockfile do
         | 
| 6 6 |  | 
| 7 | 
            +
                let(:env) { Mock::Environment.new }
         | 
| 8 | 
            +
             | 
| 7 9 | 
             
                before do
         | 
| 8 | 
            -
                   | 
| 10 | 
            +
                  env.registry :clear => true do
         | 
| 9 11 | 
             
                    source 'source-1' do
         | 
| 10 12 | 
             
                      spec 'alpha', '1.1'
         | 
| 11 13 | 
             
                    end
         | 
| @@ -13,13 +15,13 @@ module Librarian | |
| 13 15 | 
             
                end
         | 
| 14 16 |  | 
| 15 17 | 
             
                let(:spec) do
         | 
| 16 | 
            -
                   | 
| 18 | 
            +
                  env.dsl do
         | 
| 17 19 | 
             
                    src 'source-1'
         | 
| 18 20 | 
             
                    dep 'alpha', '1.1'
         | 
| 19 21 | 
             
                  end
         | 
| 20 22 | 
             
                end
         | 
| 21 23 |  | 
| 22 | 
            -
                let(:resolver) {  | 
| 24 | 
            +
                let(:resolver) { env.resolver }
         | 
| 23 25 | 
             
                let(:resolution) { resolver.resolve(spec) }
         | 
| 24 26 |  | 
| 25 27 | 
             
                context "sanity" do
         | 
| @@ -27,11 +29,12 @@ module Librarian | |
| 27 29 | 
             
                    subject { resolution }
         | 
| 28 30 |  | 
| 29 31 | 
             
                    it { should be_correct }
         | 
| 32 | 
            +
                    it { should have(1).manifests }
         | 
| 30 33 | 
             
                  end
         | 
| 31 34 | 
             
                end
         | 
| 32 35 |  | 
| 33 36 | 
             
                describe "#save" do
         | 
| 34 | 
            -
                  let(:lockfile) {  | 
| 37 | 
            +
                  let(:lockfile) { env.ephemeral_lockfile }
         | 
| 35 38 | 
             
                  let(:lockfile_text) { lockfile.save(resolution) }
         | 
| 36 39 |  | 
| 37 40 | 
             
                  context "just saving" do
         | 
| @@ -40,6 +43,14 @@ module Librarian | |
| 40 43 | 
             
                    end
         | 
| 41 44 | 
             
                  end
         | 
| 42 45 |  | 
| 46 | 
            +
                  context "saving and reloading" do
         | 
| 47 | 
            +
                    let(:reloaded_resolution) { lockfile.load(lockfile_text) }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    it "should have the expected manifests" do
         | 
| 50 | 
            +
                      reloaded_resolution.manifests.count.should == resolution.manifests.count
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 43 54 | 
             
                  context "bouncing" do
         | 
| 44 55 | 
             
                    let(:bounced_resolution) { lockfile.load(lockfile_text) }
         | 
| 45 56 | 
             
                    let(:bounced_lockfile_text) { lockfile.save(bounced_resolution) }
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require "librarian/mock"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Librarian
         | 
| 4 | 
            +
              module Mock
         | 
| 5 | 
            +
                module Source
         | 
| 6 | 
            +
                  describe Mock do
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    let(:env) { Librarian::Mock::Environment.new }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    describe ".new" do
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                      let(:source) { described_class.new(env, "source-a", {}) }
         | 
| 13 | 
            +
                      subject { source }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                      its(:environment) { should_not be_nil }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/spec/unit/resolver_spec.rb
    CHANGED
    
    | @@ -1,22 +1,25 @@ | |
| 1 | 
            -
            require 'librarian'
         | 
| 1 | 
            +
            require 'librarian/resolver'
         | 
| 2 | 
            +
            require 'librarian/spec_change_set'
         | 
| 2 3 | 
             
            require 'librarian/mock'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module Librarian
         | 
| 5 6 | 
             
              describe Resolver do
         | 
| 6 7 |  | 
| 8 | 
            +
                let(:env) { Mock::Environment.new }
         | 
| 9 | 
            +
                let(:resolver) { env.resolver }
         | 
| 10 | 
            +
             | 
| 7 11 | 
             
                context "a simple specfile" do
         | 
| 8 12 |  | 
| 9 13 | 
             
                  it "should work" do
         | 
| 10 | 
            -
                     | 
| 14 | 
            +
                    env.registry :clear => true do
         | 
| 11 15 | 
             
                      source 'source-1' do
         | 
| 12 16 | 
             
                        spec 'butter', '1.1'
         | 
| 13 17 | 
             
                      end
         | 
| 14 18 | 
             
                    end
         | 
| 15 | 
            -
                    spec =  | 
| 19 | 
            +
                    spec = env.dsl do
         | 
| 16 20 | 
             
                      src 'source-1'
         | 
| 17 21 | 
             
                      dep 'butter'
         | 
| 18 22 | 
             
                    end
         | 
| 19 | 
            -
                    resolver = Mock.resolver
         | 
| 20 23 | 
             
                    resolution = resolver.resolve(spec)
         | 
| 21 24 | 
             
                    resolution.should be_correct
         | 
| 22 25 | 
             
                  end
         | 
| @@ -26,7 +29,7 @@ module Librarian | |
| 26 29 | 
             
                context "a specfile with a dep from one src depending on a dep from another src" do
         | 
| 27 30 |  | 
| 28 31 | 
             
                  it "should work" do
         | 
| 29 | 
            -
                     | 
| 32 | 
            +
                    env.registry :clear => true do
         | 
| 30 33 | 
             
                      source 'source-1' do
         | 
| 31 34 | 
             
                        spec 'butter', '1.1'
         | 
| 32 35 | 
             
                      end
         | 
| @@ -36,13 +39,12 @@ module Librarian | |
| 36 39 | 
             
                        end
         | 
| 37 40 | 
             
                      end
         | 
| 38 41 | 
             
                    end
         | 
| 39 | 
            -
                    spec =  | 
| 42 | 
            +
                    spec = env.dsl do
         | 
| 40 43 | 
             
                      src 'source-1'
         | 
| 41 44 | 
             
                      src 'source-2' do
         | 
| 42 45 | 
             
                        dep 'jam'
         | 
| 43 46 | 
             
                      end
         | 
| 44 47 | 
             
                    end
         | 
| 45 | 
            -
                    resolver = Mock.resolver
         | 
| 46 48 | 
             
                    resolution = resolver.resolve(spec)
         | 
| 47 49 | 
             
                    resolution.should be_correct
         | 
| 48 50 | 
             
                  end
         | 
| @@ -52,18 +54,17 @@ module Librarian | |
| 52 54 | 
             
                context "a specfile with a dep depending on a nonexistent dep" do
         | 
| 53 55 |  | 
| 54 56 | 
             
                  it "should not work" do
         | 
| 55 | 
            -
                     | 
| 57 | 
            +
                    env.registry :clear => true do
         | 
| 56 58 | 
             
                      source 'source-1' do
         | 
| 57 59 | 
             
                        spec 'jam', '1.2' do
         | 
| 58 60 | 
             
                          dependency 'butter', '>= 1.0'
         | 
| 59 61 | 
             
                        end
         | 
| 60 62 | 
             
                      end
         | 
| 61 63 | 
             
                    end
         | 
| 62 | 
            -
                    spec =  | 
| 64 | 
            +
                    spec = env.dsl do
         | 
| 63 65 | 
             
                      src 'source-1'
         | 
| 64 66 | 
             
                      dep 'jam'
         | 
| 65 67 | 
             
                    end
         | 
| 66 | 
            -
                    resolver = Mock.resolver
         | 
| 67 68 | 
             
                    resolution = resolver.resolve(spec)
         | 
| 68 69 | 
             
                    resolution.should_not be_correct
         | 
| 69 70 | 
             
                  end
         | 
| @@ -73,7 +74,7 @@ module Librarian | |
| 73 74 | 
             
                context "a specfile with conflicting constraints" do
         | 
| 74 75 |  | 
| 75 76 | 
             
                  it "should not work" do
         | 
| 76 | 
            -
                     | 
| 77 | 
            +
                    env.registry :clear => true do
         | 
| 77 78 | 
             
                      source 'source-1' do
         | 
| 78 79 | 
             
                        spec 'butter', '1.0'
         | 
| 79 80 | 
             
                        spec 'butter', '1.1'
         | 
| @@ -82,12 +83,11 @@ module Librarian | |
| 82 83 | 
             
                        end
         | 
| 83 84 | 
             
                      end
         | 
| 84 85 | 
             
                    end
         | 
| 85 | 
            -
                    spec =  | 
| 86 | 
            +
                    spec = env.dsl do
         | 
| 86 87 | 
             
                      src 'source-1'
         | 
| 87 88 | 
             
                      dep 'butter', '1.0'
         | 
| 88 89 | 
             
                      dep 'jam'
         | 
| 89 90 | 
             
                    end
         | 
| 90 | 
            -
                    resolver = Mock.resolver
         | 
| 91 91 | 
             
                    resolution = resolver.resolve(spec)
         | 
| 92 92 | 
             
                    resolution.should_not be_correct
         | 
| 93 93 | 
             
                  end
         | 
| @@ -97,7 +97,7 @@ module Librarian | |
| 97 97 | 
             
                context "updating" do
         | 
| 98 98 |  | 
| 99 99 | 
             
                  it "should not work" do
         | 
| 100 | 
            -
                     | 
| 100 | 
            +
                    env.registry :clear => true do
         | 
| 101 101 | 
             
                      source 'source-1' do
         | 
| 102 102 | 
             
                        spec 'butter', '1.0'
         | 
| 103 103 | 
             
                        spec 'butter', '1.1'
         | 
| @@ -106,24 +106,24 @@ module Librarian | |
| 106 106 | 
             
                        end
         | 
| 107 107 | 
             
                      end
         | 
| 108 108 | 
             
                    end
         | 
| 109 | 
            -
                    first_spec =  | 
| 109 | 
            +
                    first_spec = env.dsl do
         | 
| 110 110 | 
             
                      src 'source-1'
         | 
| 111 111 | 
             
                      dep 'butter', '1.1'
         | 
| 112 112 | 
             
                      dep 'jam'
         | 
| 113 113 | 
             
                    end
         | 
| 114 | 
            -
                    first_resolution =  | 
| 114 | 
            +
                    first_resolution = resolver.resolve(first_spec)
         | 
| 115 115 | 
             
                    first_resolution.should be_correct
         | 
| 116 116 | 
             
                    first_manifests = first_resolution.manifests
         | 
| 117 117 | 
             
                    first_manifests_index = Hash[first_manifests.map{|m| [m.name, m]}]
         | 
| 118 118 | 
             
                    first_manifests_index['butter'].version.to_s.should == '1.1'
         | 
| 119 119 |  | 
| 120 | 
            -
                    second_spec =  | 
| 120 | 
            +
                    second_spec = env.dsl do
         | 
| 121 121 | 
             
                      src 'source-1'
         | 
| 122 122 | 
             
                      dep 'butter', '1.0'
         | 
| 123 123 | 
             
                      dep 'jam'
         | 
| 124 124 | 
             
                    end
         | 
| 125 125 | 
             
                    locked_manifests = ManifestSet.deep_strip(first_manifests, ['butter'])
         | 
| 126 | 
            -
                    second_resolution = | 
| 126 | 
            +
                    second_resolution =resolver.resolve(second_spec, locked_manifests)
         | 
| 127 127 | 
             
                    second_resolution.should be_correct
         | 
| 128 128 | 
             
                    second_manifests = second_resolution.manifests
         | 
| 129 129 | 
             
                    second_manifests_index = Hash[second_manifests.map{|m| [m.name, m]}]
         | 
| @@ -135,7 +135,7 @@ module Librarian | |
| 135 135 | 
             
                context "a change to the spec" do
         | 
| 136 136 |  | 
| 137 137 | 
             
                  it "should work" do
         | 
| 138 | 
            -
                     | 
| 138 | 
            +
                    env.registry :clear => true do
         | 
| 139 139 | 
             
                      source 'source-1' do
         | 
| 140 140 | 
             
                        spec 'butter', '1.0'
         | 
| 141 141 | 
             
                      end
         | 
| @@ -143,22 +143,22 @@ module Librarian | |
| 143 143 | 
             
                        spec 'butter', '1.0'
         | 
| 144 144 | 
             
                      end
         | 
| 145 145 | 
             
                    end
         | 
| 146 | 
            -
                    spec =  | 
| 146 | 
            +
                    spec = env.dsl do
         | 
| 147 147 | 
             
                      src 'source-1'
         | 
| 148 148 | 
             
                      dep 'butter'
         | 
| 149 149 | 
             
                    end
         | 
| 150 | 
            -
                    lock =  | 
| 150 | 
            +
                    lock = resolver.resolve(spec)
         | 
| 151 151 | 
             
                    lock.should be_correct
         | 
| 152 152 |  | 
| 153 | 
            -
                    spec =  | 
| 153 | 
            +
                    spec = env.dsl do
         | 
| 154 154 | 
             
                      src 'source-1'
         | 
| 155 155 | 
             
                      dep 'butter', :src => 'source-2'
         | 
| 156 156 | 
             
                    end
         | 
| 157 | 
            -
                    changes =  | 
| 157 | 
            +
                    changes = SpecChangeSet.new(env, spec, lock)
         | 
| 158 158 | 
             
                    changes.should_not be_same
         | 
| 159 159 | 
             
                    manifests = ManifestSet.new(changes.analyze).to_hash
         | 
| 160 160 | 
             
                    manifests.should_not have_key('butter')
         | 
| 161 | 
            -
                    lock =  | 
| 161 | 
            +
                    lock = resolver.resolve(spec, changes.analyze)
         | 
| 162 162 | 
             
                    lock.should be_correct
         | 
| 163 163 | 
             
                    lock.manifests.map{|m| m.name}.should include('butter')
         | 
| 164 164 | 
             
                    manifest = lock.manifests.find{|m| m.name == 'butter'}
         | 
| @@ -1,31 +1,35 @@ | |
| 1 1 | 
             
            require 'librarian'
         | 
| 2 | 
            +
            require 'librarian/spec_change_set'
         | 
| 2 3 | 
             
            require 'librarian/mock'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module Librarian
         | 
| 5 6 | 
             
              describe SpecChangeSet do
         | 
| 6 7 |  | 
| 8 | 
            +
                let(:env) { Mock::Environment.new }
         | 
| 9 | 
            +
                let(:resolver) { env.resolver }
         | 
| 10 | 
            +
             | 
| 7 11 | 
             
                context "a simple root removal" do
         | 
| 8 12 |  | 
| 9 13 | 
             
                  it "should work" do
         | 
| 10 | 
            -
                     | 
| 14 | 
            +
                    env.registry :clear => true do
         | 
| 11 15 | 
             
                      source 'source-1' do
         | 
| 12 16 | 
             
                        spec 'butter', '1.0'
         | 
| 13 17 | 
             
                        spec 'jam', '1.0'
         | 
| 14 18 | 
             
                      end
         | 
| 15 19 | 
             
                    end
         | 
| 16 | 
            -
                    spec =  | 
| 20 | 
            +
                    spec = env.dsl do
         | 
| 17 21 | 
             
                      src 'source-1'
         | 
| 18 22 | 
             
                      dep 'butter'
         | 
| 19 23 | 
             
                      dep 'jam'
         | 
| 20 24 | 
             
                    end
         | 
| 21 | 
            -
                    lock =  | 
| 25 | 
            +
                    lock = resolver.resolve(spec)
         | 
| 22 26 | 
             
                    lock.should be_correct
         | 
| 23 27 |  | 
| 24 | 
            -
                    spec =  | 
| 28 | 
            +
                    spec = env.dsl do
         | 
| 25 29 | 
             
                      src 'source-1'
         | 
| 26 30 | 
             
                      dep 'jam'
         | 
| 27 31 | 
             
                    end
         | 
| 28 | 
            -
                    changes =  | 
| 32 | 
            +
                    changes = described_class.new(env, spec, lock)
         | 
| 29 33 | 
             
                    changes.should_not be_same
         | 
| 30 34 |  | 
| 31 35 | 
             
                    manifests = ManifestSet.new(changes.analyze).to_hash
         | 
| @@ -38,25 +42,25 @@ module Librarian | |
| 38 42 | 
             
                context "a simple root add" do
         | 
| 39 43 |  | 
| 40 44 | 
             
                  it "should work" do
         | 
| 41 | 
            -
                     | 
| 45 | 
            +
                    env.registry :clear => true do
         | 
| 42 46 | 
             
                      source 'source-1' do
         | 
| 43 47 | 
             
                        spec 'butter', '1.0'
         | 
| 44 48 | 
             
                        spec 'jam', '1.0'
         | 
| 45 49 | 
             
                      end
         | 
| 46 50 | 
             
                    end
         | 
| 47 | 
            -
                    spec =  | 
| 51 | 
            +
                    spec = env.dsl do
         | 
| 48 52 | 
             
                      src 'source-1'
         | 
| 49 53 | 
             
                      dep 'jam'
         | 
| 50 54 | 
             
                    end
         | 
| 51 | 
            -
                    lock =  | 
| 55 | 
            +
                    lock = resolver.resolve(spec)
         | 
| 52 56 | 
             
                    lock.should be_correct
         | 
| 53 57 |  | 
| 54 | 
            -
                    spec =  | 
| 58 | 
            +
                    spec = env.dsl do
         | 
| 55 59 | 
             
                      src 'source-1'
         | 
| 56 60 | 
             
                      dep 'butter'
         | 
| 57 61 | 
             
                      dep 'jam'
         | 
| 58 62 | 
             
                    end
         | 
| 59 | 
            -
                    changes =  | 
| 63 | 
            +
                    changes = described_class.new(env, spec, lock)
         | 
| 60 64 | 
             
                    changes.should_not be_same
         | 
| 61 65 | 
             
                    manifests = ManifestSet.new(changes.analyze).to_hash
         | 
| 62 66 | 
             
                    manifests.should have_key('jam')
         | 
| @@ -70,27 +74,27 @@ module Librarian | |
| 70 74 | 
             
                  context "when the change is consistent" do
         | 
| 71 75 |  | 
| 72 76 | 
             
                    it "should work" do
         | 
| 73 | 
            -
                       | 
| 77 | 
            +
                      env.registry :clear => true do
         | 
| 74 78 | 
             
                        source 'source-1' do
         | 
| 75 79 | 
             
                          spec 'butter', '1.0'
         | 
| 76 80 | 
             
                          spec 'jam', '1.0'
         | 
| 77 81 | 
             
                          spec 'jam', '1.1'
         | 
| 78 82 | 
             
                        end
         | 
| 79 83 | 
             
                      end
         | 
| 80 | 
            -
                      spec =  | 
| 84 | 
            +
                      spec = env.dsl do
         | 
| 81 85 | 
             
                        src 'source-1'
         | 
| 82 86 | 
             
                        dep 'butter'
         | 
| 83 87 | 
             
                        dep 'jam', '= 1.1'
         | 
| 84 88 | 
             
                      end
         | 
| 85 | 
            -
                      lock =  | 
| 89 | 
            +
                      lock = resolver.resolve(spec)
         | 
| 86 90 | 
             
                      lock.should be_correct
         | 
| 87 91 |  | 
| 88 | 
            -
                      spec =  | 
| 92 | 
            +
                      spec = env.dsl do
         | 
| 89 93 | 
             
                        src 'source-1'
         | 
| 90 94 | 
             
                        dep 'butter'
         | 
| 91 95 | 
             
                        dep 'jam', '>= 1.0'
         | 
| 92 96 | 
             
                      end
         | 
| 93 | 
            -
                      changes =  | 
| 97 | 
            +
                      changes = described_class.new(env, spec, lock)
         | 
| 94 98 | 
             
                      changes.should_not be_same
         | 
| 95 99 | 
             
                      manifests = ManifestSet.new(changes.analyze).to_hash
         | 
| 96 100 | 
             
                      manifests.should have_key('butter')
         | 
| @@ -102,27 +106,27 @@ module Librarian | |
| 102 106 | 
             
                  context "when the change is inconsistent" do
         | 
| 103 107 |  | 
| 104 108 | 
             
                    it "should work" do
         | 
| 105 | 
            -
                       | 
| 109 | 
            +
                      env.registry :clear => true do
         | 
| 106 110 | 
             
                        source 'source-1' do
         | 
| 107 111 | 
             
                          spec 'butter', '1.0'
         | 
| 108 112 | 
             
                          spec 'jam', '1.0'
         | 
| 109 113 | 
             
                          spec 'jam', '1.1'
         | 
| 110 114 | 
             
                        end
         | 
| 111 115 | 
             
                      end
         | 
| 112 | 
            -
                      spec =  | 
| 116 | 
            +
                      spec = env.dsl do
         | 
| 113 117 | 
             
                        src 'source-1'
         | 
| 114 118 | 
             
                        dep 'butter'
         | 
| 115 119 | 
             
                        dep 'jam', '= 1.0'
         | 
| 116 120 | 
             
                      end
         | 
| 117 | 
            -
                      lock =  | 
| 121 | 
            +
                      lock = resolver.resolve(spec)
         | 
| 118 122 | 
             
                      lock.should be_correct
         | 
| 119 123 |  | 
| 120 | 
            -
                      spec =  | 
| 124 | 
            +
                      spec = env.dsl do
         | 
| 121 125 | 
             
                        src 'source-1'
         | 
| 122 126 | 
             
                        dep 'butter'
         | 
| 123 127 | 
             
                        dep 'jam', '>= 1.1'
         | 
| 124 128 | 
             
                      end
         | 
| 125 | 
            -
                      changes =  | 
| 129 | 
            +
                      changes = described_class.new(env, spec, lock)
         | 
| 126 130 | 
             
                      changes.should_not be_same
         | 
| 127 131 | 
             
                      manifests = ManifestSet.new(changes.analyze).to_hash
         | 
| 128 132 | 
             
                      manifests.should have_key('butter')
         | 
| @@ -135,7 +139,7 @@ module Librarian | |
| 135 139 |  | 
| 136 140 | 
             
                context "a simple root source change" do
         | 
| 137 141 | 
             
                  it "should work" do
         | 
| 138 | 
            -
                     | 
| 142 | 
            +
                    env.registry :clear => true do
         | 
| 139 143 | 
             
                      source 'source-1' do
         | 
| 140 144 | 
             
                        spec 'butter', '1.0'
         | 
| 141 145 | 
             
                      end
         | 
| @@ -143,18 +147,18 @@ module Librarian | |
| 143 147 | 
             
                        spec 'butter', '1.0'
         | 
| 144 148 | 
             
                      end
         | 
| 145 149 | 
             
                    end
         | 
| 146 | 
            -
                    spec =  | 
| 150 | 
            +
                    spec = env.dsl do
         | 
| 147 151 | 
             
                      src 'source-1'
         | 
| 148 152 | 
             
                      dep 'butter'
         | 
| 149 153 | 
             
                    end
         | 
| 150 | 
            -
                    lock =  | 
| 154 | 
            +
                    lock = resolver.resolve(spec)
         | 
| 151 155 | 
             
                    lock.should be_correct
         | 
| 152 156 |  | 
| 153 | 
            -
                    spec =  | 
| 157 | 
            +
                    spec = env.dsl do
         | 
| 154 158 | 
             
                      src 'source-1'
         | 
| 155 159 | 
             
                      dep 'butter', :src => 'source-2'
         | 
| 156 160 | 
             
                    end
         | 
| 157 | 
            -
                    changes =  | 
| 161 | 
            +
                    changes = described_class.new(env, spec, lock)
         | 
| 158 162 | 
             
                    changes.should_not be_same
         | 
| 159 163 | 
             
                    manifests = ManifestSet.new(changes.analyze).to_hash
         | 
| 160 164 | 
             
                    manifests.should_not have_key('butter')
         |