aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2021-07-22 20:23:02 +0200
committerHampusM <hampus@hampusmat.com>2021-07-22 20:23:02 +0200
commit7fabb02bfe5672380f3ebdfea7b3bd5c32a54149 (patch)
treeb2df9047f198503f29c1c004a85cc05d96fba9eb
parent20eaed44da11a17c8cbaba8742daff95ad329016 (diff)
Improved error handling in some misc functions
-rw-r--r--packages/server/src/git/error.ts6
-rw-r--r--packages/server/src/git/misc.ts13
-rw-r--r--packages/server/src/git/repository.ts6
3 files changed, 18 insertions, 7 deletions
diff --git a/packages/server/src/git/error.ts b/packages/server/src/git/error.ts
index 0429a6c..a07d349 100644
--- a/packages/server/src/git/error.ts
+++ b/packages/server/src/git/error.ts
@@ -42,6 +42,12 @@ export class BlobError extends BaseError {
}
}
+export class MiscError extends BaseError {
+ constructor(code: number, message: string) {
+ super(code, "A misc error has occured: " + message);
+ }
+}
+
type ErrorConstructorType<T> = new (code: number, message: string) => T;
export function createError<E extends BaseError>(ErrorConstructor: ErrorConstructorType<E>, code: number, message: string): E {
diff --git a/packages/server/src/git/misc.ts b/packages/server/src/git/misc.ts
index 637cb8c..bd18322 100644
--- a/packages/server/src/git/misc.ts
+++ b/packages/server/src/git/misc.ts
@@ -1,4 +1,5 @@
import { readFile, readdir } from "fs";
+import { createError, MiscError } from "./error";
export async function findAsync<T>(arr: T[], callback: (t: T) => Promise<boolean>): Promise<T> {
const results = await Promise.all(arr.map(callback));
@@ -6,23 +7,25 @@ export async function findAsync<T>(arr: T[], callback: (t: T) => Promise<boolean
return arr[index];
}
-export function getFile(base_dir: string, repository: string, file: string): Promise<string | null> {
- return new Promise(resolve => {
+export function getFile(base_dir: string, repository: string, file: string): Promise<string> {
+ return new Promise((resolve, reject) => {
readFile(`${base_dir}/${repository}/${file}`, (err, content) => {
if(err) {
- resolve(null);
+ reject(createError(MiscError, 500, "Failed to open repository file " + file));
return;
}
+
resolve(content.toString().replace(/\n/gu, ""));
});
});
}
export function getDirectory(directory: string): Promise<string[]> {
- return new Promise<string[]>(resolve => {
+ return new Promise<string[]>((resolve, reject) => {
readdir(directory, (err, dir_content) => {
if(err) {
- resolve([]);
+ reject(createError(MiscError, 500, "Failed to open directory " + directory));
+ return;
}
resolve(dir_content);
diff --git a/packages/server/src/git/repository.ts b/packages/server/src/git/repository.ts
index c95edaa..2b14e89 100644
--- a/packages/server/src/git/repository.ts
+++ b/packages/server/src/git/repository.ts
@@ -7,7 +7,7 @@ import { Commit } from "./commit";
import { FastifyReply } from "fastify";
import { Tag } from "./tag";
import { Tree } from "./tree";
-import { BranchError, createError, RepositoryError } from "./error";
+import { BaseError, BranchError, createError, RepositoryError } from "./error";
import { isNodeGitReferenceBranch, isNodeGitReferenceTag, Reference } from "./reference";
function getFullRepositoryName(repo_name: string) {
@@ -110,9 +110,11 @@ export class Repository {
}
}
+ const owner = await getFile(base_dir, getFullRepositoryName(repository), "owner").catch(err => err);
+
return new Repository(ng_repository, {
description: await getFile(base_dir, getFullRepositoryName(repository), "description"),
- owner: await getFile(base_dir, getFullRepositoryName(repository), "owner"),
+ owner: owner instanceof BaseError ? null : owner,
branch: branch || "master"
});
}