From cde5824d3ddc0cec9c3a37f146b7075c3d4ffdd7 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 05 Apr 2025 11:19:17 +0800 Subject: [PATCH] git2d: Accept an uint command --- git2d/session.c | 31 ++++++++++++++++++++++++------- http_handle_repo_index.go | 8 +++++++- diff --git a/git2d/session.c b/git2d/session.c index 86274287085b83dc7a0454290e86f1ce2cd1578c..8cfe8fc0fa6553c4bb5c8c8b374ac4be464c87df 100644 --- a/git2d/session.c +++ b/git2d/session.c @@ -37,10 +37,27 @@ bare_put_uint(&writer, 1); 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 @@ 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 @@ /* Commits */ 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 164fd65ff6d5fe9fb308868c37cd8de86a135032..36e71d7845c84c113c0194ee62d703fb40d39f8b 100644 --- a/http_handle_repo_index.go +++ b/http_handle_repo_index.go @@ -43,12 +43,18 @@ } 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()) -- 2.48.1