Stefan Schubert write:
> ref: refs/heads/master
> commit 547aa5b85029bdfd4b37ef9464be2494508f4e0d
> Author: Stefan Schubert <[email protected]>
> Date: Fri Dec 18 13:51:40 2009 +0100
>
> handle PackageKit errors (bnc #559233)
> ---
> .../app/controllers/patch_updates_controller.rb | 32 ++++++++++++++++---
> .../views/patch_updates/_patch_summary.html.erb | 2 +-
> .../app/views/patch_updates/index.html.erb | 2 +-
> .../package/yast2-webclient-patch_updates.changes | 5 +++
> 4 files changed, 34 insertions(+), 7 deletions(-)
>
> diff --git
> a/plugins/patch_updates/app/controllers/patch_updates_controller.rb
> b/plugins/patch_updates/app/controllers/patch_updates_controller.rb
> index 79d5f73..db14fb3 100644
> --- a/plugins/patch_updates/app/controllers/patch_updates_controller.rb
> +++ b/plugins/patch_updates/app/controllers/patch_updates_controller.rb
> @@ -13,7 +13,19 @@ class PatchUpdatesController < ApplicationController
> # GET /patch_updates
> # GET /patch_updates.xml
> def index
> - @patch_updates = load_proxy 'org.opensuse.yast.system.patches', :all
> + begin
> + @patch_updates = load_proxy 'org.opensuse.yast.system.patches', :all
> + rescue ActiveResource::ServerError => e
> + error_hash = Hash.from_xml e.response.body
> + logger.warn error_hash.inspect
> + if error_hash["error"] && error_hash["error"]["type"] ==
> "PACKAGEKIT_ERROR"
> + flash[:error] = error_hash["error"]["description"]
> + @patch_updates = []
> + @error = true
> + else
> + raise e
> + end
> + end
You can benefit from ClientException class which handles exceptions from
backend. It contains implementation details which you can abstract ( and don't
need to change code when implementation change).
so your code could look like this one which looks more readable for me:
rescue ActiveResource::ServerError => e
ce = ClientException.new e
if ce.backend_exception_type == "PACKAGEKIT_ERROR"
flash[:error] = ce.message
@patch_updates = []
@error = true
else
raise e
end
end
> logger.debug "Available patches: #...@patch_updates.inspect}"
> end
>
> @@ -23,11 +35,21 @@ class PatchUpdatesController < ApplicationController
> patch_updates = nil
> begin
> patch_updates = load_proxy 'org.opensuse.yast.system.patches', :all
> - rescue Exception => e
> + rescue ActiveResource::ClientError => e
> error = ClientException.new(e)
> patch_updates = nil
> - end
> -
> + error_string = _("A problem occured when loading patch information.")
> + rescue ActiveResource::ServerError => e
> + error_hash = Hash.from_xml e.response.body
> + logger.warn error_hash.inspect
> + if error_hash["error"] && error_hash["error"]["type"] ==
> "PACKAGEKIT_ERROR"
> + error_string = error_hash["error"]["description"]
> + else
> + error_string = _("A problem occured when loading patch information.")
> + end
> + error = ClientException.new(e)
^^^
I don't understand much why you set error, but you should benefit from it same
as I show above, so:
error_string = _("A problem occured when loading patch information.")
error = ClientException.new(e)
error_string = error.message if error.backend_exception_type ==
"PACKAGEKIT_ERROR"
> + patch_updates = nil
> + end
> patches_summary = nil
> <snip/>
>
--
Josef Reidinger
YaST team
maintainer of perl-Bootloader, YaST2-Repair, webyast
(language,time,basesystem,ntp)
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]