diff options
author | Runxi Yu <me@runxiyu.org> | 2025-04-05 11:19:17 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-04-05 11:19:25 +0800 |
commit | cde5824d3ddc0cec9c3a37f146b7075c3d4ffdd7 (patch) | |
tree | abc33d625866a6ba007d9e67e02bd3633b6f7377 | |
parent | git2d: Note to pass integer instead of the string (diff) | |
download | forge-cde5824d3ddc0cec9c3a37f146b7075c3d4ffdd7.tar.gz forge-cde5824d3ddc0cec9c3a37f146b7075c3d4ffdd7.tar.zst forge-cde5824d3ddc0cec9c3a37f146b7075c3d4ffdd7.zip |
git2d: Accept an uint command
-rw-r--r-- | git2d/session.c | 31 | ||||
-rw-r--r-- | http_handle_repo_index.go | 8 |
2 files changed, 31 insertions, 8 deletions
diff --git a/git2d/session.c b/git2d/session.c index 8627428..8cfe8fc 100644 --- a/git2d/session.c +++ b/git2d/session.c @@ -37,10 +37,27 @@ session(void *_conn) goto close; } + uint64_t cmd = 0; + err = bare_get_uint(&reader, &cmd); + if (err != BARE_ERROR_NONE) { + bare_put_uint(&writer, 2); + goto free_repo; + } + switch (cmd) { + case 1: + break; + case 0: + bare_put_uint(&writer, 3); + goto free_repo; + default: + bare_put_uint(&writer, 3); + goto free_repo; + } + git_object *obj = NULL; err = git_revparse_single(&obj, repo, "HEAD^{tree}"); if (err != 0) { - bare_put_uint(&writer, 2); + bare_put_uint(&writer, 4); goto free_repo; } git_tree *tree = (git_tree *) obj; @@ -50,27 +67,27 @@ session(void *_conn) git_tree_entry *entry = NULL; err = git_tree_entry_bypath(&entry, tree, "README.md"); if (err != 0) { - bare_put_uint(&writer, 3); + bare_put_uint(&writer, 5); goto free_tree; } git_otype objtype = git_tree_entry_type(entry); if (objtype != GIT_OBJECT_BLOB) { - bare_put_uint(&writer, 4); + bare_put_uint(&writer, 6); goto free_tree_entry; } git_object *obj2 = NULL; err = git_tree_entry_to_object(&obj2, repo, entry); if (err != 0) { - bare_put_uint(&writer, 5); + bare_put_uint(&writer, 7); goto free_tree_entry; } git_blob *blob = (git_blob *) obj2; const void *content = git_blob_rawcontent(blob); if (content == NULL) { - bare_put_uint(&writer, 6); + bare_put_uint(&writer, 8); goto free_blob; } @@ -81,12 +98,12 @@ session(void *_conn) git_revwalk *walker = NULL; if (git_revwalk_new(&walker, repo) != 0) { - bare_put_uint(&writer, 7); + bare_put_uint(&writer, 9); goto free_blob; } if (git_revwalk_push_head(walker) != 0) { - bare_put_uint(&writer, 8); + bare_put_uint(&writer, 9); goto free_blob; } diff --git a/http_handle_repo_index.go b/http_handle_repo_index.go index 164fd65..36e71d7 100644 --- a/http_handle_repo_index.go +++ b/http_handle_repo_index.go @@ -43,12 +43,18 @@ func httpHandleRepoIndex(w http.ResponseWriter, req *http.Request, params map[st defer conn.Close() writer := bare.NewWriter(conn) + reader := bare.NewReader(conn) + if err := writer.WriteData([]byte(repoPath)); err != nil { errorPage500(w, params, "sending repo path failed: "+err.Error()) return } - reader := bare.NewReader(conn) + if err := writer.WriteUint(1); err != nil { + errorPage500(w, params, "sending command failed: "+err.Error()) + return + } + status, err := reader.ReadUint() if err != nil { errorPage500(w, params, "reading status failed: "+err.Error()) |