def select_git_directory(): settings = QSettings("majerti", "gitbuster") settings.beginGroup("Last run") filepath = '/' last_directory = settings.value("directory", QVariant(QDir.homePath())) dirs_list = settings.value("recent directories", QStringList()).toStringList() custom_entries = settings.value("custom entries", QStringList()).toStringList() recent_dirs_urls = [QUrl.fromLocalFile(dir) for dir in dirs_list] home_url = QUrl.fromLocalFile(QDir.homePath()) custom_entries_urls = [QUrl.fromLocalFile(dir) for dir in custom_entries] while not is_top_git_directory(unicode(filepath)): file_dialog = QFileDialog(None, "Open git repository", last_directory.toString()) file_dialog.setFileMode(QFileDialog.Directory) file_dialog.setOptions(QFileDialog.ShowDirsOnly) if recent_dirs_urls: file_dialog.setSidebarUrls( [home_url,] + custom_entries_urls + recent_dirs_urls[-6:] ) ret = file_dialog.exec_() custom_entries = QStringList() custom_entries_urls = [] for url in file_dialog.sidebarUrls(): if url not in recent_dirs_urls and url != home_url: custom_entries.append(QString(url.path())) custom_entries_urls.append(url) settings.setValue("custom entries", custom_entries) if ret: filepath = file_dialog.selectedFiles()[0] else: return ret if not filepath: return filepath if not dirs_list.contains(filepath): dirs_list.append(filepath) settings.setValue("recent directories", dirs_list) settings.setValue("directory", filepath) settings.endGroup() settings.sync() return unicode(filepath)