From: Jiri Konecny jkonecny@redhat.com
Choose to use identifiers for the repositories because I have found nothing which wasn't changing in time. This seems to fix most of the problems with the Source spoke. --- pyanaconda/ui/gui/spokes/source.py | 63 ++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 26 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/source.py b/pyanaconda/ui/gui/spokes/source.py index a041f42..479c41a 100644 --- a/pyanaconda/ui/gui/spokes/source.py +++ b/pyanaconda/ui/gui/spokes/source.py @@ -391,6 +391,7 @@ def __init__(self, *args, **kwargs): self._proxyUrl = "" self._proxyChange = False self._cdrom = None + self._repo_counter = 0
self._repoChecks = {}
@@ -945,7 +946,7 @@ def _checkURL(self, inputcheck, combo): is_additional_repo = combo is None if is_additional_repo: # Input object contains repository name - repo = self._get_repo_by_name(inputcheck.input_obj) + repo = self._get_repo_by_id(inputcheck.input_obj) protocol = urlsplit(repo.baseurl)[0] url_string = repo.baseurl.strip()[len(protocol) + 3:] else: @@ -1022,7 +1023,7 @@ def _checkDuplicateRepos(self, inputcheck):
def _checkRepoName(self, inputcheck): # Input object is name of the repository - repo_name = inputcheck.input_obj + repo_name = self._get_repo_by_id(inputcheck.input_obj).name
if not repo_name: return _("Empty repository name") @@ -1040,7 +1041,7 @@ def _checkRepoName(self, inputcheck):
def _checkRepoProxy(self, inputcheck): # Input object contains repo name - repo = self._get_repo_by_name(inputcheck.input_obj) + repo = self._get_repo_by_id(inputcheck.input_obj) # If nfs is selected as the protocol, skip the proxy check if repo.baseurl.startswith(PROTOCOL_NFS): return InputCheck.CHECK_OK @@ -1216,6 +1217,8 @@ def _reset_repoStore(self): If the list has no element, clear the repo entry fields. """
+ log.debug("Clearing checks in source spoke") + # Remove the repo checks for checks in self._repoChecks.values(): self.remove_check(checks.name_check) @@ -1235,6 +1238,9 @@ def _reset_repoStore(self): enabled=repo.enabled) # Track the original name, user may change .name ks_repo.orig_name = name + # Add addon repository id for identification + ks_repo.addon_repo_id = self._repo_counter + self._repo_counter += 1 self._repoStore.append([self.payload.isRepoEnabled(name), ks_repo.name, ks_repo]) @@ -1273,11 +1279,12 @@ def _unique_repo_name(self, name): highest_index = max(matches) if matches else 0 return name + ("_%d" % (highest_index + 1))
- def _get_repo_by_name(self, name): - """ Return a repository by given name""" + def _get_repo_by_id(self, id): + """ Return a repository by given name + """ for repo in self._repoStore: - if repo.name == name: - return repo + if repo[REPO_OBJ].addon_repo_id == id: + return repo[REPO_OBJ] return None
def on_repoSelection_changed(self, *args): @@ -1401,6 +1408,9 @@ def on_addRepo_clicked(self, button): repo = self.data.RepoData(name=name) repo.ks_repo = True repo.orig_name = "" + # Set addon repo id and increment counter + repo.addon_repo_id = self._repo_counter + self._repo_counter += 1
itr = self._repoStore.append([True, repo.name, repo]) self._repoSelection.select_iter(itr) @@ -1415,10 +1425,10 @@ def on_removeRepo_clicked(self, button):
# Remove the input validation checks for this repo repo = self._repoStore[itr][REPO_OBJ] - self.remove_check(self._repoChecks[repo.name].name_check) - self.remove_check(self._repoChecks[repo.name].url_check) - self.remove_check(self._repoChecks[repo.name].proxy_check) - del self._repoChecks[repo.name] + self.remove_check(self._repoChecks[repo.addon_repo_id].name_check) + self.remove_check(self._repoChecks[repo.addon_repo_id].url_check) + self.remove_check(self._repoChecks[repo.addon_repo_id].proxy_check) + del self._repoChecks[repo.addon_repo_id]
self._repoStore.remove(itr) if len(self._repoStore) == 0: @@ -1439,17 +1449,12 @@ def on_repoNameEntry_changed(self, entry): repo = self._repoStore[itr][REPO_OBJ] name = self._repoNameEntry.get_text().strip()
- old_name = repo.name - if name == old_name: - # nothing changed - return - repo.name = name self._repoStore.set_value(itr, REPO_NAME_COL, name) - - self._repoChecks[name] = self._repoChecks[old_name] - del self._repoChecks[old_name] - self._repoChecks[name].name_check.update_check_status() + # do not update check status if check are not yet set up + # (populationg/refreshing the spoke) + if repo.addon_repo_id in self._repoChecks: + self._repoChecks[repo.addon_repo_id].name_check.update_check_status()
def on_repoUrl_changed(self, editable, data=None): """ proxy url or protocol changed @@ -1466,7 +1471,10 @@ def on_repoUrl_changed(self, editable, data=None): else: repo.baseurl = proto + url
- self._repoChecks[repo.name].url_check.update_check_status() + # do not update check status if check are not yet set up + # (populationg/refreshing the spoke) + if repo.addon_repo_id in self._repoChecks: + self._repoChecks[repo.addon_repo_id].url_check.update_check_status()
# Check for and remove a URL prefix that matches the protocol dropdown self._removeUrlPrefix(editable, self._repoProtocolComboBox, self.on_repoUrl_changed) @@ -1503,7 +1511,7 @@ def on_repoProxy_changed(self, *args): # do not update check status if checks are not yet set up # (populating/refreshing the spoke) if repo.name in self._repoChecks: - self._repoChecks[repo.name].proxy_check.update_check_status() + self._repoChecks[repo.addon_repo_id].proxy_check.update_check_status()
try: proxy = ProxyString(url=url, username=username, password=password) @@ -1533,13 +1541,16 @@ def on_repoStore_row_inserted(self, model, path, itr, user_data=None): # to this method is different from the iter used everywhere else, and is useless # once this method returns. Instead, create a TreeRowReference and work backwards # from that using paths any time we need to reference the store. - self._repoChecks[repo.name] = RepoChecks(InputCheckHandler.add_check(self, self._repoNameEntry, + self._repoChecks[repo.addon_repo_id] = RepoChecks(InputCheckHandler.add_check(self, + repo.addon_repo_id, self._checkRepoName, Gtk.TreeRowReference.new(model, path)), - InputCheckHandler.add_check(self, self._repoUrlEntry, + InputCheckHandler.add_check(self, + repo.addon_repo_id, self._checkRepoURL, Gtk.TreeRowReference.new(model, path)), - InputCheckHandler.add_check(self, self._repoProxyUrlEntry, + InputCheckHandler.add_check(self, + repo.addon_repo_id, self._checkRepoProxy, Gtk.TreeRowReference.new(model, path)))
@@ -1555,4 +1566,4 @@ def on_repoProtocolComboBox_changed(self, combobox, user_data=None): itr = self._repoSelection.get_selected()[1] if itr: repo = self._repoStore[itr][REPO_OBJ] - self._repoChecks[repo.name].proxy_check.update_check_status() + self._repoChecks[repo.addon_repo_id].proxy_check.update_check_status()