Hello community,

here is the log from the commit of package SUSEConnect for openSUSE:Factory 
checked in at 2018-03-16 10:34:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/SUSEConnect (Old)
 and      /work/SRC/openSUSE:Factory/.SUSEConnect.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "SUSEConnect"

Fri Mar 16 10:34:57 2018 rev:9 rq:587487 version:0.3.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/SUSEConnect/SUSEConnect.changes  2018-02-03 
15:36:25.358409900 +0100
+++ /work/SRC/openSUSE:Factory/.SUSEConnect.new/SUSEConnect.changes     
2018-03-16 10:35:01.590453555 +0100
@@ -1,0 +2,9 @@
+Thu Mar 13 12:54:57 UTC 2018 - fschnizl...@suse.com
+
+- Update to 0.3.8
+  - Fix list-extensions to show the full SLE 15 tree (bsc#1064264)
+  - Enable automatic activation of recommended extensions/modules
+  - Automatically deregister all installed extensions/modules when
+    deregistering a system
+
+-------------------------------------------------------------------

Old:
----
  suse-connect-0.3.7.gem

New:
----
  suse-connect-0.3.8.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ SUSEConnect.spec ++++++
--- /var/tmp/diff_new_pack.rKfw1B/_old  2018-03-16 10:35:02.938405021 +0100
+++ /var/tmp/diff_new_pack.rKfw1B/_new  2018-03-16 10:35:02.946404733 +0100
@@ -16,7 +16,7 @@
 #
 
 Name:           SUSEConnect
-Version:        0.3.7
+Version:        0.3.8
 Release:        0
 %define mod_name suse-connect
 %define mod_full_name %{mod_name}-%{version}

++++++ suse-connect-0.3.7.gem -> suse-connect-0.3.8.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md       2018-01-30 15:28:44.000000000 +0100
+++ new/README.md       2018-03-14 15:36:57.000000000 +0100
@@ -18,7 +18,6 @@
 # Rake tasks
 
 ```
-rake build    # build locally (see PACKAGE.md for details)
 rake bump     # increase version of a gem
 rake console  # Run console loaded with gem
 rake rubocop  # Run Rubocop
@@ -31,38 +30,44 @@
 
 For SLES12SP0
 
-* `docker build -t connect .`
+* `docker build -t connect.12sp0 -f Dockerfile.12sp0 .`
 
 For SLES12SP1
 
-* `docker build -t connect.sp1 -f Dockerfile.sp1 .`
+* `docker build -t connect.12sp1 -f Dockerfile.12sp1 .`
 
 For SLES12SP2
 
-* `docker build -t connect.sp2 -f Dockerfile.sp2 .`
+* `docker build -t connect.12sp2 -f Dockerfile.12sp2 .`
 
 For SLES12SP3
 
-* `docker build -t connect.sp3 -f Dockerfile.sp3 .`
+* `docker build -t connect.12sp3 -f Dockerfile.12sp3 .`
+
+For SLES15SP0
+
+* `docker build -t connect.15sp0 -f Dockerfile.15sp0 .`
 
 ## Run commands
 
+Note: Substitute `connect.12sp0` with the respective image you've built above.
+
 Open a console
 
-* `docker run --privileged --rm -ti connect /bin/bash`
+* `docker run --privileged --rm -ti connect.12sp0 /bin/bash`
 
 Run RSpec
 
-* `docker run --privileged --rm -t connect su nobody -c rspec`
+* `docker run --privileged --rm -t connect.12sp0 su nobody -c rspec`
 
 Run Cucumber
 
-* `docker run --privileged --rm -t connect cucumber`
+* `docker run --privileged --rm -t connect.12sp0 cucumber`
 
 Run Rubocop
 
-* `docker run --privileged --rm -t connect su nobody -c rubocop`
+* `docker run --privileged --rm -t connect.12sp0 su nobody -c rubocop`
 
 Or run whole set of tests together
 
-* `docker run --privileged --rm -t connect sh docker/runall.sh`
+* `docker run --privileged --rm -t connect.12sp0 sh docker/runall.sh`
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/cli.rb new/lib/suse/connect/cli.rb
--- old/lib/suse/connect/cli.rb 2018-01-30 15:28:44.000000000 +0100
+++ new/lib/suse/connect/cli.rb 2018-03-14 15:36:57.000000000 +0100
@@ -204,7 +204,7 @@
 
         @opts.on('--version', 'Print program version.') do
           puts VERSION
-          exit
+          exit 0
         end
 
         @opts.on('--debug', 'Provide debug output.') do |opt|
@@ -214,7 +214,7 @@
 
         @opts.on_tail('-h', '--help', 'Show this message.') do
           puts @opts
-          exit
+          exit 0
         end
 
         @opts.set_summary_width(24)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/client.rb 
new/lib/suse/connect/client.rb
--- old/lib/suse/connect/client.rb      2018-01-30 15:28:44.000000000 +0100
+++ new/lib/suse/connect/client.rb      2018-03-14 15:36:57.000000000 +0100
@@ -25,10 +25,33 @@
       def register!
         announce_or_update
         product = @config.product || Zypper.base_product
+
+        register_product(product, @config.product ? true : false)
+
+        # Only register recommended packages for base products
+        if product.isbase
+          tree = show_product(product)
+          recommended = flatten_tree(tree).select { |e| e[:recommended] == 
true }
+
+          recommended.each do |extension|
+            register_product(extension)
+          end
+        end
+
+        log.info 'Successfully registered system.'
+      end
+
+      # Activate the product, add the service and install the relase package
+      def register_product(product, install_release_package = true)
         service = activate_product(product, @config.email)
+
         System.add_service(service)
-        Zypper.install_release_package(product.identifier) if @config.product
-        print_success_message product
+
+        if install_release_package
+          Zypper.refresh_services
+          Zypper.install_release_package(product.identifier)
+        end
+        print_success_message(product)
       end
 
       # Deregisters a whole system or a single product
@@ -37,18 +60,35 @@
       def deregister!
         raise SystemNotRegisteredError unless registered?
         if @config.product
-          raise BaseProductDeactivationError if @config.product == 
Zypper.base_product
-          service = deactivate_product @config.product
-          remove_or_refresh_service(service)
-          Zypper.remove_release_package @config.product.identifier
-          print_success_message @config.product, action: 'Deregistered'
+          deregister_product(@config.product)
         else
+          tree = show_product(Zypper.base_product)
+          installed = Zypper.installed_products.map(&:identifier)
+          dependencies = flatten_tree(tree).select { |e| installed.include? 
e[:identifier] }
+
+          dependencies.reverse.each do |product|
+            deregister_product(product)
+          end
           @api.deregister(system_auth)
           System.cleanup!
           log.info 'Successfully deregistered system.'
         end
       end
 
+      # Flatten a product tree into an array
+      #
+      # @param tree Remote::Product
+      #
+      # @returns an array of the flattend tree
+      def flatten_tree(tree)
+        result = []
+        tree.extensions.each do |extension|
+          result.push(extension)
+          result += flatten_tree(extension)
+        end
+        result
+      end
+
       # Announce system via SCC/Registration Proxy
       #
       # @returns: [Array] login, password tuple. Those credentials are given 
by SCC/Registration Proxy
@@ -168,6 +208,14 @@
 
       private
 
+      def deregister_product(product)
+        raise BaseProductDeactivationError if product == Zypper.base_product
+        service = deactivate_product product
+        remove_or_refresh_service(service)
+        Zypper.remove_release_package product.identifier
+        print_success_message product, action: 'Deregistered'
+      end
+
       # Announces the system to the server, receiving and storing its 
credentials.
       # When already announced, sends the current hardware details to the 
server
       def announce_or_update
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/connection.rb 
new/lib/suse/connect/connection.rb
--- old/lib/suse/connect/connection.rb  2018-01-30 15:28:44.000000000 +0100
+++ new/lib/suse/connect/connection.rb  2018-03-14 15:36:57.000000000 +0100
@@ -22,8 +22,11 @@
         uri              = URI.parse(endpoint)
         http             = Net::HTTP.new(uri.host, uri.port)
         if http.proxy?
-          http.proxy_user = SUSE::Toolkit::CurlrcDotfile.new.username
-          http.proxy_pass = SUSE::Toolkit::CurlrcDotfile.new.password
+          proxy_address = http.proxy_uri.hostname
+          proxy_port = http.proxy_uri.port
+          proxy_user = SUSE::Toolkit::CurlrcDotfile.new.username
+          proxy_pass = SUSE::Toolkit::CurlrcDotfile.new.password
+          http = Net::HTTP.new(uri.host, uri.port, proxy_address, proxy_port, 
proxy_user, proxy_pass)
         end
         http.use_ssl     = uri.is_a? URI::HTTPS
         http.verify_mode = insecure ? OpenSSL::SSL::VERIFY_NONE : 
OpenSSL::SSL::VERIFY_PEER
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/status.rb 
new/lib/suse/connect/status.rb
--- old/lib/suse/connect/status.rb      2018-01-30 15:28:44.000000000 +0100
+++ new/lib/suse/connect/status.rb      2018-03-14 15:36:57.000000000 +0100
@@ -77,10 +77,6 @@
         extensions
       end
 
-      def grouped_extensions
-        @grouped_extensions ||= available_system_extensions.group_by { |ext| 
ext[:free] }
-      end
-
       def build_product_activation_code(product)
         "#{product.identifier}/#{product.version}/#{product.arch}"
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/templates/extension.text.erb 
new/lib/suse/connect/templates/extension.text.erb
--- old/lib/suse/connect/templates/extension.text.erb   1970-01-01 
01:00:00.000000000 +0100
+++ new/lib/suse/connect/templates/extension.text.erb   2018-03-14 
15:36:57.000000000 +0100
@@ -0,0 +1,4 @@
+<%= render 'extension_item.text', { extension: extension, any_installed: 
any_installed, level: level} %>
+<% extension.fetch(:extensions, []).sort_by { |ext| ext[:name] }.each do 
|sub_extension| -%>
+<%=    render 'extension.text', { extension: sub_extension, any_installed: 
any_installed, level: level + 1} -%>
+<% end -%>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/templates/extension_item.text.erb 
new/lib/suse/connect/templates/extension_item.text.erb
--- old/lib/suse/connect/templates/extension_item.text.erb      2018-01-30 
15:28:44.000000000 +0100
+++ new/lib/suse/connect/templates/extension_item.text.erb      2018-03-14 
15:36:57.000000000 +0100
@@ -1,11 +1,11 @@
-\e[1m<%= extension[:name] %>\e[0m<%
+<%= indent(level) %>\e[1m<%= extension[:name] %>\e[0m<%
   if extension[:installed]
     %> \e[32m(Installed)\e[0m
-  <%= '  ' if defined?(nested) %>De-Install with: <%= '  ' unless 
defined?(nested) %>SUSEConnect \e[31m-d\e[0m -p <%= extension[:activation_code] 
%><%
+<%= indent(level) %>Deactivate with: SUSEConnect \e[31m-d\e[0m -p <%= 
extension[:activation_code] %><%
   else %><%
     if extension[:activated]
       %> \e[33m(Activated)\e[0m<%
     end %>
-  <%= '  ' if defined?(nested) %>Install with:    <%= '  ' unless 
defined?(nested) %>SUSEConnect<%= '   ' if any_installed %> -p <%= 
extension[:activation_code] %><% unless extension[:free] %> -r 
\e[32m\e[1mREGCODE\e[0m<%
+<%= indent(level) %>Activate with: SUSEConnect<%= '   ' if any_installed %> -p 
<%= extension[:activation_code] %><% unless extension[:free] %> -r 
\e[32m\e[1mADDITIONAL REGCODE\e[0m<%
     end %><%
   end %>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/templates/extensions_list.text.erb 
new/lib/suse/connect/templates/extensions_list.text.erb
--- old/lib/suse/connect/templates/extensions_list.text.erb     2018-01-30 
15:28:44.000000000 +0100
+++ new/lib/suse/connect/templates/extensions_list.text.erb     2018-03-14 
15:36:57.000000000 +0100
@@ -1,19 +1,9 @@
 \e[1mAVAILABLE EXTENSIONS AND MODULES\e[0m
 
-<%
-any_installed = installed_products.select {|x| !x.isbase }.any?
-{ true => 'FREE EXTENSIONS', false => 'PAID EXTENSIONS' }.each do |type_key, 
title|
-  if grouped_extensions[type_key] %>
-\e[1m<%= title %>\e[0m
-
-<%  grouped_extensions[type_key].each do |extension| -%>
-  <%= render 'extension_item.text', locals: { extension: extension, 
any_installed: any_installed } %>
-<%    extension[:extensions].each do |extension| -%>
-    <%= render 'extension_item.text', locals: { extension: extension, nested: 
true, any_installed: any_installed } %>
-<%    end
-    end
-  end
-end %>
+<% any_installed = installed_products.select {|x| !x.isbase }.any? -%>
+<%  available_system_extensions.sort_by { |ext| ext[:name] }.each do 
|extension| -%>
+<%=   render 'extension.text', { extension: extension, any_installed: 
any_installed, level: 1 } -%>
+<% end -%>
 \e[1mMORE INFORMATION\e[0m
 
 You can find more information about available modules here:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/connect/version.rb 
new/lib/suse/connect/version.rb
--- old/lib/suse/connect/version.rb     2018-01-30 15:28:44.000000000 +0100
+++ new/lib/suse/connect/version.rb     2018-03-14 15:36:57.000000000 +0100
@@ -1,6 +1,6 @@
 module SUSE
   # Provides access to version number of a gem
   module Connect
-    VERSION = '0.3.7'
+    VERSION = '0.3.8'
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/suse/toolkit/renderer.rb 
new/lib/suse/toolkit/renderer.rb
--- old/lib/suse/toolkit/renderer.rb    2018-01-30 15:28:44.000000000 +0100
+++ new/lib/suse/toolkit/renderer.rb    2018-03-14 15:36:57.000000000 +0100
@@ -7,11 +7,21 @@
         super
       end
 
-      def render(filename, locals: binding)
-        bind = locals.is_a?(Binding) ? locals : 
OpenStruct.new(locals).instance_eval { binding }
-        @templates[filename] ||= ERB.new 
File.read(File.expand_path("../../connect/templates/#{filename}.erb", 
__FILE__)), 0, '-<>'
+      def render(filename, locals = {})
+        bind = binding
+        path = "../../connect/templates/#{filename}.erb"
+
+        locals.each_pair do |key, value|
+          bind.local_variable_set(key, value)
+        end
+
+        @templates[filename] ||= ERB.new File.read(File.expand_path(path, 
__FILE__)), 0, '-<>'
         @templates[filename].result(bind).gsub('\e', "\e")
       end
+
+      def indent(level)
+        ' ' * (level * 4)
+      end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/tasks/package.rake new/lib/tasks/package.rake
--- old/lib/tasks/package.rake  1970-01-01 01:00:00.000000000 +0100
+++ new/lib/tasks/package.rake  2018-03-14 15:36:57.000000000 +0100
@@ -0,0 +1,120 @@
+require 'tempfile'
+require 'English'
+
+def version_from_spec(spec_glob)
+  version = `grep '^Version:' #{spec_glob}`
+  version[/(\d\.\d\.\d)/, 0]
+end
+
+def upstream_file(name, file_type, obs_project, package_name)
+  file = Tempfile.new(name.to_s)
+  file.close
+  `osc -A 'https://api.opensuse.org' cat '#{obs_project}' '#{package_name}' 
'#{package_name}#{file_type}' > #{file.path}`
+  file
+end
+
+namespace :package do
+  package_dir = 'package/'
+  package_name = 'SUSEConnect'
+  obs_project = 'systemsmanagement:SCC'
+  local_spec_file = "#{package_name}.spec"
+  root_path = File.join(File.dirname(__FILE__), '../..')
+
+  desc 'Check local checkout for uncommitted changes'
+  task :check_git do
+    modified = `git ls-files -m -o --exclude-standard .`
+    if modified.empty?
+      puts 'No uncommitted changes detected.'
+    else
+      raise "Warning: uncommitted or untracked changes!\n\n#{modified}\n"
+    end
+  end
+
+  desc 'Checkout from OBS'
+  task :checkout do
+    Dir.chdir "#{root_path}/#{package_dir}" do
+      unless Dir['.osc'].any?
+        sh 'mkdir .tmp; mv * .tmp/'
+        sh "osc co #{obs_project} #{package_name} -o ."
+        puts 'Checkout successful.' if $CHILD_STATUS.exitstatus.zero?
+      end
+      `rm *suse-connect-*.gem` if Dir['*.gem'].any?
+    end
+  end
+
+  desc 'Build gem and copy to package'
+  task :build_gem do
+    Dir.chdir root_path.to_s
+    gemfilename = "suse-connect-#{SUSE::Connect::VERSION}.gem"
+
+    `rm suse-connect-*.gem` if Dir['*.gem'].any?
+    `gem build suse-connect.gemspec`
+
+    raise 'Gem build failed.' unless $CHILD_STATUS.exitstatus.zero?
+
+    sh "cp #{gemfilename} #{package_dir}"
+    puts "Gem built and copied to #{package_dir}." if 
$CHILD_STATUS.exitstatus.zero?
+  end
+
+  desc 'Generate man pages'
+  task :generate_manpages do
+    Dir.chdir root_path.to_s
+    sh 'ronn --roff --manual SUSEConnect --pipe SUSEConnect.8.ronn > 
package/SUSEConnect.8'
+    sh 'ronn --roff --manual SUSEConnect --pipe SUSEConnect.5.ronn > 
package/SUSEConnect.5'
+  end
+
+  desc 'Check for changelog update'
+  task :changelog do
+    Dir.chdir "#{root_path}/#{package_dir}" do
+      file = upstream_file('connect-changes-rake', '.changes', obs_project, 
package_name)
+      if FileUtils.compare_file("#{package_name}.changes", file.path)
+        raise 'Upstream changelog identical. Please run `osc vc` to log new 
changes.'
+      elsif !IO.read("#{package_name}.changes").include? "Update to 
#{SUSE::Connect::VERSION}"
+        raise 'Please run `osc vc` to add changelog about version bump.'
+      else
+        modified = `osc status | grep -Po 'M\s+SUSEConnect\.changes'`
+        puts 'Changelog updated.' if modified
+      end
+    end
+  end
+
+  desc 'Check for version bump in specfile'
+  task :check_specfile_version do
+    Dir.chdir "#{root_path}/#{package_dir}" do
+      file = upstream_file('connect-spec-rake', '.spec', obs_project, 
package_name)
+      original_version = version_from_spec(file.path)
+      new_version      = version_from_spec(local_spec_file)
+
+      if new_version == original_version
+        raise "Version in #{package_name}.spec not changed. Please change to 
the latest version before committing.\n"
+      else
+        puts "Version change to #{new_version} in #{package_name}.spec 
detected."
+      end
+    end
+  end
+
+  desc 'Prepare package for checking in to OBS'
+  task :prepare do
+    puts '== Step 1: check for uncommitted changes'
+    Rake::Task['package:check_git'].invoke
+    ##
+    puts '== Step 2: Checkout from OBS'
+    Rake::Task['package:checkout'].invoke
+    ##
+    puts '== Step 3: Build gem and copy to package'
+    Rake::Task['package:build_gem'].invoke
+    ##
+    puts '== Step 4: Generate man pages'
+    Rake::Task['package:generate_manpages'].invoke
+    ##
+    puts "== Step 5: Check changelog update in #{package_name}.changes"
+    Rake::Task['package:changelog'].invoke
+    ##
+    puts '== Step 6: check for version bump in specfile'
+    Rake::Task['package:check_specfile_version'].invoke
+    ##
+    puts 'Package preparation complete. Run `osc ar` to add changes and `osc 
ci` to check in package to OBS.'
+    Dir.chdir "#{root_path}/#{package_dir}"
+    sh 'osc status'
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2018-01-30 15:28:44.000000000 +0100
+++ new/metadata        2018-03-14 15:36:57.000000000 +0100
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: suse-connect
 version: !ruby/object:Gem::Version
-  version: 0.3.7
+  version: 0.3.8
 platform: ruby
 authors:
 - SUSE Customer Center Team
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2018-01-30 00:00:00.000000000 Z
+date: 2018-03-14 00:00:00.000000000 Z
 dependencies: []
 description: This package provides a command line tool and rubygem library for 
connecting
   a client system to the SUSE Customer Center. It will connect the system to 
your
@@ -49,6 +49,7 @@
 - lib/suse/connect/ssl_certificate.rb
 - lib/suse/connect/status.rb
 - lib/suse/connect/system.rb
+- lib/suse/connect/templates/extension.text.erb
 - lib/suse/connect/templates/extension_item.text.erb
 - lib/suse/connect/templates/extensions_list.text.erb
 - lib/suse/connect/templates/product_statuses.text.erb
@@ -63,6 +64,7 @@
 - lib/suse/toolkit/renderer.rb
 - lib/suse/toolkit/system_calls.rb
 - lib/suse/toolkit/utilities.rb
+- lib/tasks/package.rake
 homepage: https://github.com/SUSE/connect
 licenses:
 - LGPL-2.1
@@ -83,7 +85,7 @@
       version: '0'
 requirements: []
 rubyforge_project: 
-rubygems_version: 2.2.2
+rubygems_version: 2.7.6
 signing_key: 
 specification_version: 4
 summary: SUSE Connect utility to register a system with the SUSE Customer 
Center


Reply via email to