~ubuntu-branches/ubuntu/wily/puppet/wily-proposed

« back to all changes in this revision

Viewing changes to lib/puppet/module_tool/applications/upgrader.rb

  • Committer: Package Import Robot
  • Author(s): Stig Sandbeck Mathisen
  • Date: 2014-10-24 13:47:15 UTC
  • mfrom: (3.1.64 sid)
  • Revision ID: package-import@ubuntu.com-20141024134715-6ig54u0c4gar36ss
Tags: 3.7.2-1
* Imported upstream release 3.7.2
* Declare compliance with Debian Policy 3.9.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
        @action              = :upgrade
19
19
        @environment         = options[:environment_instance]
20
20
        @name                = name
 
21
        @ignore_changes      = forced? || options[:ignore_changes]
21
22
        @ignore_dependencies = forced? || options[:ignore_dependencies]
22
23
 
23
24
        Semantic::Dependency.add_source(installed_modules_source)
45
46
            raise MultipleInstalledError, results.merge(:module_name => name, :installed_modules => matching_modules)
46
47
          end
47
48
 
48
 
          mod = installed_modules[name]
 
49
          installed_release = installed_modules[name]
49
50
 
50
51
          # `priority` is an attribute of a `Semantic::Dependency::Source`,
51
52
          # which is delegated through `ModuleRelease` instances for the sake of
60
61
          # of behavior to be reasonably common in Semantic, we should probably
61
62
          # see about implementing a `ModuleRelease#override_priority` method
62
63
          # (or something similar).
63
 
          def mod.priority
 
64
          def installed_release.priority
64
65
            0
65
66
          end
66
67
 
67
 
          mod = mod.mod
 
68
          mod = installed_release.mod
68
69
          results[:installed_version] = Semantic::Version.parse(mod.version)
69
70
          dir = Pathname.new(mod.modulepath)
70
71
 
71
72
          vstring = mod.version ? "v#{mod.version}" : '???'
72
73
          Puppet.notice "Found '#{name}' (#{colorize(:cyan, vstring)}) in #{dir} ..."
73
 
          unless forced?
 
74
          unless @ignore_changes
74
75
            changes = Checksummer.run(mod.path) rescue []
75
76
            if mod.has_metadata? && !changes.empty?
76
77
              raise LocalChangesError,
83
84
 
84
85
          Puppet::Forge::Cache.clean
85
86
 
 
87
          # Ensure that there is at least one candidate release available
 
88
          # for the target package.
 
89
          available_versions = module_repository.fetch(name)
 
90
          if available_versions.empty?
 
91
            raise NoCandidateReleasesError, results.merge(:module_name => name, :source => module_repository.host)
 
92
          elsif results[:requested_version] != :latest
 
93
            requested = Semantic::VersionRange.parse(results[:requested_version])
 
94
            unless available_versions.any? {|m| requested.include? m.version}
 
95
              raise NoCandidateReleasesError, results.merge(:module_name => name, :source => module_repository.host)
 
96
            end
 
97
          end
 
98
 
86
99
          Puppet.notice "Downloading from #{module_repository.host} ..."
87
100
          if @ignore_dependencies
88
101
            graph = build_single_module_graph(name, version)
122
135
            end
123
136
          end
124
137
 
125
 
          # Ensure that there is at least one candidate release available
126
 
          # for the target package.
127
 
          if graph.dependencies[name].empty? || graph.dependencies[name] == SortedSet.new([ installed_modules[name] ])
128
 
            if results[:requested_version] == :latest || !Semantic::VersionRange.parse(results[:requested_version]).include?(results[:installed_version])
129
 
              raise NoCandidateReleasesError, results.merge(:module_name => name, :source => module_repository.host)
130
 
            end
131
 
          end
132
 
 
133
138
          begin
134
139
            Puppet.info "Resolving dependencies ..."
135
140
            releases = Semantic::Dependency.resolve(graph)
160
165
          child = releases.find { |x| x.name == name }
161
166
 
162
167
          unless forced?
163
 
            if child.version <= results[:installed_version]
 
168
            if child.version == results[:installed_version]
164
169
              versions = graph.dependencies[name].map { |r| r.version }
165
170
              newer_versions = versions.select { |v| v > results[:installed_version] }
166
171
 
170
175
                :installed_version => results[:installed_version],
171
176
                :newer_versions    => newer_versions,
172
177
                :possible_culprits => installed_modules_source.fetched.reject { |x| x == name }
 
178
            elsif child.version < results[:installed_version]
 
179
              raise DowngradingUnsupportedError,
 
180
                :module_name       => name,
 
181
                :requested_version => results[:requested_version],
 
182
                :installed_version => results[:installed_version]
173
183
            end
174
184
          end
175
185