----- Original Message -----
From: "Vít Ondruch" vondruch@redhat.com To: ruby-sig@lists.fedoraproject.org Sent: Friday, September 16, 2016 9:52:10 AM Subject: Re: Macros to modify gem dependencies
Dne 15.9.2016 v 20:12 Pavel Valena napsal(a):
----- Original Message -----
From: "Vít Ondruch" vondruch@redhat.com To: ruby-sig@lists.fedoraproject.org Sent: Thursday, September 15, 2016 2:00:59 PM Subject: Re: Macros to modify gem dependencies
Dne 15.9.2016 v 10:06 Vít Ondruch napsal(a):
BTW this is first draft of the macros. I am going to try second implementation, which will probably need to use a bit different syntax for macro calls, but it might replace the 3 lines usage example above with 2 lines version:
%gemspec_remove_runtime_dependency -n fog-dynect %gemspec_add_runtime_dependency -n fog-dynect ['~> 10.0', '>= 10.1']
The above gives me strange result in gemspec
s.add_runtime_dependency(%q<fog-dynect>, [">= 10.1", ">= 10.1", "~> 10.0"])
Unless you fixed "gemspec_remove_runtime_dependency" by yourself, it does not support the -n parameter yet, hence the dependency is not cleaned up prior adding new dependencies.
I have used the version of remove without '-n'. This should be ok, AFAIK.
However,
%gemspec_add_dep -n fog-dynect '~> 10.0'
results in
s.add_dependency(%q<fog-dynect>, [">= 10.1", "~> 10.0"])
Which I consider correct for the first example.
Also, using the notation below does not produce expected result
%gemspec_remove_dep fog-dynect %gemspec_add_dep -n fog-dynect '~> 10.0' %gemspec_add_dep -n fog-dynect '>= 10.1'
=>
s.add_dependency(%q<fog-dynect>, ["~> 10.0"])
FTR, in case of the non-named-variable-macro version (without '-n') the result is correct.
As I promised, this is implementation with the '-n' parameter:
%define gemspec_add_runtime_dependency(n:) \ read -d '' add_runtime_dependency_script << 'EOR' || : \ name = '%{-n*}' \ version = %{*} \ spec = Gem::Specification.load('.%{gem_spec}') \ dep = spec.dependencies.detect { |d| d.type == :runtime && d.name == name } \ if dep \ dep.requirement.concat version \ else \ spec.add_runtime_dependency name, version \ end \ File.write '.%{gem_spec}', spec.to_ruby \ EOR\ echo "$add_runtime_dependency_script" | ruby \ %{nil}
The above can be also written as
%define gemspec_add_dep(n:) \ echo ' \ name = %q<%{-n*}> \ version = %{*} \ spec = Gem::Specification.load(%q<.%{gem_spec}>) \ dep = spec.dependencies.detect { |d| d.type == :runtime && d.name == name } \ if dep \ dep.requirement.concat version \ else \ spec.add_runtime_dependency name, version \ end \ File.write %q<.%{gem_spec}>, spec.to_ruby \ ' | ruby %{nil}
Yes, you can write it like this, but you have to be careful about the usage later, e.g. the example you have used above:
%gemspec_add_dep -n fog-dynect '~> 10.0'
is probably reason for the issues you have described. If checked the log output correctly, you would see following output:
I have used your original code while getting that error. The results should be completely same- I have done some tests and I haven't found any results which differ.
Especially the single quotes do not cause any problems AFAIK.
+ echo ' name = %q<fog-dynect> version = ~' /var/tmp/rpm-tmp.4CWGoP: line 71: 10.0 spec = Gem::Specification.load(%q<./usr/share/gems/specifications/fog-1.38.0.gemspec>) dep = spec.dependencies.detect { |d| d.type == :runtime && d.name == name } if dep dep.requirement.concat version else spec.add_runtime_dependency name, version end File.write %q<./usr/share/gems/specifications/fog-1.38.0.gemspec>, spec.to_ruby : No such file or directory + ruby
The correct usage for this would be:
%gemspec_add_dep -n fog-dynect "~> 10.0"
IOW please note the single vs double quotes ...
Vít
ruby-sig mailing list ruby-sig@lists.fedoraproject.org https://lists.fedoraproject.org/admin/lists/ruby-sig@lists.fedoraproject.org