On Thu, 1 Aug 2013 13:11:16 +0200
Thomas Fehr
Hi,
I think I found a slight incompatibility between Ruby and YCP
in YCP, I have the following code:
map btrfs = GetTargetMap()["/dev/btrfs"]:$[]; map ret = filter( map p, btrfs["partitions"]:[], ``(p["uuid"]:""==uuid))[0]:$[];
which, in case of an empty list returned by filter call, relies on default parameter "$[]" after index operation.
In RUby this is:
btrfs = Ops.get(GetTargetMap(), "/dev/btrfs", {}) ret = Ops.get( Builtins.filter(Ops.get_list(btrfs, "partitions", [])) do |p| Ops.get_string(p, "uuid", "") == uuid end, 0, {} )
This works as before in assigning empty map to ret, but it now has the side effect of a line being written to y2log stating: [Ruby] yast/ops.rb:62 Index 0 is out of array size while the equivalent YCP code did not create any y2log entries.
Is this intentional? Depending on the number of occurrences of such accesses in YCP code it could clutter y2log a lot.
Tschuess, Thomas Fehr
Hi Thomas, at first it is feature of ruby bindings that can be disabled, but I found it quite useful, because for me it is usually indication of error if you access array out of its index. If team agree then it can be removed at https://github.com/yast/yast-ruby-bindings/blob/master/src/ruby/yast/ops.rb#... But you detect also another bug, that integer passed to log should be inside while cycle 2 and not 1, so you get where in your code you access out of array dimensions. Josef -- To unsubscribe, e-mail: yast-devel+unsubscribe@opensuse.org To contact the owner, e-mail: yast-devel+owner@opensuse.org