diff options
author | Runxi Yu <me@runxiyu.org> | 2025-05-02 10:46:11 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-05-02 10:46:11 +0800 |
commit | 9ddff5ced5151938a0c6c7933bac8d9fdad315c3 (patch) | |
tree | 1c86c050963b5cc13265a20559b50d7bee8ed466 | |
parent | Bump dependencies (diff) | |
download | forge-9ddff5ced5151938a0c6c7933bac8d9fdad315c3.tar.gz forge-9ddff5ced5151938a0c6c7933bac8d9fdad315c3.tar.zst forge-9ddff5ced5151938a0c6c7933bac8d9fdad315c3.zip |
-rw-r--r-- | forged/internal/git2c/perror.go | 48 | ||||
-rw-r--r-- | git2d/cmd1.c | 3 | ||||
-rw-r--r-- | git2d/cmd2.c | 12 |
3 files changed, 57 insertions, 6 deletions
diff --git a/forged/internal/git2c/perror.go b/forged/internal/git2c/perror.go new file mode 100644 index 0000000..96bffd5 --- /dev/null +++ b/forged/internal/git2c/perror.go @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> + +// TODO: Make the C part report detailed error messages too + +package git2c + +import "errors" + +var ( + Success error + ErrUnknown = errors.New("git2c: unknown error") + ErrPath = errors.New("git2c: get tree entry by path failed") + ErrRevparse = errors.New("git2c: revparse failed") + ErrReadme = errors.New("git2c: no readme") + ErrBlobExpected = errors.New("git2c: blob expected") + ErrEntryToObject = errors.New("git2c: tree entry to object conversion failed") + ErrBlobRawContent = errors.New("git2c: get blob raw content failed") + ErrRevwalk = errors.New("git2c: revwalk failed") + ErrRevwalkPushHead = errors.New("git2c: revwalk push head failed") + ErrBareProto = errors.New("git2c: bare protocol error") +) + +func Perror(errno uint) error { + switch errno { + case 0: + return Success + case 3: + return ErrPath + case 4: + return ErrRevparse + case 5: + return ErrReadme + case 6: + return ErrBlobExpected + case 7: + return ErrEntryToObject + case 8: + return ErrBlobRawContent + case 9: + return ErrRevwalk + case 10: + return ErrRevwalkPushHead + case 11: + return ErrBareProto + } + return ErrUnknown +} diff --git a/git2d/cmd1.c b/git2d/cmd1.c index 5d1988d..d30fc04 100644 --- a/git2d/cmd1.c +++ b/git2d/cmd1.c @@ -9,6 +9,7 @@ int cmd_index(git_repository *repo, struct bare_writer *writer) { /* HEAD tree */ + git_object *obj = NULL; int err = git_revparse_single(&obj, repo, "HEAD^{tree}"); if (err != 0) { @@ -55,6 +56,8 @@ cmd_index(git_repository *repo, struct bare_writer *writer) /* Commits */ + /* TODO BUG: This might be a different commit from the displayed README due to races */ + git_revwalk *walker = NULL; if (git_revwalk_new(&walker, repo) != 0) { bare_put_uint(writer, 9); diff --git a/git2d/cmd2.c b/git2d/cmd2.c index 7201a82..eb8983d 100644 --- a/git2d/cmd2.c +++ b/git2d/cmd2.c @@ -12,7 +12,7 @@ cmd_treeraw(git_repository *repo, struct bare_reader *reader, struct bare_writer char path[4096] = {0}; int err = bare_get_data(reader, (uint8_t *)path, sizeof(path) - 1); if (err != BARE_ERROR_NONE) { - bare_put_uint(writer, 10); + bare_put_uint(writer, 11); return -1; } path[sizeof(path) - 1] = '\0'; @@ -21,7 +21,7 @@ cmd_treeraw(git_repository *repo, struct bare_reader *reader, struct bare_writer git_object *head_obj = NULL; err = git_revparse_single(&head_obj, repo, "HEAD^{tree}"); if (err != 0) { - bare_put_uint(writer, 11); + bare_put_uint(writer, 4); return -1; } git_tree *tree = (git_tree *)head_obj; @@ -50,7 +50,7 @@ cmd_treeraw(git_repository *repo, struct bare_reader *reader, struct bare_writer } else { err = git_tree_entry_to_object(&tree_obj, repo, entry); if (err != 0) { - bare_put_uint(writer, 3); + bare_put_uint(writer, 7); goto cleanup; } } @@ -95,13 +95,13 @@ cmd_treeraw(git_repository *repo, struct bare_reader *reader, struct bare_writer git_object *blob_obj = NULL; err = git_tree_entry_to_object(&blob_obj, repo, entry); if (err != 0) { - bare_put_uint(writer, 3); + bare_put_uint(writer, 7); goto cleanup; } git_blob *blob = (git_blob *)blob_obj; const void *content = git_blob_rawcontent(blob); if (content == NULL) { - bare_put_uint(writer, 3); + bare_put_uint(writer, 8); git_blob_free(blob); goto cleanup; } @@ -111,7 +111,7 @@ cmd_treeraw(git_repository *repo, struct bare_reader *reader, struct bare_writer git_blob_free(blob); } else { /* Unknown */ - bare_put_uint(writer, 3); + bare_put_uint(writer, -1); } cleanup: |