Skip to content

Commit 8390490

Browse files
committed
Fix repository dropdown corruption bugs (#1912, #1915)
- Remove line in init_repo_stats() that deleted "No repository selected" from dropdown, which caused index shifting and corruption - Fix repo_unlink_action() to disconnect signals before manipulating the dropdown to prevent cascading updates - Fix flaky test_repo_unlink by using direct function call and waitSignal()
1 parent 1ad5986 commit 8390490

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

src/vorta/views/repo_tab.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,6 @@ def init_repo_stats(self):
146146
# set labels
147147
repo: RepoModel = self.profile().repo
148148
if repo is not None:
149-
# remove *unset* item
150-
self.repoSelector.removeItem(self.repoSelector.findData(None))
151-
152149
# Start with every element enabled, then disable SSH-related if relevant
153150
for child in self.frameRepoSettings.children():
154151
child.setEnabled(True)
@@ -309,11 +306,6 @@ def process_new_repo(self, result):
309306

310307
def repo_unlink_action(self):
311308
profile = self.profile()
312-
self.init_repo_stats()
313-
314-
msg = QMessageBox()
315-
msg.setStandardButtons(QMessageBox.StandardButton.Ok)
316-
msg.setParent(self, QtCore.Qt.WindowType.Sheet)
317309

318310
selected_repo_id = self.repoSelector.currentData()
319311
selected_repo_index = self.repoSelector.currentIndex()
@@ -322,15 +314,26 @@ def repo_unlink_action(self):
322314
# QComboBox is empty / repo unset
323315
return
324316

317+
# Disconnect signal before manipulating dropdown to prevent cascading updates
318+
try:
319+
self.repoSelector.currentIndexChanged.disconnect(self.repo_select_action)
320+
except TypeError:
321+
pass
322+
323+
# Update database
325324
repo = RepoModel.get(id=selected_repo_id)
326325
ArchiveModel.delete().where(ArchiveModel.repo_id == repo.id).execute()
327326
profile.repo = None
328327
profile.save()
329-
330328
repo.delete_instance(recursive=True) # This also deletes archives.
331-
self.repoSelector.setCurrentIndex(0)
329+
330+
# Update dropdown
332331
self.repoSelector.removeItem(selected_repo_index)
332+
self.repoSelector.setCurrentIndex(0)
333333

334+
msg = QMessageBox()
335+
msg.setStandardButtons(QMessageBox.StandardButton.Ok)
336+
msg.setParent(self, QtCore.Qt.WindowType.Sheet)
334337
msg.setWindowTitle(self.tr('Repository was Unlinked'))
335338
msg.setText(self.tr('You can always connect it again later.'))
336339
msg.show()

tests/unit/test_repo.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,10 @@ def test_repo_unlink(qapp, qtbot, monkeypatch):
7171
qtbot.waitUntil(lambda: tab.repoSelector.count() == 1, **pytest._wait_defaults)
7272
assert RepoModel.select().count() == 0
7373

74-
qtbot.mouseClick(main.createStartBtn, QtCore.Qt.MouseButton.LeftButton)
75-
# -1 is the repo id in this test
76-
qtbot.waitUntil(lambda: 'Select a backup repository first.' in main.progressText.text(), **pytest._wait_defaults)
74+
# Directly call create_backup_action and wait for signal
75+
with qtbot.waitSignal(qapp.backup_progress_event, timeout=5000):
76+
qapp.create_backup_action()
77+
7778
assert 'Select a backup repository first.' in main.progressText.text()
7879

7980

0 commit comments

Comments
 (0)