Dne 15.9.2016 v 20:12 Pavel Valena napsal(a):
> ----- Original Message -----
>> From: "Vít Ondruch" <vondr...@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.

>
> 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:

```
+ 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

Reply via email to