fix: handle empty repository

This commit is contained in:
tdurieux
2024-04-26 13:48:32 +01:00
parent 8712746e93
commit a86e050f8b
7 changed files with 37 additions and 12 deletions

View File

@@ -28,12 +28,14 @@
>Edit</a
>
<a
ng-show="content != null"
ng-href="{{url}}"
target="__self"
class="btn btn-outline-primary btn-sm"
>View raw</a
>
<a
ng-show="content != null"
ng-href="{{url}}&download=true"
target="__self"
class="btn btn-outline-primary btn-sm"

View File

@@ -9,4 +9,5 @@
<div ng-if="type == 'IPython'"><notebook file="url"></notebook></div>
<div ng-if="type == 'error'" class="file-error container d-flex h-100"><h1 class="display-1 m-auto" translate="ERRORS.{{content}}">Error</h1></div></div>
<div ng-if="type == 'loading' && !error" class="file-error container d-flex h-100"><h1 class="display-1 m-auto">Loading...</h1></div></div>
<div ng-if="content == null" class="file-error container d-flex h-100"><h1 class="display-1 m-auto">Empty file!</h1></div>
<div ng-if="type == 'empty'" class="file-error container d-flex h-100"><h1 class="display-1 m-auto">Empty repository!</h1></div>
<div ng-if="content == null && type != 'empty'" class="file-error container d-flex h-100"><h1 class="display-1 m-auto">Empty file!</h1></div>

View File

@@ -1839,10 +1839,17 @@ angular
const path = i > 0 ? $scope.paths.slice(0, i).join("/") : "";
await $scope.getFiles(path);
}
$scope.$apply(() => {
selectFile();
updateContent();
});
if ($scope.files.length == 1 && $scope.files[0].name == "") {
$scope.files = [];
$scope.type = "empty";
$scope.$apply();
} else {
$scope.$apply(() => {
selectFile();
updateContent();
});
}
});
}

File diff suppressed because one or more lines are too long

View File

@@ -402,10 +402,19 @@ export default class Repository {
}
this.model.increment();
await this.updateStatus(RepositoryStatus.DOWNLOAD);
await this.files({
const files = await this.files({
force: false,
progress,
});
if (files.length === 0) {
// create a dummy file when the repo is empty to avoid errors
await new FileModel({
repoId: this.repoId,
path: "",
name: "",
size: 0,
}).save();
}
await this.updateStatus(RepositoryStatus.READY);
await this.computeSize();
span.end();

View File

@@ -194,11 +194,16 @@ export default class GitHubStream extends GitHubBase {
});
output.push(...this.tree2Tree(data.tree, parentPath));
} catch (error) {
throw new AnonymousError("files_not_found", {
httpStatus: 404,
object: this.data,
cause: error as Error,
});
if ((error as any).status == 404) {
// empty repo
data = { tree: [] };
} else {
throw new AnonymousError("repo_not_found", {
httpStatus: (error as any).status || 404,
object: this.data,
cause: error as Error,
});
}
}
const promises: Promise<any>[] = [];
const parentPaths: string[] = [];

View File

@@ -25,6 +25,7 @@ router.post("/", async (req: express.Request, res: express.Response) => {
commit: commit,
getToken: () => token,
});
console.log(`[FILE] ${repoId}/${filePath}`);
const content = await source.getFileContentCache(
filePath,
repoId,