From 6157e508432688fd2172b0969dab6f40735e0012 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Thu, 12 Jun 2014 13:57:58 +0900 Subject: Implement `add_conflicts`. Solve #2383. --- tasks/mrbgem_spec.rake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index c8868fe9c..729518174 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -32,7 +32,7 @@ module MRuby attr_accessor :bins attr_accessor :requirements - attr_reader :dependencies + attr_reader :dependencies, :conflicts attr_accessor :export_include_paths @@ -72,7 +72,7 @@ module MRuby @bins = [] @requirements = [] - @dependencies = [] + @dependencies, @conflicts = [], [] @export_include_paths = [] @export_include_paths << "#{dir}/include" if File.directory? "#{dir}/include" @@ -102,6 +102,10 @@ module MRuby @dependencies << {:gem => name, :requirements => requirements, :default => default_gem} end + def add_conflicts(*names) + @conflicts += names + end + def self.bin=(bin) @bins = [bin].flatten end @@ -323,6 +327,9 @@ module MRuby fail "#{name} version should be #{req_versions.join(' and ')} but was '#{dep_g.version}'" end end + + cfls = g.conflicts.select { |c| gem_table.key? c } + fail "Conflicts of gem `#{g.name}` found: #{cfls.join ', '}" unless cfls.empty? end class << gem_table -- cgit v1.2.3 From eebb94410f52c88974390b8240ce5496d08074cc Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Fri, 13 Jun 2014 01:07:53 +0900 Subject: Implement `add_conflict`. Usage is similar to `add_dependency`. --- tasks/mrbgem_spec.rake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 729518174..d38471739 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -103,7 +103,11 @@ module MRuby end def add_conflicts(*names) - @conflicts += names + @conflicts += names.map { |n| {:gem => n} } + end + + def add_conflict(name, *req) + @conflicts << {:gem => name, :requirements => req.empty? ? nil : req} end def self.bin=(bin) @@ -328,7 +332,10 @@ module MRuby end end - cfls = g.conflicts.select { |c| gem_table.key? c } + cfls = g.conflicts.select { |c| + cfl_g = gem_table[c[:gem]] + cfl_g and cfl_g.version_ok?(c[:requirements] || ['>= 0.0.0']) + }.map { |c| "#{c[:gem]}(#{gem_table[c[:gem]].version})" } fail "Conflicts of gem `#{g.name}` found: #{cfls.join ', '}" unless cfls.empty? end -- cgit v1.2.3