diff -Nru software-center-5.1.14.2/contrib/USC-start-stop-times.py software-center-5.2/contrib/USC-start-stop-times.py --- software-center-5.1.14.2/contrib/USC-start-stop-times.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/contrib/USC-start-stop-times.py 2012-04-13 14:40:44.000000000 +0000 @@ -10,10 +10,8 @@ class TestCaseUSCStartStop(unittest.TestCase): def setUp(self): - ldtp.launchapp('software-center') + ldtp.launchapp('./software-center') assert ldtp.waittillguiexist('frmUbuntuSoftwareCent*') - print sorted(ldtp.getapplist()) - print ldtp.getmemorystat('xchat') self.msgs = [] a = "Time taken for the frame to open is " + str( time.time() - start_time) diff -Nru software-center-5.1.14.2/data/piston_generic_helper.py software-center-5.2/data/piston_generic_helper.py --- software-center-5.1.14.2/data/piston_generic_helper.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/data/piston_generic_helper.py 2012-04-13 14:40:44.000000000 +0000 @@ -192,7 +192,12 @@ token = helper.get_oauth_token_and_verify_sync() # if we don't have a token, error here if not token: - sys.stderr.write("ERROR: can not obtain a oauth token\n") + # it may happen that the parent is closed already so the pipe + # is gone, that is ok as we exit anyway + try: + sys.stderr.write("ERROR: can not obtain a oauth token\n") + except IOError: + pass sys.exit(1) auth = piston_mini_client.auth.OAuthAuthorizer( diff -Nru software-center-5.1.14.2/data/update-software-center-channels software-center-5.2/data/update-software-center-channels --- software-center-5.1.14.2/data/update-software-center-channels 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/data/update-software-center-channels 2012-04-13 16:17:08.000000000 +0000 @@ -5,6 +5,7 @@ DBusGMainLoop(set_as_default=True) import logging import sys +import xapian from gi.repository import GObject @@ -15,19 +16,19 @@ LOG = logging.getLogger("update-software-center-channels") def compare_channels_in_db_to_cache(db): - # the operation get_origins can take some time (~60s?) - cache_origins = set(db._aptcache.get_all_origins()) - db_origins = set(db.get_origins_from_db()) - # origins - LOG.debug("cache_origins: %s" % cache_origins) - LOG.debug("db_origins: %s" % db_origins) - # the db_origins will contain origins from the s-c-agent, so - # we don't need to rebuild if the db has more origins then - # the cache, but we need to rebuild if the cache has origins - # that a-x-i does not have - if not cache_origins.issubset(db_origins): - return True - return False + # the operation get_origins can take some time (~60s?) + cache_origins = set(db._aptcache.get_all_origins()) + db_origins = set(db.get_origins_from_db()) + # origins + LOG.debug("cache_origins: %s" % cache_origins) + LOG.debug("db_origins: %s" % db_origins) + # the db_origins will contain origins from the s-c-agent, so + # we don't need to rebuild if the db has more origins then + # the cache, but we need to rebuild if the cache has origins + # that a-x-i does not have + if not cache_origins.issubset(db_origins): + return True + return False def trigger_axi_update_and_wait(): def _axi_finished(res): @@ -35,11 +36,11 @@ context = GObject.main_context_default() main = GObject.MainLoop(context) system_bus = dbus.SystemBus() - axi = dbus.Interface( - system_bus.get_object("org.debian.AptXapianIndex","/"), - "org.debian.AptXapianIndex") - axi.connect_to_signal("UpdateFinished", _axi_finished) try: + axi = dbus.Interface( + system_bus.get_object("org.debian.AptXapianIndex","/"), + "org.debian.AptXapianIndex") + axi.connect_to_signal("UpdateFinished", _axi_finished) # first arg is force, second update_only axi.update_async(True, False) main.run() @@ -62,9 +63,13 @@ logging.basicConfig(level=logging.DEBUG) # do it - res = check_for_channel_updates_and_trigger_axi() - # return "1" means xapian got updated - if res: - sys.exit(1) + try: + res = check_for_channel_updates_and_trigger_axi() + # return "1" means xapian got updated + if res: + sys.exit(1) + except xapian.DatabaseOpeningError as e: + # this can happen if there is no a-x-i DB yet and we can ignore it + LOG.info("failed to open xapian db: '%s'" % e) # return "0" nothing was done sys.exit(0) diff -Nru software-center-5.1.14.2/debian/changelog software-center-5.2/debian/changelog --- software-center-5.1.14.2/debian/changelog 2012-04-10 17:21:21.000000000 +0000 +++ software-center-5.2/debian/changelog 2012-04-13 16:35:13.000000000 +0000 @@ -1,3 +1,56 @@ +software-center (5.2) precise; urgency=low + + [ Michael Vogt ] + * debian/control: + - recommend xz-lmza instead of lzma (LP: #878354) + * lp:~mvo/software-center/track-axi-changes: + - add a monitor for changes in the apt-xapian-index to ensure + the DB is reopened if the cron job changes the apt-xapian-index + database (LP: #507836) + * lp:~mvo/software-center/lp970342: + - do not crash if the parent goes away (and therefore the pipe) + and the token can not be obtained (LP: #970342) + * lp:~mvo/software-center/lp967036: + - fix UnicodeDecodeError crash for apps with hardware + requirements in the details view (LP: #967036) + * lp:~mvo/software-center/list-a11y: + - restore the a11y support for orca/accerciser/ldtp for + the listview and treeview + * lp:~mvo/software-center/lp979013: + - fix a bug in the review display for certain language + environments (LP: #979013) + * lp:~mvo/software-center/appview-tweaks: + - code cleanup in the sortmode code + * lp:~mvo/software-center/lp772549: + - fix a bug that can result in a blank software center + screen on startup (LP: #772549) + * lp:~mvo/software-center/lp914393: + - adds an explicit sys.exit() to ensure all gtk event + processing is stopped on application quit (LP: #914393) + * lp:~mvo/software-center/lp976169: + - do not crash if apt-xapian-index is not installed + (LP: #976337) + - ignore xapian.DatabaseOpeningError here (happens when + there is no a-x-i so we don't care) (LP: #976169) + * lp:~mvo/software-center/lp976525: + - do not show "upgradable" button when there should be "remove" + (LP: #976525) + + [ Gary Lasker ] + * lp:~gary-lasker/software-center/sorting-fix-lp969215: + - fix sort combo box inconsistencies (LP: #969215) + + [ Dave Morley ] + * lp:~davmor2/software-center/remove_two_lines: + - small fixes for test script USC-start-stop-times.py + + [ Kiwinote ] + * sc/ui/gtk3/widgets/apptreeview.py: + - everyone tries to expand a category in the installed pane by clicking + on the text rather than the expander arrow (LP: #877130) + + -- Michael Vogt Fri, 13 Apr 2012 18:35:13 +0200 + software-center (5.1.14.2) precise; urgency=low [ Michael Vogt ] diff -Nru software-center-5.1.14.2/debian/control software-center-5.2/debian/control --- software-center-5.1.14.2/debian/control 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/debian/control 2012-04-13 14:40:44.000000000 +0000 @@ -52,7 +52,7 @@ update-notifier, software-properties-gtk, sessioninstaller, - lzma + xz-lzma Conflicts: gnome-app-install (<< 1), oneconf (<< 0.2.6.1) Replaces: gnome-app-install Provides: gnome-app-install diff -Nru software-center-5.1.14.2/softwarecenter/backend/reviews/__init__.py software-center-5.2/softwarecenter/backend/reviews/__init__.py --- software-center-5.1.14.2/softwarecenter/backend/reviews/__init__.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/backend/reviews/__init__.py 2012-04-13 14:40:44.000000000 +0000 @@ -43,7 +43,7 @@ from softwarecenter.db.categories import get_query_for_category from softwarecenter.db.database import Application, StoreDatabase import softwarecenter.distro -from softwarecenter.i18n import get_language +from softwarecenter.i18n import get_languages from softwarecenter.utils import (upstream_version_compare, uri_to_filename, get_person_from_config, @@ -254,7 +254,7 @@ bdb.DB_VERSION_MAJOR, bdb.DB_VERSION_MINOR) - self.language = get_language() + self.language = get_languages()[0] if os.path.exists(self.REVIEW_STATS_CACHE_FILE): try: self.REVIEW_STATS_CACHE = pickle.load( diff -Nru software-center-5.1.14.2/softwarecenter/db/application.py software-center-5.2/softwarecenter/db/application.py --- software-center-5.1.14.2/softwarecenter/db/application.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/db/application.py 2012-04-13 16:18:42.000000000 +0000 @@ -482,8 +482,10 @@ for origin in self._pkg.installed.origins] if not self._app.archive_suite in archive_suites: return PkgStates.FORCE_VERSION - if self._pkg.installed and self._pkg.is_upgradable: - return PkgStates.UPGRADABLE + # Don't handle upgrades yet, see bug LP #976525 we need more UI + # for this + #if self._pkg.installed and self._pkg.is_upgradable: + # return PkgStates.UPGRADABLE if self._pkg.is_installed: return PkgStates.INSTALLED else: diff -Nru software-center-5.1.14.2/softwarecenter/db/database.py software-center-5.2/softwarecenter/db/database.py --- software-center-5.1.14.2/softwarecenter/db/database.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/db/database.py 2012-04-13 14:40:44.000000000 +0000 @@ -28,7 +28,7 @@ from softwarecenter.db.pkginfo import get_pkg_info import softwarecenter.paths -from gi.repository import GObject +from gi.repository import GObject, Gio #from softwarecenter.utils import * from softwarecenter.enums import ( @@ -152,6 +152,7 @@ # so no memory leak self._db_per_thread = {} self._parser_per_thread = {} + self._axi_stamp_monitor = None @property def xapiandb(self): @@ -174,7 +175,8 @@ xapiandb = xapian.Database(self._db_pathname) if self._use_axi: try: - axi = xapian.Database("/var/lib/apt-xapian-index/index") + axi = xapian.Database( + softwarecenter.paths.APT_XAPIAN_INDEX_DB_PATH) xapiandb.add_database(axi) except: LOG.exception("failed to add apt-xapian-index") @@ -218,8 +220,22 @@ self._use_axi = use_axi self._use_agent = use_agent if use_axi: + if self._axi_stamp_monitor: + self._axi_stamp_monitor.disconnect_by_func( + self._on_axi_stamp_changed) self._axi_values = parse_axi_values_file() self.nr_databases += 1 + # mvo: we could monitor changes in + # softwarecenter.paths.APT_XAPIAN_INDEX_DB_PATH here too + # as its a text file that points to the current DB + # *if* we do that, we need to change the event == ATTRIBUTE + # change in _on_axi_stamp_changed too + self._axi_stamp = Gio.File.new_for_path( + softwarecenter.paths.APT_XAPIAN_INDEX_UPDATE_STAMP_PATH) + self._timeout_id = None + self._axi_stamp_monitor = self._axi_stamp.monitor_file(0, None) + self._axi_stamp_monitor.connect( + "changed", self._on_axi_stamp_changed) if use_agent: self.nr_databases += 1 # additional dbs @@ -227,6 +243,16 @@ self.nr_databases += 1 self.emit("open", self._db_pathname) + def _on_axi_stamp_changed(self, monitor, afile, otherfile, event): + # we only care about the utime() update from update-a-x-i + if not event == Gio.FileMonitorEvent.ATTRIBUTE_CHANGED: + return + LOG.info("afile '%s' changed" % afile) + if self._timeout_id: + GObject.source_remove(self._timeout_id) + self._timeout_id = None + self._timeout_id = GObject.timeout_add(500, self.reopen) + def add_database(self, database): self._additional_databases.append(database) self.xapiandb.add_database(database) diff -Nru software-center-5.1.14.2/softwarecenter/hw.py software-center-5.2/softwarecenter/hw.py --- software-center-5.1.14.2/softwarecenter/hw.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/hw.py 2012-04-13 14:40:44.000000000 +0000 @@ -86,7 +86,7 @@ # FIXME: deal with OPENGL_DRIVER_BLACKLIST_TAG as this needs rsplit(":") # and a view of all available tags s = TAG_DESCRIPTION.get(tag) - return utf8(s) + return utf8(_(s)) def get_hw_missing_long_description(tags): @@ -107,7 +107,7 @@ # ensure that the last \n is gone if s: s = s[:-1] - return utf8(s) + return utf8(_(s)) def get_private_extensions_hardware_support_for_tags(tags): diff -Nru software-center-5.1.14.2/softwarecenter/i18n.py software-center-5.2/softwarecenter/i18n.py --- software-center-5.1.14.2/softwarecenter/i18n.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/i18n.py 2012-04-13 14:40:44.000000000 +0000 @@ -48,9 +48,11 @@ for lang in langs[:]: if "_" in lang and not lang in FULL: langs.remove(lang) - # fallback - if not langs: - return [get_language()] + # ensure the data from get_language() part of the result too + # (see LP: #979013) + from_get_language = get_language() + if not from_get_language in langs: + langs.insert(0, from_get_language) return langs diff -Nru software-center-5.1.14.2/softwarecenter/paths.py software-center-5.2/softwarecenter/paths.py --- software-center-5.1.14.2/softwarecenter/paths.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/paths.py 2012-04-13 14:40:44.000000000 +0000 @@ -64,6 +64,12 @@ "software-center-agent.db") XAPIAN_PATH = os.path.join(XAPIAN_BASE_PATH, "xapian") +# AXI +APT_XAPIAN_INDEX_BASE_PATH = "/var/lib/apt-xapian-index" +APT_XAPIAN_INDEX_DB_PATH = APT_XAPIAN_INDEX_BASE_PATH + "/index" +APT_XAPIAN_INDEX_UPDATE_STAMP_PATH = (APT_XAPIAN_INDEX_BASE_PATH + + "/update-timestamp") + # ratings&review # relative to datadir diff -Nru software-center-5.1.14.2/softwarecenter/ui/gtk3/app.py software-center-5.2/softwarecenter/ui/gtk3/app.py --- software-center-5.1.14.2/softwarecenter/ui/gtk3/app.py 2012-04-10 16:46:13.000000000 +0000 +++ software-center-5.2/softwarecenter/ui/gtk3/app.py 2012-04-13 16:35:07.000000000 +0000 @@ -131,6 +131,10 @@ dbus.service.Object.__init__(self, bus_name, object_path) self.parent = parent + def stop(self): + """ stop the dbus controller and remove from the bus """ + self.remove_from_connection() + @dbus.service.method('com.ubuntu.SoftwarecenterIFace') def bringToFront(self, args): if args != 'nothing-to-show': @@ -513,14 +517,32 @@ def on_review_stats_loaded(self, reviews): LOG.debug("on_review_stats_loaded: '%s'" % len(reviews)) - def on_window_main_delete_event(self, widget, event): + def close_app(self): + """ perform tasks like save-state etc when the application is + exited + """ + # this may happen during the early initialization + # when "app.run()" was called but has not finished seting up the + # stuff yet, in this case its ok to just exit + if Gtk.main_level() == 0: + LOG.info("closing before the regular main loop was run") + sys.exit(0) + # this is the case when it regularly runs if hasattr(self, "glaunchpad"): self.glaunchpad.shutdown() self.save_state() + # this will not throw exceptions in pygi but "only" log via g_critical + # to the terminal but it might in the future so we add a handler here try: Gtk.main_quit() - except Exception as e: - LOG.warning(e) + except: + LOG.exception("Gtk.main_quit failed") + # ensure that the dbus controller is really gone, just for good + # measure + self.dbusControler.stop() + # exit here explictely to ensure that no further gtk event loops or + # threads run and cause havoc on exit (LP: #914393) + sys.exit(0) def on_window_main_key_press_event(self, widget, event): """ Define all the accelerator keys here - slightly messy, but the ones @@ -827,7 +849,10 @@ get_appmanager().request_action(app, [], [], AppActions.REMOVE) def on_menuitem_close_activate(self, widget): - Gtk.main_quit() + self.close_app() + + def on_window_main_delete_event(self, widget, event): + self.close_app() # Edit Menu def on_menu_edit_activate(self, menuitem): @@ -1171,11 +1196,15 @@ '/com/ubuntu/Softwarecenter') iface = dbus.Interface(proxy_obj, 'com.ubuntu.SoftwarecenterIFace') if args: - iface.bringToFront(args) + res = iface.bringToFront(args) else: # None can not be transported over dbus - iface.bringToFront('nothing-to-show') - sys.exit() + res = iface.bringToFront('nothing-to-show') + # ensure that the running s-c is working + if res is not True: + LOG.info("found a running software-center on dbus, " + "reconnecting") + sys.exit() except dbus.DBusException: bus_name = dbus.service.BusName('com.ubuntu.Softwarecenter', bus) self.dbusControler = SoftwarecenterDbusController(self, bus_name) diff -Nru software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/availablepane.py software-center-5.2/softwarecenter/ui/gtk3/panes/availablepane.py --- software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/availablepane.py 2012-04-10 16:35:00.000000000 +0000 +++ software-center-5.2/softwarecenter/ui/gtk3/panes/availablepane.py 2012-04-13 14:40:44.000000000 +0000 @@ -531,6 +531,10 @@ """callback when the search entry widget changes""" LOG.debug("on_search_terms_changed: %s" % new_text) + # reset the flag in the app_view because each new search should + # reset the sort criteria + self.app_view.reset_default_sort_mode() + self.state.search_term = new_text # do not hide technical items for a custom list search diff -Nru software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/softwarepane.py software-center-5.2/softwarecenter/ui/gtk3/panes/softwarepane.py --- software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/softwarepane.py 2012-04-10 16:11:26.000000000 +0000 +++ software-center-5.2/softwarecenter/ui/gtk3/panes/softwarepane.py 2012-04-13 14:40:44.000000000 +0000 @@ -447,6 +447,9 @@ @wait_for_apt_cache_ready def _refresh_apps_with_apt_cache(self, query): LOG.debug("softwarepane query: %s" % query) + + self.app_view.configure_sort_method(self._is_in_search_mode()) + # a nonblocking query calls on_query_complete once finished with ExecutionTime("enquirer.set_query()"): self.enquirer.set_query( @@ -483,11 +486,7 @@ if (self.state.category and self.state.category.sortmode != SortMethods.BY_ALPHABET): return self.state.category.sortmode - # searches are always by ranking unless the user decided differently - if (self._is_in_search_mode() and - not self.app_view.user_defined_sort_method): - return SortMethods.BY_SEARCH_RANKING - # use the appview combo + # ask the app_view for the sort-mode return self.app_view.get_sort_mode() def on_search_entry_key_press_event(self, event): diff -Nru software-center-5.1.14.2/softwarecenter/ui/gtk3/views/appview.py software-center-5.2/softwarecenter/ui/gtk3/views/appview.py --- software-center-5.1.14.2/softwarecenter/ui/gtk3/views/appview.py 2012-04-10 16:11:26.000000000 +0000 +++ software-center-5.2/softwarecenter/ui/gtk3/views/appview.py 2012-04-13 14:40:44.000000000 +0000 @@ -94,7 +94,8 @@ self.appcount = None self.vadj = 0.0 - self.user_defined_sort_method = False + # list view sorting stuff + self._force_default_sort_method = True self._handler = self.sort_methods_combobox.connect( "changed", self.on_sort_method_changed) @@ -130,7 +131,6 @@ pass def on_sort_method_changed(self, *args): - self.user_defined_sort_method = True self.vadj = 0.0 self.emit("sort-method-changed", self.sort_methods_combobox) @@ -189,17 +189,6 @@ LOG.debug("display_matches called on AppTreeStore, ignoring") return - sort_by_relevance = is_search and not self.user_defined_sort_method - if sort_by_relevance: - self._use_combobox_with_sort_by_search_ranking() - self.set_sort_method_with_no_signal(self._SORT_BY_SEARCH_RANKING) - else: - if not is_search: - self._use_combobox_without_sort_by_search_ranking() - if (self.get_sort_mode() == SortMethods.BY_SEARCH_RANKING and \ - not self.user_defined_sort_method): - self.set_sort_method_with_no_signal(self._SORT_BY_TOP_RATED) - model = self.get_model() # disconnect the model from the view before running # set_from_matches to ensure that the _cell_data_func_cb is not @@ -214,6 +203,38 @@ self.tree_view_scroll.get_vadjustment().set_lower(self.vadj) self.tree_view_scroll.get_vadjustment().set_value(self.vadj) + def reset_default_sort_mode(self): + """ force the appview to reset to the default sort method without + doing a refresh or sending any signals + """ + self._force_default_sort_method = True + + def configure_sort_method(self, is_search=False): + """ configures the sort method UI appropriately based on current + conditions, including whether a search is in progress. + + Note that this will not change the users current sort method, + if that is the intention, call reset_default_sort_mode() + """ + # figure out what combobox we need + if is_search: + self._use_combobox_with_sort_by_search_ranking() + else: + self._use_combobox_without_sort_by_search_ranking() + + # and what sorting + if self._force_default_sort_method: + # always reset this, its the job of the user of the appview + # to call reset_default_sort_mode() to reset this + self._force_default_sort_method = False + # and now set the default sort depending on if its a view or not + if is_search: + self.set_sort_method_with_no_signal( + self._SORT_BY_SEARCH_RANKING) + else: + self.set_sort_method_with_no_signal( + self._SORT_BY_TOP_RATED) + def clear_model(self): return self.tree_view.clear_model() diff -Nru software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/apptreeview.py software-center-5.2/softwarecenter/ui/gtk3/widgets/apptreeview.py --- software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/apptreeview.py 2012-04-10 10:24:40.000000000 +0000 +++ software-center-5.2/softwarecenter/ui/gtk3/widgets/apptreeview.py 2012-04-13 14:40:44.000000000 +0000 @@ -374,7 +374,7 @@ if app: self.app_view.emit("application-activated", app) - def _on_button_event_get_path(self, view, event): + def _on_button_event_get_path(self, view, event, allow_categories=False): if event.button != 1: return False @@ -384,11 +384,18 @@ # check the path is valid and is not a category row path = res[0] - is_cat = self.rowref_is_category(self.get_rowref(view.get_model(), - path)) - if path is None or is_cat: + is_cat = self.rowref_is_category( + self.get_rowref(view.get_model(), path)) + + if path is None: return False + if is_cat: + if allow_categories: + return path + else: + return False + # only act when the selection is already there selection = view.get_selection() if not selection.path_is_selected(path): @@ -397,7 +404,18 @@ return path def _on_button_press_event(self, view, event, tr): - if not self._on_button_event_get_path(view, event): + path = self._on_button_event_get_path(view, event, + allow_categories=False) + if not path: + path = self._on_button_event_get_path(view, event, + allow_categories=True) + if path: + if view.row_expanded(path): + view.collapse_row(path) + else: + view.expand_row(path, True) + return True # swallow event to avoid double action when + # clicking on the expander arrow itself return self.pressed = True @@ -513,7 +531,15 @@ model.row_changed(path, it) return + # update active property cell.set_property('isactive', path == self.expanded_path) + # update "text" property for a11y + raw = model[path][AppGenericStore.COL_ROW_DATA] + if self.rowref_is_category(raw): + text = raw.display_name + else: + text = self.db.get_pkgname(raw) + cell.set_property('text', text) def _app_activated_cb(self, btn, btn_id, app, store, path): if self.rowref_is_category(app): diff -Nru software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/labels.py software-center-5.2/softwarecenter/ui/gtk3/widgets/labels.py --- software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/labels.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/softwarecenter/ui/gtk3/widgets/labels.py 2012-04-13 14:40:44.000000000 +0000 @@ -20,7 +20,6 @@ from gettext import gettext as _ from softwarecenter.hw import get_hw_short_description -from softwarecenter.utils import utf8 class HardwareRequirementsLabel(Gtk.HBox): @@ -58,6 +57,7 @@ def _build_ui(self): self._label = Gtk.Label() + self._label.set_selectable(True) self._label.show() self.pack_start(self._label, True, True, 0) @@ -66,12 +66,16 @@ sym = self.SUPPORTED_SYM[self.result] # we add a trailing if self.last_item: - s = self.LABEL_LAST_ITEM + label_text = self.LABEL_LAST_ITEM else: - s = self.LABEL - return _(s) % { + label_text = self.LABEL + short_descr = get_hw_short_description(self.tag) + return _(label_text) % { "sym": sym, - "hardware": _(utf8(get_hw_short_description(self.tag))) + # we need unicode() here instead of utf8 or str because + # the %s in "label_text" will cause str() to be called on the + # encoded string, but it will not know what encoding to use + "hardware": unicode(short_descr, "utf8", "ignore") } def set_hardware_requirement(self, tag, result): diff -Nru software-center-5.1.14.2/softwarecenter/version.py software-center-5.2/softwarecenter/version.py --- software-center-5.1.14.2/softwarecenter/version.py 2012-04-10 17:34:14.000000000 +0000 +++ software-center-5.2/softwarecenter/version.py 2012-04-13 16:48:26.000000000 +0000 @@ -1,5 +1,5 @@ -VERSION='5.1.14.2' +VERSION='5.2' CODENAME='precise' DISTRO='Ubuntu' RELEASE='12.04' diff -Nru software-center-5.1.14.2/test/coverage_summary software-center-5.2/test/coverage_summary --- software-center-5.1.14.2/test/coverage_summary 2012-04-10 17:34:04.000000000 +0000 +++ software-center-5.2/test/coverage_summary 2012-04-13 16:48:16.000000000 +0000 @@ -1,195 +1,195 @@ -Name Stmts Miss Cover ----------------------------------------------------------------------------------------------------------------------------------------------- -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/__init__ 2 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/channel 181 19 90% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/channel_impl/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/channel_impl/aptchannels 144 49 66% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/fake_review_settings 76 33 57% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/installbackend 36 14 61% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/installbackend_impl/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/installbackend_impl/aptd 502 330 34% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/launchpad 184 112 39% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/login 9 2 78% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/login_sso 96 32 67% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/oneconfhandler/__init__ 17 5 71% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/oneconfhandler/core 97 14 86% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/piston/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/piston/rnrclient 44 29 34% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/piston/rnrclient_fake 147 80 46% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/piston/rnrclient_pristine 80 26 68% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/recagent 138 47 66% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/reviews/__init__ 360 142 61% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/reviews/rnr 205 100 51% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/scagent 78 26 67% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/spawn_helper 88 14 84% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/transactionswatcher 50 19 62% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/ubuntusso 75 38 49% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/unitylauncher 26 11 58% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/weblive 168 100 40% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/backend/weblive_pristine 147 84 43% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/cmdfinder 31 3 90% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/config 29 9 69% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/__init__ 8 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/appfilter 67 11 84% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/application 518 124 76% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/categories 310 36 88% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/database 350 88 75% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/debfile 125 35 72% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/enquire 146 6 96% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/history 36 13 64% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/history_impl/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/history_impl/apthistory 132 33 75% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/pkginfo 107 35 67% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/pkginfo_impl/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/pkginfo_impl/aptcache 521 149 71% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/update 657 62 91% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/db/utils 23 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/distro/Debian 86 61 29% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/distro/Ubuntu 125 51 59% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/distro/__init__ 90 43 52% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/enums 121 8 93% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/expunge 41 28 32% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/gwibber_helper 64 22 66% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/hw 40 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/i18n 46 4 91% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/log 62 14 77% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/netstatus 88 18 80% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/paths 43 8 81% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/plugin 62 4 94% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/region 79 5 94% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/testutils 115 4 97% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/SimpleGtkbuilderApp 18 5 72% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/app 709 348 51% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/aptd_gtk3 44 36 18% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/dialogs/__init__ 80 28 65% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/dialogs/deauthorize_dialog 79 67 15% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/dialogs/dependency_dialogs 79 19 76% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/dialogs/dialog_tos 50 5 90% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/drawing 66 32 52% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/em 33 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/gmenusearch 80 35 56% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/models/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/models/appstore2 274 29 89% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/models/pendingstore 111 65 41% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/availablepane 427 134 69% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/basepane 15 5 67% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/globalpane 58 4 93% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/historypane 252 21 92% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/installedpane 461 147 68% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/pendingpane 95 28 71% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/softwarepane 288 69 76% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/panes/viewswitcher 168 65 61% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/review_gui_helper 794 311 61% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/session/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/session/appmanager 89 12 87% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/session/navhistory 164 17 90% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/session/viewmanager 125 28 78% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/utils 65 12 82% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/appdetailsview 1268 188 85% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/appview 190 31 84% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/catview_gtk 446 61 86% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/pkgnamesview 64 8 88% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/purchaseview 203 81 60% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/views/webkit 60 29 52% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/actionbar 214 77 64% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/apptreeview 441 228 48% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/backforward 101 20 80% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/buttons 410 66 84% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/cellrenderers 309 51 83% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/containers 378 24 94% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/description 791 424 46% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/exhibits 373 62 83% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/imagedialog 35 3 91% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/labels 59 11 81% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/menubutton 64 45 30% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/oneconfviews 98 45 54% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/recommendations 189 39 79% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/reviews 578 112 81% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/searchaid 179 61 66% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/searchentry 89 25 72% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/separators 26 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/spinner 64 2 97% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/stars 362 44 88% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/symbolic_icons 149 10 93% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/thumbnail 340 59 83% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/videoplayer 110 56 49% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/viewport 24 15 38% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/gtk3/widgets/weblivedialog 68 58 15% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/qml/__init__ 0 0 100% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/qml/categoriesmodel 53 21 60% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/qml/pkglist 134 66 51% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/ui/qml/reviewslist 46 3 93% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/utils 436 114 74% -/home/egon/devel/software-center/build-area/software-center-5.1.14.2/softwarecenter/version 4 0 100% -__init__ 0 0 100% -data/plugins/mock_plugin 4 0 100% -gtk3/test_app_view 61 0 100% -gtk3/test_appdetailsview 332 5 98% -gtk3/test_appmanager 51 0 100% -gtk3/test_appstore2 35 0 100% -gtk3/test_catview 172 0 100% -gtk3/test_custom_lists 38 0 100% -gtk3/test_debfile_view 27 0 100% -gtk3/test_dialogs 31 0 100% -gtk3/test_globalpane 13 0 100% -gtk3/test_install_progress 32 0 100% -gtk3/test_installedpane 40 0 100% -gtk3/test_navhistory 135 0 100% -gtk3/test_panes 42 0 100% -gtk3/test_purchase 77 0 100% -gtk3/test_recommendations_widgets 24 0 100% -gtk3/test_reviews 129 2 98% -gtk3/test_search 48 0 100% -gtk3/test_unity_launcher_integration 84 0 100% -gtk3/test_views 40 0 100% -gtk3/test_widgets 161 1 99% -qml/test_ui_qml_helpers 78 0 100% -test_addons 30 0 100% -test_aptd 72 28 61% -test_apthistory 71 1 99% -test_categories 64 0 100% -test_channels 25 0 100% -test_cmdfiner 20 0 100% -test_database 398 1 99% -test_debfileapplication 67 1 99% -test_description_norm 35 0 100% -test_distro 20 0 100% -test_downloader 49 0 100% -test_enquire 28 2 93% -test_gwibber 34 7 79% -test_htmlize 21 0 100% -test_hw 22 0 100% -test_i18n 36 0 100% -test_launchpad 31 1 97% -test_login_backend 19 0 100% -test_mime 25 0 100% -test_netstatus 16 0 100% -test_origin 22 0 100% -test_package_info 59 0 100% -test_pep8 39 1 97% -test_pkginfo 36 1 97% -test_plugin 18 0 100% -test_ppa_iconfilename 41 1 98% -test_purchase_backend 47 23 51% -test_pyflakes 9 0 100% -test_recagent 101 26 74% -test_region 46 0 100% -test_reinstall_purchased 140 0 100% -test_rnr_api 14 0 100% -test_scagent 40 2 95% -test_spawn_helper 17 0 100% -test_startup 39 24 38% -test_testutils 37 0 100% -test_ubuntu_sso_api 19 0 100% -test_utils 125 14 89% -test_where_is_it 51 9 82% -test_xapian 71 1 99% -test_xapian_query 53 1 98% ----------------------------------------------------------------------------------------------------------------------------------------------- -TOTAL 23812 6013 75% +Name Stmts Miss Cover +----------------------------------------------------------------------------------------------------------------------------------------- +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/__init__ 2 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/channel 181 19 90% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/channel_impl/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/channel_impl/aptchannels 144 49 66% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/fake_review_settings 76 33 57% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/installbackend 36 14 61% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/installbackend_impl/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/installbackend_impl/aptd 502 330 34% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/launchpad 184 112 39% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/login 9 2 78% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/login_sso 96 32 67% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/oneconfhandler/__init__ 17 5 71% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/oneconfhandler/core 97 14 86% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/piston/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/piston/rnrclient 44 29 34% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/piston/rnrclient_fake 147 80 46% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/piston/rnrclient_pristine 80 26 68% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/recagent 138 47 66% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/reviews/__init__ 360 129 64% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/reviews/rnr 205 100 51% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/scagent 78 26 67% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/spawn_helper 88 14 84% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/transactionswatcher 50 19 62% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/ubuntusso 75 38 49% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/unitylauncher 26 11 58% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/weblive 168 100 40% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/backend/weblive_pristine 147 84 43% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/cmdfinder 31 3 90% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/config 29 9 69% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/__init__ 8 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/appfilter 67 11 84% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/application 516 124 76% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/categories 310 36 88% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/database 365 95 74% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/debfile 125 35 72% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/enquire 146 6 96% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/history 36 13 64% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/history_impl/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/history_impl/apthistory 132 33 75% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/pkginfo 107 36 66% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/pkginfo_impl/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/pkginfo_impl/aptcache 521 151 71% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/update 657 62 91% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/db/utils 23 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/distro/Debian 86 61 29% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/distro/Ubuntu 125 51 59% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/distro/__init__ 90 43 52% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/enums 121 8 93% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/expunge 41 28 32% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/gwibber_helper 64 22 66% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/hw 40 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/i18n 47 4 91% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/log 62 14 77% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/netstatus 88 18 80% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/paths 46 8 83% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/plugin 62 4 94% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/region 79 5 94% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/testutils 115 4 97% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/SimpleGtkbuilderApp 18 5 72% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/app 720 357 50% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/aptd_gtk3 44 36 18% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/dialogs/__init__ 80 28 65% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/dialogs/deauthorize_dialog 79 67 15% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/dialogs/dependency_dialogs 79 19 76% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/dialogs/dialog_tos 50 5 90% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/drawing 66 32 52% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/em 33 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/gmenusearch 80 35 56% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/models/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/models/appstore2 274 44 84% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/models/pendingstore 111 65 41% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/availablepane 428 135 68% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/basepane 15 5 67% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/globalpane 58 4 93% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/historypane 252 22 91% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/installedpane 461 147 68% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/pendingpane 95 28 71% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/softwarepane 287 69 76% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/panes/viewswitcher 168 65 61% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/review_gui_helper 794 311 61% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/session/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/session/appmanager 89 12 87% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/session/navhistory 164 17 90% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/session/viewmanager 125 28 78% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/utils 65 12 82% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/appdetailsview 1268 186 85% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/appview 192 32 83% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/catview_gtk 446 61 86% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/pkgnamesview 64 8 88% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/purchaseview 203 81 60% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/views/webkit 60 29 52% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/actionbar 214 77 64% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/apptreeview 457 239 48% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/backforward 101 20 80% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/buttons 410 66 84% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/cellrenderers 309 51 83% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/containers 378 24 94% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/description 791 424 46% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/exhibits 373 62 83% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/imagedialog 35 3 91% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/labels 60 11 82% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/menubutton 64 45 30% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/oneconfviews 98 45 54% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/recommendations 189 39 79% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/reviews 578 112 81% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/searchaid 179 61 66% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/searchentry 89 25 72% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/separators 26 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/spinner 64 2 97% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/stars 362 44 88% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/symbolic_icons 149 10 93% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/thumbnail 340 59 83% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/videoplayer 110 56 49% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/viewport 24 15 38% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/gtk3/widgets/weblivedialog 68 58 15% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/qml/__init__ 0 0 100% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/qml/categoriesmodel 53 21 60% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/qml/pkglist 134 66 51% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/ui/qml/reviewslist 46 3 93% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/utils 436 114 74% +/home/egon/devel/software-center/build-area/software-center-5.2/softwarecenter/version 4 0 100% +__init__ 0 0 100% +data/plugins/mock_plugin 4 0 100% +gtk3/test_app_view 64 0 100% +gtk3/test_appdetailsview 332 5 98% +gtk3/test_appmanager 51 0 100% +gtk3/test_appstore2 35 0 100% +gtk3/test_catview 172 0 100% +gtk3/test_custom_lists 38 0 100% +gtk3/test_debfile_view 27 0 100% +gtk3/test_dialogs 31 0 100% +gtk3/test_globalpane 13 0 100% +gtk3/test_install_progress 32 0 100% +gtk3/test_installedpane 40 0 100% +gtk3/test_navhistory 135 0 100% +gtk3/test_panes 42 0 100% +gtk3/test_purchase 77 0 100% +gtk3/test_recommendations_widgets 24 0 100% +gtk3/test_reviews 129 2 98% +gtk3/test_search 48 0 100% +gtk3/test_unity_launcher_integration 84 0 100% +gtk3/test_views 40 0 100% +gtk3/test_widgets 168 1 99% +qml/test_ui_qml_helpers 78 0 100% +test_addons 30 0 100% +test_aptd 72 28 61% +test_apthistory 71 1 99% +test_categories 64 0 100% +test_channels 25 0 100% +test_cmdfiner 20 0 100% +test_database 418 1 99% +test_debfileapplication 67 1 99% +test_description_norm 35 0 100% +test_distro 20 0 100% +test_downloader 49 0 100% +test_enquire 28 2 93% +test_gwibber 34 7 79% +test_htmlize 21 0 100% +test_hw 22 0 100% +test_i18n 39 0 100% +test_launchpad 31 1 97% +test_login_backend 19 0 100% +test_mime 25 0 100% +test_netstatus 16 0 100% +test_origin 22 0 100% +test_package_info 59 0 100% +test_pep8 39 1 97% +test_pkginfo 36 1 97% +test_plugin 18 0 100% +test_ppa_iconfilename 41 1 98% +test_purchase_backend 47 23 51% +test_pyflakes 9 0 100% +test_recagent 101 26 74% +test_region 46 0 100% +test_reinstall_purchased 140 0 100% +test_rnr_api 14 0 100% +test_scagent 40 2 95% +test_spawn_helper 17 0 100% +test_startup 39 24 38% +test_testutils 37 0 100% +test_ubuntu_sso_api 19 0 100% +test_utils 125 14 89% +test_where_is_it 51 9 82% +test_xapian 71 1 99% +test_xapian_query 53 1 98% +----------------------------------------------------------------------------------------------------------------------------------------- +TOTAL 23892 6046 75% diff -Nru software-center-5.1.14.2/test/gtk3/test_app_view.py software-center-5.2/test/gtk3/test_app_view.py --- software-center-5.1.14.2/test/gtk3/test_app_view.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/test/gtk3/test_app_view.py 2012-04-13 14:40:44.000000000 +0000 @@ -71,6 +71,7 @@ # test normal window (no search) matches = get_test_enquirer_matches(appview.helper.db) appview.display_matches(matches, is_search=False) + appview.configure_sort_method(is_search=False) do_events() in_model = [] for item in model: @@ -80,6 +81,7 @@ # now repeat and simulate a search matches = get_test_enquirer_matches(appview.helper.db) appview.display_matches(matches, is_search=True) + appview.configure_sort_method(is_search=True) do_events() in_model = [] for item in model: @@ -89,6 +91,7 @@ # and back again to no search matches = get_test_enquirer_matches(appview.helper.db) appview.display_matches(matches, is_search=False) + appview.configure_sort_method(is_search=False) do_events() # collect items in the model in_model = [] diff -Nru software-center-5.1.14.2/test/gtk3/test_widgets.py software-center-5.2/test/gtk3/test_widgets.py --- software-center-5.1.14.2/test/gtk3/test_widgets.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/test/gtk3/test_widgets.py 2012-04-13 14:40:44.000000000 +0000 @@ -9,12 +9,11 @@ from testutils import setup_test_env, do_events setup_test_env() +from softwarecenter.utils import utf8 from softwarecenter.ui.gtk3.widgets.reviews import get_test_reviews_window - from softwarecenter.ui.gtk3.widgets.labels import ( HardwareRequirementsLabel, HardwareRequirementsBox) - # window destory timeout TIMEOUT=100 @@ -145,6 +144,18 @@ label.set_hardware_requirement('hardware::video:opengl', 'yes') self.assertEqual(len(label.get_children()), 1) + # regression test for bug #967036 + @patch("softwarecenter.ui.gtk3.widgets.labels.get_hw_short_description") + def test_hardware_requirements_label_utf8(self, mock_get_hw): + magic_marker = u" \u1234 GPS" + mock_get_hw.return_value = utf8(magic_marker) + label = HardwareRequirementsLabel() + label.set_hardware_requirement('hardware::gps', 'yes') + self.assertEqual( + label.get_label(), + u"%s%s" % (HardwareRequirementsLabel.SUPPORTED_SYM["yes"], + magic_marker)) + def test_hardware_requirements_box(self): box = HardwareRequirementsBox() # test empty diff -Nru software-center-5.1.14.2/test/test_database.py software-center-5.2/test/test_database.py --- software-center-5.1.14.2/test/test_database.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/test/test_database.py 2012-04-13 16:25:50.000000000 +0000 @@ -3,6 +3,8 @@ import apt import os import re +import tempfile +import time import unittest import xapian @@ -12,7 +14,7 @@ from testutils import setup_test_env setup_test_env() - +import softwarecenter.paths from softwarecenter.db.application import Application, AppDetails from softwarecenter.db.database import StoreDatabase from softwarecenter.db.enquire import AppEnquire @@ -33,8 +35,9 @@ PkgStates, ) from softwarecenter.testutils import ( - get_test_db, + get_test_db, get_test_pkg_info, + do_events, make_software_center_agent_subscription_dict, make_software_center_agent_app_dict, ) @@ -159,7 +162,7 @@ def test_license_string_data_from_software_center_agent(self): #os.environ["SOFTWARE_CENTER_DEBUG_HTTP"] = "1" - os.environ["SOFTWARE_CENTER_AGENT_HOST"] = "http://sc.staging.ubuntu.com/" + #os.environ["SOFTWARE_CENTER_AGENT_HOST"] = "http://sc.staging.ubuntu.com/" # staging does not have a valid cert os.environ["PISTON_MINI_CLIENT_DISABLE_SSL_VALIDATION"] = "1" cache = get_test_pkg_info() @@ -172,7 +175,7 @@ license = doc.get_value(XapianValues.LICENSE) self.assertNotEqual(license, "") self.assertNotEqual(license, None) - del os.environ["SOFTWARE_CENTER_AGENT_HOST"] + #del os.environ["SOFTWARE_CENTER_AGENT_HOST"] def test_application(self): db = StoreDatabase("/var/cache/software-center/xapian", self.cache) @@ -322,7 +325,7 @@ def test_for_purchase_apps_date_published(self): from softwarecenter.testutils import get_test_pkg_info #os.environ["SOFTWARE_CENTER_DEBUG_HTTP"] = "1" - os.environ["SOFTWARE_CENTER_AGENT_HOST"] = "http://sc.staging.ubuntu.com/" + #os.environ["SOFTWARE_CENTER_AGENT_HOST"] = "http://sc.staging.ubuntu.com/" # staging does not have a valid cert os.environ["PISTON_MINI_CLIENT_DISABLE_SSL_VALIDATION"] = "1" cache = get_test_pkg_info() @@ -337,7 +340,7 @@ # make sure that a date_published value is provided self.assertNotEqual(date_published, "") self.assertNotEqual(date_published, None) - del os.environ["SOFTWARE_CENTER_AGENT_HOST"] + #del os.environ["SOFTWARE_CENTER_AGENT_HOST"] def test_hardware_requirements_satisfied(self): with patch.object(AppDetails, 'hardware_requirements') as mock_hw: @@ -645,8 +648,9 @@ details._pkg.versions = [normal_version, not_automatic_version] details._pkg.installed = normal_version details._pkg.is_installed = True - details._pkg.is_upgradable = True - self.assertEqual(details.pkg_state, PkgStates.UPGRADABLE) + # disabled for now + #details._pkg.is_upgradable = True + self.assertEqual(details.pkg_state, PkgStates.INSTALLED) app.archive_suite = not_automatic_version self.assertEqual(details.pkg_state, PkgStates.FORCE_VERSION) @@ -676,6 +680,32 @@ details.force_not_automatic_archive_suite("") self.assertEqual(app.archive_suite, "") +class TrackDBTestCase(unittest.TestCase): + + def test_track_db_open(self): + tmpdir = tempfile.mkdtemp() + tmpstamp = os.path.join(tmpdir, "update-stamp") + open(tmpstamp, "w") + softwarecenter.paths.APT_XAPIAN_INDEX_UPDATE_STAMP_PATH = tmpstamp + softwarecenter.paths.APT_XAPIAN_INDEX_DB_PATH = \ + softwarecenter.paths.XAPIAN_PATH + db = get_test_db() + db._axi_stamp_monitor = None + db._on_axi_stamp_changed = Mock() + self.assertFalse(db._on_axi_stamp_changed.called) + db.open(use_axi=True) + do_events() + self.assertFalse(db._on_axi_stamp_changed.called) + do_events() + #print "modifiyng stampfile: ", tmpstamp + os.utime(tmpstamp, (0, 0)) + # wait up to 5s until the gvfs delivers the signal + for i in range(50): + do_events() + time.sleep(0.1) + if db._on_axi_stamp_changed.called: + break + self.assertTrue(db._on_axi_stamp_changed.called) if __name__ == "__main__": #import logging diff -Nru software-center-5.1.14.2/test/test_i18n.py software-center-5.2/test/test_i18n.py --- software-center-5.1.14.2/test/test_i18n.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/test/test_i18n.py 2012-04-13 14:40:44.000000000 +0000 @@ -42,6 +42,10 @@ # falls back to english os.environ["LANGUAGE"] = "yxy_YYY" self.assertEqual(get_languages(), ["en"]) + os.environ["LANGUAGE"] = "es_MX:es_ES:es_AR:es_ES:en" + os.environ["LANG"] = "es_MX.UTF-8" + self.assertEqual(get_languages(), ["es", "en"]) + def test_init_locale(self): import locale diff -Nru software-center-5.1.14.2/utils/piston-helpers/piston_generic_helper.py software-center-5.2/utils/piston-helpers/piston_generic_helper.py --- software-center-5.1.14.2/utils/piston-helpers/piston_generic_helper.py 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/utils/piston-helpers/piston_generic_helper.py 2012-04-13 14:40:44.000000000 +0000 @@ -192,7 +192,12 @@ token = helper.get_oauth_token_and_verify_sync() # if we don't have a token, error here if not token: - sys.stderr.write("ERROR: can not obtain a oauth token\n") + # it may happen that the parent is closed already so the pipe + # is gone, that is ok as we exit anyway + try: + sys.stderr.write("ERROR: can not obtain a oauth token\n") + except IOError: + pass sys.exit(1) auth = piston_mini_client.auth.OAuthAuthorizer( diff -Nru software-center-5.1.14.2/utils/update-software-center-channels software-center-5.2/utils/update-software-center-channels --- software-center-5.1.14.2/utils/update-software-center-channels 2012-03-30 13:37:08.000000000 +0000 +++ software-center-5.2/utils/update-software-center-channels 2012-04-13 16:17:08.000000000 +0000 @@ -5,6 +5,7 @@ DBusGMainLoop(set_as_default=True) import logging import sys +import xapian from gi.repository import GObject @@ -15,19 +16,19 @@ LOG = logging.getLogger("update-software-center-channels") def compare_channels_in_db_to_cache(db): - # the operation get_origins can take some time (~60s?) - cache_origins = set(db._aptcache.get_all_origins()) - db_origins = set(db.get_origins_from_db()) - # origins - LOG.debug("cache_origins: %s" % cache_origins) - LOG.debug("db_origins: %s" % db_origins) - # the db_origins will contain origins from the s-c-agent, so - # we don't need to rebuild if the db has more origins then - # the cache, but we need to rebuild if the cache has origins - # that a-x-i does not have - if not cache_origins.issubset(db_origins): - return True - return False + # the operation get_origins can take some time (~60s?) + cache_origins = set(db._aptcache.get_all_origins()) + db_origins = set(db.get_origins_from_db()) + # origins + LOG.debug("cache_origins: %s" % cache_origins) + LOG.debug("db_origins: %s" % db_origins) + # the db_origins will contain origins from the s-c-agent, so + # we don't need to rebuild if the db has more origins then + # the cache, but we need to rebuild if the cache has origins + # that a-x-i does not have + if not cache_origins.issubset(db_origins): + return True + return False def trigger_axi_update_and_wait(): def _axi_finished(res): @@ -35,11 +36,11 @@ context = GObject.main_context_default() main = GObject.MainLoop(context) system_bus = dbus.SystemBus() - axi = dbus.Interface( - system_bus.get_object("org.debian.AptXapianIndex","/"), - "org.debian.AptXapianIndex") - axi.connect_to_signal("UpdateFinished", _axi_finished) try: + axi = dbus.Interface( + system_bus.get_object("org.debian.AptXapianIndex","/"), + "org.debian.AptXapianIndex") + axi.connect_to_signal("UpdateFinished", _axi_finished) # first arg is force, second update_only axi.update_async(True, False) main.run() @@ -62,9 +63,13 @@ logging.basicConfig(level=logging.DEBUG) # do it - res = check_for_channel_updates_and_trigger_axi() - # return "1" means xapian got updated - if res: - sys.exit(1) + try: + res = check_for_channel_updates_and_trigger_axi() + # return "1" means xapian got updated + if res: + sys.exit(1) + except xapian.DatabaseOpeningError as e: + # this can happen if there is no a-x-i DB yet and we can ignore it + LOG.info("failed to open xapian db: '%s'" % e) # return "0" nothing was done sys.exit(0)