aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-05-02 10:46:11 +0800
committerRunxi Yu <me@runxiyu.org>2025-05-02 10:46:11 +0800
commit9ddff5ced5151938a0c6c7933bac8d9fdad315c3 (patch)
tree1c86c050963b5cc13265a20559b50d7bee8ed466
parentBump dependencies (diff)
downloadforge-9ddff5ced5151938a0c6c7933bac8d9fdad315c3.tar.gz
forge-9ddff5ced5151938a0c6c7933bac8d9fdad315c3.tar.zst
forge-9ddff5ced5151938a0c6c7933bac8d9fdad315c3.zip
git2c: Some perrorHEADmaster
-rw-r--r--forged/internal/git2c/perror.go48
-rw-r--r--git2d/cmd1.c3
-rw-r--r--git2d/cmd2.c12
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: