summaryrefslogtreecommitdiff
path: root/Hutch/Views/Repositories/RepositoryDetailViewModel.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-13 17:35:37 -0500
committerChristian Cleberg <[email protected]>2026-04-13 17:35:37 -0500
commit30decf6d9b6b95277cbd8b8a7d9e23d9ce5413ca (patch)
tree8ba13d62083d7c3555bd250e5cefe416eb698d31 /Hutch/Views/Repositories/RepositoryDetailViewModel.swift
parent5e63048ab6a741ae947f7fe42efcb5206a3f3963 (diff)
downloadhutch-30decf6d9b6b95277cbd8b8a7d9e23d9ce5413ca.tar.gz
hutch-30decf6d9b6b95277cbd8b8a7d9e23d9ce5413ca.tar.bz2
hutch-30decf6d9b6b95277cbd8b8a7d9e23d9ce5413ca.zip
fix: show empty state for bare git repos instead of an error
git.sr.ht returns "internal system error" from the references query and "reference not found" from the log/readme queries when a repo has no commits. Broaden isEmptyRepositoryError to cover missingReference, unknownRevision, noRows, notFound, and those two message strings, then apply the same silent-empty treatment to loadReferences and loadArtifacts (which previously surfaced any error directly to the user). Fixes: https://todo.sr.ht/~ccleberg/hutch/60
Diffstat (limited to 'Hutch/Views/Repositories/RepositoryDetailViewModel.swift')
-rw-r--r--Hutch/Views/Repositories/RepositoryDetailViewModel.swift24
1 files changed, 19 insertions, 5 deletions
diff --git a/Hutch/Views/Repositories/RepositoryDetailViewModel.swift b/Hutch/Views/Repositories/RepositoryDetailViewModel.swift
index ebd07d2..8dec51b 100644
--- a/Hutch/Views/Repositories/RepositoryDetailViewModel.swift
+++ b/Hutch/Views/Repositories/RepositoryDetailViewModel.swift
@@ -226,7 +226,7 @@ final class RepositoryDetailViewModel {
responseType: LogResponse.self
)
} catch {
- if isMissingGitReferenceError(error) {
+ if isEmptyRepositoryError(error) {
return LogPage(results: [], cursor: nil)
}
throw error
@@ -273,7 +273,12 @@ final class RepositoryDetailViewModel {
branches = allRefs.filter { $0.name.hasPrefix("refs/heads/") }.map { $0.toDetail() }
tags = allRefs.filter { $0.name.hasPrefix("refs/tags/") }.map { $0.toDetail() }
} catch {
- self.error = error.userFacingMessage
+ if isEmptyRepositoryError(error) {
+ branches = []
+ tags = []
+ } else {
+ self.error = error.userFacingMessage
+ }
}
isLoadingRefs = false
@@ -340,7 +345,7 @@ final class RepositoryDetailViewModel {
responseType: PathResponse.self
)
} catch {
- if isMissingGitReferenceError(error) {
+ if isEmptyRepositoryError(error) {
readmeContent = nil
readmePath = nil
readmeLoaded = true
@@ -371,8 +376,13 @@ final class RepositoryDetailViewModel {
}
}
- private func isMissingGitReferenceError(_ error: Error) -> Bool {
+ private func isEmptyRepositoryError(_ error: Error) -> Bool {
error.matchesGraphQLErrorClassification(.missingReference)
+ || error.matchesGraphQLErrorClassification(.unknownRevision)
+ || error.matchesGraphQLErrorClassification(.noRows)
+ || error.matchesGraphQLErrorClassification(.notFound)
+ || error.containsGraphQLErrorMessage("missing")
+ || error.containsGraphQLErrorMessage("internal system error")
}
// MARK: - Artifacts
@@ -417,7 +427,11 @@ final class RepositoryDetailViewModel {
.filter { !$0.artifacts.results.isEmpty }
.map { ReferenceWithArtifacts(name: $0.name, artifacts: $0.artifacts.results) }
} catch {
- self.error = error.userFacingMessage
+ if isEmptyRepositoryError(error) {
+ referenceArtifacts = []
+ } else {
+ self.error = error.userFacingMessage
+ }
}
isLoadingArtifacts = false