Hello community, here is the log from the commit of package yast2 for openSUSE:Factory checked in at 2016-05-19 12:04:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2 (Old) and /work/SRC/openSUSE:Factory/.yast2.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2" Changes: -------- --- /work/SRC/openSUSE:Factory/yast2/yast2.changes 2016-04-28 20:30:26.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.yast2.new/yast2.changes 2016-05-19 12:04:38.000000000 +0200 @@ -1,0 +2,27 @@ +Wed May 18 09:15:04 UTC 2016 - [email protected] + +- bnc#972575 + - filter out INTERFACETYPE option from ifcfg files. This option + used to be written with incorrect value by older versions of + yast. +- 3.1.189 + +------------------------------------------------------------------- +Tue May 17 14:50:44 CEST 2016 - [email protected] + +- remove invalid_hostname check (fate#319639) +- 3.1.188 + +------------------------------------------------------------------- +Mon May 9 14:55:10 UTC 2016 - [email protected] + +- Add Repository and Repository products classes to the packages + library API (part of FATE#320494) +- 3.1.187 + +------------------------------------------------------------------- +Mon May 9 10:24:27 UTC 2016 - [email protected] + +- Fix "when" key in FinishClient#info + +------------------------------------------------------------------- Old: ---- yast2-3.1.186.tar.bz2 New: ---- yast2-3.1.189.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2.spec ++++++ --- /var/tmp/diff_new_pack.XYyq9t/_old 2016-05-19 12:04:39.000000000 +0200 +++ /var/tmp/diff_new_pack.XYyq9t/_new 2016-05-19 12:04:39.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2 -Version: 3.1.186 +Version: 3.1.189 Release: 0 Summary: YaST2 - Main Package License: GPL-2.0 ++++++ yast2-3.1.186.tar.bz2 -> yast2-3.1.189.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/general/src/lib/installation/finish_client.rb new/yast2-3.1.189/library/general/src/lib/installation/finish_client.rb --- old/yast2-3.1.186/library/general/src/lib/installation/finish_client.rb 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/general/src/lib/installation/finish_client.rb 2016-05-18 13:41:52.000000000 +0200 @@ -90,7 +90,7 @@ # Adapt the metadata for inst_finish API def info { - "when " => modes, + "when" => modes, "steps" => steps, "title" => title } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/network/src/modules/NetworkInterfaces.rb new/yast2-3.1.189/library/network/src/modules/NetworkInterfaces.rb --- old/yast2-3.1.186/library/network/src/modules/NetworkInterfaces.rb 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/network/src/modules/NetworkInterfaces.rb 2016-05-18 13:41:52.000000000 +0200 @@ -627,6 +627,24 @@ ifcfg end + # Filters out INTERFACETYPE option from ifcfg config when it is not needed. + # + # INTERFACETYPE has big impact on wicked even yast behavior. It was overused + # by yast in the past. According wicked team it makes sense to use it only + # in two cases 1) lo device (when it's name is changed - very strongly discouraged) + # 2) dummy device + # + # This function silently modifies user's config files. However, it should make sense + # because: + # - INTERFACETYPE is usually not needed + # - other functions in this module modifies the config as well (see Canonicalize* functions) + # - using INTERFACETYPE is reported as a warning by wicked (it asks for reporting a bug) + # - it is often ignored by wicked + def filter_interfacetype(devmap) + ret = deep_copy(devmap) + ret.delete_if { |k, v| k == "INTERFACETYPE" && !["lo", "dummy"].include?(v) } + end + # Conceal secret information, such as WEP keys, so that the output # can be passed to y2log and bugzilla. # @param [Hash{String => Object}] ifcfg one ifcfg @@ -731,14 +749,17 @@ caliases = Builtins.mapmap(Ops.get_map(config, "_aliases", {})) do |a, c| { a => CanonicalizeIP(c) } end - Ops.set(config, "_aliases", caliases) if caliases != {} # unconditionally? + config["_aliases"] = caliases if caliases != {} config = CanonicalizeIP(config) config = CanonicalizeStartmode(config) + config = filter_interfacetype(config) + devtype = GetTypeFromIfcfg(config) devtype = GetType(d) if devtype.nil? - dev = Ops.get(@Devices, devtype, {}) - Ops.set(dev, d, config) - Ops.set(@Devices, devtype, dev) + + dev = @Devices[devtype] || {} + dev[d] = config + @Devices[devtype] = dev end Builtins.y2debug("Devices=%1", @Devices) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/network/test/network_interfaces_helpers_test.rb new/yast2-3.1.189/library/network/test/network_interfaces_helpers_test.rb --- old/yast2-3.1.186/library/network/test/network_interfaces_helpers_test.rb 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/network/test/network_interfaces_helpers_test.rb 2016-05-18 13:41:52.000000000 +0200 @@ -58,5 +58,18 @@ end end end + + describe "NetworkInterfaces#filter_interfacetype" do + it "drops interface type if present and not set to \"lo\" or \"dummy\"" do + devmap = { "INTERFACETYPE" => "eth" } + + expect(NetworkInterfaces.filter_interfacetype(devmap)).not_to include "INTERFACETYPE" + end + + it "keeps interface type if present and is set to \"lo\" or \"dummy\"" do + expect(NetworkInterfaces.filter_interfacetype("INTERFACETYPE" => "lo")).to include "INTERFACETYPE" + expect(NetworkInterfaces.filter_interfacetype("INTERFACETYPE" => "dummy")).to include "INTERFACETYPE" + end + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/network/testsuite/tests/NetworkInterfaces2.out new/yast2-3.1.189/library/network/testsuite/tests/NetworkInterfaces2.out --- old/yast2-3.1.186/library/network/testsuite/tests/NetworkInterfaces2.out 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/network/testsuite/tests/NetworkInterfaces2.out 2016-05-18 13:41:52.000000000 +0200 @@ -100,6 +100,8 @@ Read .network.value."mynet0".BOOTPROTO "dhcp" Read .network.value."mynet0".INTERFACETYPE "eth" Read .network.value."mynet0".STARTMODE "auto" +Read .target.stat "/sys/class/net/mynet0/type" nil +Read .target.string "/sys/class/net/mynet0/type" nil Dir .network.value."myri5": ["BOOTPROTO", "STARTMODE"] Read .network.value."myri5".BOOTPROTO "dhcp" Read .network.value."myri5".STARTMODE "manual" @@ -129,7 +131,7 @@ Read .network.value."vlan3".ETHERDEVICE "eth0" Read .network.value."vlan3".STARTMODE "manual" Return true -Dump all=$["arc":$["arc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "atm":$["atm5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ci":$["ci5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ctc":$["ctc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "dummy":$["dummy5":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "escon":$["escon5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "eth":$["eth5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"], "eth6":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.255.255.255", "PREFIXLEN":"32", "STARTMODE":"manual"], "eth7":$["STARTMODE":"manual"], "eth8":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth9":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "mynet0":$["BOOTPROTO":"dhcp", "INTERFACETYPE":"eth", "STARTMODE":"auto"]], "fddi":$["fddi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hippi":$["hippi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hsi":$["hsi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ippp":$["ippp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "iucv":$["iucv5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "lo":$["lo":$["BROADCAST":"127.255.255.255", "IPADDR":"127.0.0.1", "NETMASK":"255.0.0.0", "NETWORK":"127.0.0.0", "PREFIXLEN":"8", "STARTMODE":"auto"]], "myri":$["myri5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ppp":$["ppp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "tr":$["tr5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "vlan":$["eth0.3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "myvlantoo":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual", "VLAN_ID":"2"], "virtlan4":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "vlan3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"]]] +Dump all=$["arc":$["arc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "atm":$["atm5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ci":$["ci5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ctc":$["ctc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "dummy":$["dummy5":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "escon":$["escon5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "eth":$["eth5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"], "eth6":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.255.255.255", "PREFIXLEN":"32", "STARTMODE":"manual"], "eth7":$["STARTMODE":"manual"], "eth8":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth9":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "fddi":$["fddi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hippi":$["hippi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hsi":$["hsi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ippp":$["ippp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "iucv":$["iucv5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "lo":$["lo":$["BROADCAST":"127.255.255.255", "IPADDR":"127.0.0.1", "NETMASK":"255.0.0.0", "NETWORK":"127.0.0.0", "PREFIXLEN":"8", "STARTMODE":"auto"]], "mynet":$["mynet0":$["BOOTPROTO":"dhcp", "STARTMODE":"auto"]], "myri":$["myri5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ppp":$["ppp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "tr":$["tr5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "vlan":$["eth0.3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "myvlantoo":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual", "VLAN_ID":"2"], "virtlan4":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "vlan3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"]]] Dump NetworkInterfaces::Write Write .network.value."eth5".BOOTPROTO "dhcp" true Write .network.value."eth5".STARTMODE "manual" true @@ -144,9 +146,6 @@ Write .network.value."eth9".IPADDR "1.2.3.4/8" true Write .network.value."eth9".PREFIXLEN "8" true Write .network.value."eth9".STARTMODE "manual" true -Write .network.value."mynet0".BOOTPROTO "dhcp" true -Write .network.value."mynet0".INTERFACETYPE "eth" true -Write .network.value."mynet0".STARTMODE "auto" true Write .network nil true Return true Write .network.value."ppp5".BOOTPROTO "dhcp" true @@ -189,6 +188,8 @@ Write .network.value."lo".NETWORK "127.0.0.0" true Write .network.value."lo".PREFIXLEN "8" true Write .network.value."lo".STARTMODE "auto" true +Write .network.value."mynet0".BOOTPROTO "dhcp" true +Write .network.value."mynet0".STARTMODE "auto" true Write .network.value."myri5".BOOTPROTO "dhcp" true Write .network.value."myri5".STARTMODE "manual" true Write .network.value."eth0.3".BOOTPROTO "dhcp" true @@ -207,9 +208,9 @@ Write .network nil true Return true Dump NetworkInterfaces::Export -Dump exported=$["arc":$["arc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "atm":$["atm5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ci":$["ci5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ctc":$["ctc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "dummy":$["dummy5":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "escon":$["escon5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "eth":$["eth5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"], "eth6":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.255.255.255", "PREFIXLEN":"32", "STARTMODE":"manual"], "eth7":$["STARTMODE":"manual"], "eth8":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth9":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "mynet0":$["BOOTPROTO":"dhcp", "INTERFACETYPE":"eth", "STARTMODE":"auto"]], "fddi":$["fddi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hippi":$["hippi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hsi":$["hsi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ippp":$["ippp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "iucv":$["iucv5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "lo":$["lo":$["BROADCAST":"127.255.255.255", "IPADDR":"127.0.0.1", "NETMASK":"255.0.0.0", "NETWORK":"127.0.0.0", "PREFIXLEN":"8", "STARTMODE":"auto"]], "myri":$["myri5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ppp":$["ppp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "tr":$["tr5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "vlan":$["eth0.3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "myvlantoo":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual", "VLAN_ID":"2"], "virtlan4":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "vlan3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"]]] +Dump exported=$["arc":$["arc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "atm":$["atm5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ci":$["ci5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ctc":$["ctc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "dummy":$["dummy5":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "escon":$["escon5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "eth":$["eth5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"], "eth6":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.255.255.255", "PREFIXLEN":"32", "STARTMODE":"manual"], "eth7":$["STARTMODE":"manual"], "eth8":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth9":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "fddi":$["fddi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hippi":$["hippi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hsi":$["hsi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ippp":$["ippp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "iucv":$["iucv5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "lo":$["lo":$["BROADCAST":"127.255.255.255", "IPADDR":"127.0.0.1", "NETMASK":"255.0.0.0", "NETWORK":"127.0.0.0", "PREFIXLEN":"8", "STARTMODE":"auto"]], "mynet":$["mynet0":$["BOOTPROTO":"dhcp", "STARTMODE":"auto"]], "myri":$["myri5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ppp":$["ppp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "tr":$["tr5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "vlan":$["eth0.3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "myvlantoo":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual", "VLAN_ID":"2"], "virtlan4":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "vlan3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"]]] Dump NetworkInterfaces::Import -Dump all =$["arc":$["arc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "atm":$["atm5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ci":$["ci5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ctc":$["ctc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "dummy":$["dummy5":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "escon":$["escon5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "eth":$["eth5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"], "eth6":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth7":$["STARTMODE":"manual"], "eth8":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth9":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "mynet0":$["BOOTPROTO":"dhcp", "INTERFACETYPE":"eth", "STARTMODE":"auto"]], "fddi":$["fddi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hippi":$["hippi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hsi":$["hsi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ippp":$["ippp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "iucv":$["iucv5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "lo":$["lo":$["BROADCAST":"127.255.255.255", "IPADDR":"127.0.0.1", "NETMASK":"255.0.0.0", "NETWORK":"127.0.0.0", "PREFIXLEN":"8", "STARTMODE":"auto"]], "myri":$["myri5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ppp":$["ppp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "tr":$["tr5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "vlan":$["eth0.3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "myvlantoo":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual", "VLAN_ID":"2"], "virtlan4":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "vlan3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"]]] +Dump all =$["arc":$["arc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "atm":$["atm5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ci":$["ci5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ctc":$["ctc5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "dummy":$["dummy5":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "escon":$["escon5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "eth":$["eth5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"], "eth6":$["BOOTPROTO":"static", "IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth7":$["STARTMODE":"manual"], "eth8":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"], "eth9":$["IPADDR":"1.2.3.4", "NETMASK":"255.0.0.0", "PREFIXLEN":"8", "STARTMODE":"manual"]], "fddi":$["fddi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hippi":$["hippi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "hsi":$["hsi5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ippp":$["ippp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "iucv":$["iucv5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "lo":$["lo":$["BROADCAST":"127.255.255.255", "IPADDR":"127.0.0.1", "NETMASK":"255.0.0.0", "NETWORK":"127.0.0.0", "PREFIXLEN":"8", "STARTMODE":"auto"]], "mynet":$["mynet0":$["BOOTPROTO":"dhcp", "STARTMODE":"auto"]], "myri":$["myri5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "ppp":$["ppp5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "tr":$["tr5":$["BOOTPROTO":"dhcp", "STARTMODE":"manual"]], "vlan":$["eth0.3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "myvlantoo":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual", "VLAN_ID":"2"], "virtlan4":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"], "vlan3":$["BOOTPROTO":"dhcp", "ETHERDEVICE":"eth0", "STARTMODE":"manual"]]] Dump NetworkInterfaces::GetFreeDevices Return ["1", "2"] Return ["0", "2"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/packages/src/Makefile.am new/yast2-3.1.189/library/packages/src/Makefile.am --- old/yast2-3.1.186/library/packages/src/Makefile.am 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/packages/src/Makefile.am 2016-05-18 13:41:52.000000000 +0200 @@ -24,6 +24,8 @@ lib/packages/commit_result.rb \ lib/packages/dummy_callbacks.rb \ lib/packages/file_conflict_callbacks.rb \ + lib/packages/repository.rb \ + lib/packages/product.rb \ lib/packages/update_message.rb \ lib/packages/update_messages_view.rb diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/packages/src/lib/packages/product.rb new/yast2-3.1.189/library/packages/src/lib/packages/product.rb --- old/yast2-3.1.186/library/packages/src/lib/packages/product.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.189/library/packages/src/lib/packages/product.rb 2016-05-18 13:41:52.000000000 +0200 @@ -0,0 +1,54 @@ +module Packages + # Represent a product which is present in a repository. At this + # time this class is responsible for finding out whether two + # products instances are the same (for example, coming from different + # repositories). + class Product + include Yast::Logger + + # @return [String] Name + attr_reader :name + # @return [String] Version + attr_reader :version + # @return [String] Architecture + attr_reader :arch + # @return [Symbol] Status + attr_reader :status + # @return [Symbol] Category + attr_reader :category + # @return [String] Vendor + attr_reader :vendor + + # Constructor + # + # @param name [String] Name + # @param version [String] Version + # @param arch [String] Architecture + # @param status [Symbol] Status (:selected, :removed, :installed, :available) + # @param category [Symbol] Category (:base, :addon) + # @param vendor [String] Vendor + def initialize(name:, version:, arch:, status:, category:, vendor:) + @name = name + @version = version + @arch = arch.to_sym + @status = status.to_sym + @category = category.to_sym + @vendor = vendor + end + + # Compare two different products + # + # If arch, name, version and vendor match they are considered the + # same product. + # + # @return [Boolean] true if both products are the same; false otherwise + def ==(other) + result = arch == other.arch && name == other.name && + version == other.version && vendor == other.vendor + log.info("Comparing products: '#{arch}' <=> '#{other.arch}', '#{name}' <=> '#{other.name}', "\ + "'#{version}' <=> '#{other.version}', '#{vendor}' <=> '#{other.vendor}' => "\ + "result: #{result}") + result + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/packages/src/lib/packages/repository.rb new/yast2-3.1.189/library/packages/src/lib/packages/repository.rb --- old/yast2-3.1.186/library/packages/src/lib/packages/repository.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.189/library/packages/src/lib/packages/repository.rb 2016-05-18 13:41:52.000000000 +0200 @@ -0,0 +1,186 @@ +require "uri" +require "packages/product" + +module Packages + # This class represents a libzypp repository + # + # It offers a simple API to list them, query basic attributes, + # find out the products they offer and enabling/disabling them. + # + # @example Get all repositories + # all_repos = Packages::Repository.all #=> [#<Packages::Repository>, ...] + # enabled = Packages::Repository.enabled #=> [#<Packages::Repository>] + # + # @example Get a repository using a repo ID + # repo = Packages::Repository.find(1) #=> #<Packages::Repository> + # repo.autorefresh? #=> true + # repo.url #=> "http://download.opensuse.org..." + # + # @example Disabling a repository + # repo = Packages::Repository.find(1) #=> #<Packages::Repository> + # repo.enabled? #=> true + # repo.disabled! + # repo.enabled? #=> false + class Repository + Yast.import "Pkg" + + # Repository schemes considered local (see #local?) + # https://github.com/openSUSE/libzypp/blob/a7a038aeda1ad6d9e441e7d3755612aa83320dce/zypp/Url.cc#L458 + LOCAL_SCHEMES = [:cd, :dvd, :dir, :hd, :iso, :file] + + # @return [Fixnum] Repository ID + attr_reader :repo_id + # @return [String] Repository name + attr_reader :name + # @return [URI::Generic] Repository URL + attr_reader :url + + attr_writer :enabled + private :enabled= + + # Repository was not found + class NotFound < StandardError; end + + class << self + # Return all registered repositories + # + # @return [Array<Repository>] Array containing all repositories + # + # @see Yast::Pkg.SourceGetCurrent + # @see Packages::Repository.find + def all + Yast::Pkg.SourceGetCurrent(false).map do |repo_id| + find(repo_id) + end + end + + # Return only enabled repositories + # + # @return [Array<Repository>] Array containing enabled repositories + def enabled + all.select(&:enabled?) + end + + # Return only disabled repositories + # + # @return [Array<Repository>] Array containing disabled repositories + def disabled + all.reject(&:enabled?) + end + + # Return a repository with the given repo_id + # + # @param repo_id [Fixnum] Repository ID + # @return [Packages::Repository] Repository instance + # + # @raise NotFound + def find(repo_id) + repo_data = Yast::Pkg.SourceGeneralData(repo_id) + raise NotFound if repo_data.nil? + new(repo_id: repo_id, enabled: repo_data["enabled"], + name: repo_data["name"], autorefresh: repo_data["autorefresh"], + url: URI(repo_data["url"])) + end + end + + # Constructor + # + # @param repo_id [Fixnum] Repository ID + # @param name [String] Name + # @param enabled [Boolean] Is the repository enabled? + # @param autorefresh [Boolean] Is auto-refresh enabled for this repository? + # @param url [URI::Generic] Repository URL + def initialize(repo_id:, name:, enabled:, autorefresh:, url:) + @repo_id = repo_id + @name = name + @enabled = enabled + @autorefresh = autorefresh + @url = url + end + + # Return repository scheme + # + # The scheme is determined using the URL + # + # @return [Symbol,nil] URL scheme + def scheme + url.scheme ? url.scheme.to_sym : nil + end + + # Return products contained in the repository + # + # @return [Array<Packages::Product>] Products in the repository + # + # @see Yast::Pkg.ResolvableProperties + # @see Packages::Product + def products + return @products unless @products.nil? + + # Filter products from this repository + candidates = Yast::Pkg.ResolvableProperties("", :product, "").select do |pro| + pro["source"] == repo_id + end + + # Build an array of Packages::Product objects + @products = candidates.map do |data| + Packages::Product.new(name: data["name"], version: data["version"], + arch: data["arch"], category: data["category"], status: data["status"], + vendor: data["vendor"]) + end + end + + # Determine if the repository is local + # + # @return [Boolean] true if the repository is considered local; false otherwise + def local? + LOCAL_SCHEMES.include?(scheme) + end + + # Determine if the repository is enabled + # + # @return [Boolean] true if repository is enabled; false otherwise + def enabled? + @enabled + end + + # Determine if auto-refresh is enabled for the repository + # + # @return [Boolean] true if auto-refresh is enabled; false otherwise + def autorefresh? + @autorefresh + end + + # Return addons in the repository + # + # @return [Array<Packages::Product>] Addons in the repository + # + # @see #products + def addons + products.select { |p| p.category == :addon } + end + + # Enable the repository + # + # The repository status will be stored only in memory. Calling to + # Yast::Pkg.SourceSaveAll will make it persistent. + # + # @see Yast::Pkg.SourceSetEnabled + # @see Yast::Pkg.SourceSaveAll + def enable! + success = Yast::Pkg.SourceSetEnabled(repo_id, true) + success && self.enabled = true + end + + # Disable the repository + # + # The repository status will be stored only in memory. Calling to + # Yast::Pkg.SourceSaveAll will make it persistent. + # + # @see Yast::Pkg.SourceSetEnabled + # @see Yast::Pkg.SourceSaveAll + def disable! + success = Yast::Pkg.SourceSetEnabled(repo_id, false) + success && self.enabled = false + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/packages/test/Makefile.am new/yast2-3.1.189/library/packages/test/Makefile.am --- old/yast2-3.1.186/library/packages/test/Makefile.am 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/packages/test/Makefile.am 2016-05-18 13:41:52.000000000 +0200 @@ -7,7 +7,9 @@ product_test.rb \ signature_check_callbacks_test.rb \ slide_show_test.rb \ - update_messages_view_test.rb + update_messages_view_test.rb \ + lib/repository_test.rb \ + lib/product_test.rb TEST_EXTENSIONS = .rb RB_LOG_COMPILER = rspec diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/packages/test/lib/product_test.rb new/yast2-3.1.189/library/packages/test/lib/product_test.rb --- old/yast2-3.1.186/library/packages/test/lib/product_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.189/library/packages/test/lib/product_test.rb 2016-05-18 13:41:52.000000000 +0200 @@ -0,0 +1,59 @@ +#!/usr/bin/env rspec + +require_relative "../test_helper" + +require "packages/product" + +describe Packages::Product do + BASE_ATTRS = { + name: "openSUSE", version: "20160405", arch: "x86_64", + category: "addon", status: :installed, vendor: "openSUSE" + } + + subject(:product) do + Packages::Product.new(BASE_ATTRS) + end + + describe "==" do + + context "when name, arch, version and vendor match" do + let(:other) { Packages::Product.new(BASE_ATTRS) } + + it "returns true" do + expect(subject == other).to eq(true) + end + end + + context "when name does not match" do + let(:other) { Packages::Product.new(BASE_ATTRS.merge(name: "other")) } + + it "returns false" do + expect(subject == other).to eq(false) + end + end + + context "when version does not match" do + let(:other) { Packages::Product.new(BASE_ATTRS.merge(version: "20160409")) } + + it "returns false" do + expect(subject == other).to eq(false) + end + end + + context "when arch does not match" do + let(:other) { Packages::Product.new(BASE_ATTRS.merge(arch: "i586")) } + + it "returns false" do + expect(subject == other).to eq(false) + end + end + + context "when vendor does not match" do + let(:other) { Packages::Product.new(BASE_ATTRS.merge(vendor: "SUSE")) } + + it "returns false" do + expect(subject == other).to eq(false) + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/packages/test/lib/repository_test.rb new/yast2-3.1.189/library/packages/test/lib/repository_test.rb --- old/yast2-3.1.186/library/packages/test/lib/repository_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-3.1.189/library/packages/test/lib/repository_test.rb 2016-05-18 13:41:52.000000000 +0200 @@ -0,0 +1,243 @@ +#!/usr/bin/env rspec + +require_relative "../test_helper" +require "packages/repository" +require "uri" + +describe Packages::Repository do + Yast.import "Pkg" + + let(:repo_id) { 1 } + let(:enabled) { true } + let(:autorefresh) { true } + let(:repo_url) { URI("http://download.opensuse.org/update/leap/42.1/oss") } + + subject(:repo) do + Packages::Repository.new(repo_id: repo_id, name: "repo-oss", enabled: enabled, + autorefresh: autorefresh, url: repo_url) + end + + let(:disabled) do + Packages::Repository.new(repo_id: repo_id + 1, name: "disabled-repo", enabled: false, + autorefresh: false, url: repo_url) + end + + describe ".all" do + before do + expect(Yast::Pkg).to receive(:SourceGetCurrent).with(false).and_return(repo_ids) + end + + context "when no repository exist" do + let(:repo_ids) { [] } + + it "returns a empty array" do + expect(described_class.all).to eq([]) + end + end + + context "when a repository exist" do + let(:repo_ids) { [repo_id] } + let(:repo) { double("repo") } + + it "returns an array containing existing repositories" do + expect(described_class).to receive(:find).with(repo_id).and_return(repo) + expect(described_class.all).to eq([repo]) + end + end + end + + describe ".enabled" do + before do + allow(Packages::Repository).to receive(:all).and_return([repo, disabled]) + end + + it "returns enabled repositories" do + expect(Packages::Repository.enabled).to eq([repo]) + end + end + + describe ".disabled" do + before do + allow(Packages::Repository).to receive(:all).and_return([repo, disabled]) + end + + it "returns disabled repositories" do + expect(Packages::Repository.disabled).to eq([disabled]) + end + end + + describe ".find" do + before do + allow(Yast::Pkg).to receive(:SourceGeneralData).with(repo_id).and_return(repo_data) + end + + context "when a valid repo_id is given" do + let(:repo_data) do + { "enabled" => true, "autorefresh" => true, "url" => repo_url, + "name" => "Repo #1" } + end + + it "returns a repository with the given repo_id" do + repo = described_class.find(repo_id) + expect(repo.repo_id).to eq(repo_id) + expect(repo.enabled?).to eq(repo_data["enabled"]) + expect(repo.url).to eq(URI(repo_data["url"])) + end + end + + context "when an invalid repo_id is given" do + let(:repo_data) { nil } + + it "raises a RepositoryNotFound error" do + expect { described_class.find(repo_id) }.to raise_error(Packages::Repository::NotFound) + end + end + end + + describe "#scheme" do + context "when URL contains a scheme" do + let(:repo_url) { URI("cd://dev/sr1") } + + it "returns the repository scheme" do + expect(repo.scheme).to eq(:cd) + end + end + + context "when URL does not contain a scheme" do + let(:repo_url) { URI("/home/user/myrepo") } + + it "returns nil" do + expect(repo.scheme).to be_nil + end + end + end + + describe "#local" do + before do + allow(repo).to receive(:scheme).and_return(scheme) + end + + context "when scheme is :cd" do + let(:scheme) { :cd } + + it "returns true" do + expect(repo).to be_local + end + end + + context "when scheme is :dvd" do + let(:scheme) { :dvd } + + it "returns true" do + expect(repo).to be_local + end + end + + context "when scheme is :dir" do + let(:scheme) { :dir } + + it "returns true" do + expect(repo).to be_local + end + end + + context "when scheme is :hd" do + let(:scheme) { :hd } + + it "returns true" do + expect(repo).to be_local + end + end + + context "when scheme is :iso" do + let(:scheme) { :iso } + + it "returns true" do + expect(repo).to be_local + end + end + + context "when scheme is :file" do + let(:scheme) { :file } + + it "returns true" do + expect(repo).to be_local + end + end + + context "when scheme is other than local ones" do + let(:scheme) { :http } + + it "returns false" do + expect(repo).to_not be_local + end + end + end + + describe "#enabled?" do + context "when the repo is enabled" do + let(:enabled) { true } + + it "returns true" do + expect(repo).to be_enabled + end + end + + context "when the repo is not enabled" do + let(:enabled) { false } + + it "returns false" do + expect(repo).to_not be_enabled + end + end + end + + describe "#autorefresh?" do + context "when the repo is autorefresh" do + let(:autorefresh) { true } + + it "returns true" do + expect(repo).to be_autorefresh + end + end + + context "when the repo is not autorefresh" do + let(:autorefresh) { false } + + it "returns false" do + expect(repo).to_not be_autorefresh + end + end + end + + describe "#products" do + let(:products_data) { [product] } + let(:product) do + { "arch" => "x86_64", "name" => "openSUSE", "category" => "addon", + "status" => :available, "source" => repo_id, "vendor" => "openSUSE" } + end + + it "returns products available in the repository" do + allow(Yast::Pkg).to receive(:ResolvableProperties).with("", :product, "") + .and_return(products_data) + product = repo.products.first + expect(product.name).to eq("openSUSE") + end + end + + describe "#enable!" do + it "enables the repository" do + expect(Yast::Pkg).to receive(:SourceSetEnabled).with(disabled.repo_id, true) + .and_return(true) + expect { disabled.enable! }.to change { disabled.enabled? }.from(false).to(true) + end + end + + describe "#disable!" do + it "disables the repository" do + expect(Yast::Pkg).to receive(:SourceSetEnabled).with(repo.repo_id, false) + .and_return(true) + expect { repo.disable! }.to change { repo.enabled? }.from(true).to(false) + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/types/src/modules/Hostname.rb new/yast2-3.1.189/library/types/src/modules/Hostname.rb --- old/yast2-3.1.186/library/types/src/modules/Hostname.rb 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/types/src/modules/Hostname.rb 2016-05-18 13:41:52.000000000 +0200 @@ -157,7 +157,7 @@ def CurrentFQ hostname_data = SCR.Execute(path(".target.bash_output"), "hostname --fqdn") - if hostname_data["exit"] != 0 || invalid_hostname?(hostname_data["stdout"].to_s.strip) + if hostname_data["exit"] != 0 Builtins.y2warning("Using fallback hostname") fqhostname = SCR.Read(path(".target.string"), "/etc/hostname") || "" @@ -227,18 +227,6 @@ publish function: :CurrentFQ, type: "string ()" publish function: :CurrentHostname, type: "string ()" publish function: :CurrentDomain, type: "string ()" - - private - - # It checks if the hostname cannot be used for setting default fqdn - # - # FIXME: Hotfix for bnc#946047. This should be dropped as part of fate#319639 - # implementation - # - # Basicaly, linuxrc sometimes resolves IP when querying "hostname --fqdn" - def invalid_hostname?(hostname) - Stage.initial && IP.Check(hostname) - end end Hostname = HostnameClass.new diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/library/types/test/hostname_test.rb new/yast2-3.1.189/library/types/test/hostname_test.rb --- old/yast2-3.1.186/library/types/test/hostname_test.rb 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/library/types/test/hostname_test.rb 2016-05-18 13:41:52.000000000 +0200 @@ -45,14 +45,4 @@ expect(hostname.CurrentFQ).to eq etc_hostname end - - it "returns default hostname proposal when generating AY profile at the end of installation" do - Yast.import "Stage" - - allow_execute_hostname("1.1.1.1") # linuxrc sometimes provides IP as hostname - allow_read_hostname("") # linuxrc do not provide /etc/hostname - allow(Yast::Stage).to receive(:initial).and_return(true) # and all this happens only in installer - - expect(hostname.CurrentFQ).to eq "linux.#{hostname.DefaultDomain}" - end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/package/yast2.changes new/yast2-3.1.189/package/yast2.changes --- old/yast2-3.1.186/package/yast2.changes 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/package/yast2.changes 2016-05-18 13:41:52.000000000 +0200 @@ -1,4 +1,31 @@ ------------------------------------------------------------------- +Wed May 18 09:15:04 UTC 2016 - [email protected] + +- bnc#972575 + - filter out INTERFACETYPE option from ifcfg files. This option + used to be written with incorrect value by older versions of + yast. +- 3.1.189 + +------------------------------------------------------------------- +Tue May 17 14:50:44 CEST 2016 - [email protected] + +- remove invalid_hostname check (fate#319639) +- 3.1.188 + +------------------------------------------------------------------- +Mon May 9 14:55:10 UTC 2016 - [email protected] + +- Add Repository and Repository products classes to the packages + library API (part of FATE#320494) +- 3.1.187 + +------------------------------------------------------------------- +Mon May 9 10:24:27 UTC 2016 - [email protected] + +- Fix "when" key in FinishClient#info + +------------------------------------------------------------------- Fri Apr 22 14:37:28 UTC 2016 - [email protected] - Added restarting state to Installation to for example recover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-3.1.186/package/yast2.spec new/yast2-3.1.189/package/yast2.spec --- old/yast2-3.1.186/package/yast2.spec 2016-04-25 08:53:55.000000000 +0200 +++ new/yast2-3.1.189/package/yast2.spec 2016-05-18 13:41:52.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2 -Version: 3.1.186 +Version: 3.1.189 Release: 0 Summary: YaST2 - Main Package License: GPL-2.0
