diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index c9da36cc749..0048043bcc0 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -1219,15 +1220,19 @@ void GitClient::archive(const QString &workingDirectory, QString commit) repoDirectory = workingDirectory; QString repoName = QFileInfo(repoDirectory).fileName(); - QHash filters { - { tr("Tarball (*.tar.gz)"), ".tar.gz" }, - { tr("Zip archive (*.zip)"), ".zip" } - }; + QHash filters; QString selectedFilter; - if (HostOsInfo::isWindowsHost()) - selectedFilter = filters.key(".zip"); - else - selectedFilter = filters.key(".tar.gz"); + auto appendFilter = [&filters, &selectedFilter](const QString &name, bool isSelected){ + const auto mimeType = Utils::mimeTypeForName(name); + const auto filterString = mimeType.filterString(); + filters.insert(filterString, "." + mimeType.preferredSuffix()); + if (isSelected) + selectedFilter = filterString; + }; + + bool windows = HostOsInfo::isWindowsHost(); + appendFilter("application/zip", windows); + appendFilter("application/x-compressed-tar", !windows); QString output; if (synchronousRevParseCmd(repoDirectory, commit, &output))