Skip to content

Commit

Permalink
fix: handle empty repository
Browse files Browse the repository at this point in the history
  • Loading branch information
tdurieux committed Apr 26, 2024
1 parent 8712746 commit a86e050
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 12 deletions.
2 changes: 2 additions & 0 deletions public/partials/explorer.htm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
3 changes: 2 additions & 1 deletion public/partials/pageView.htm
Original file line number Diff line number Diff line change
Expand Up @@ -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>
15 changes: 11 additions & 4 deletions public/script/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
});
}
});
}

Expand Down
2 changes: 1 addition & 1 deletion public/script/bundle.min.js

Large diffs are not rendered by default.

11 changes: 10 additions & 1 deletion src/core/Repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
15 changes: 10 additions & 5 deletions src/core/source/GitHubStream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[] = [];
Expand Down
1 change: 1 addition & 0 deletions src/streamer/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit a86e050

Please sign in to comment.