aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc-git-receiver/pre-receive-parser.c
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2022-02-10 02:52:01 +0100
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2022-02-10 02:52:19 +0100
commit8e74dace4b878027405c267670f559ff761f8ea6 (patch)
tree6475dd99fe888bcc9af32773b6e6ec3b60160d6f /src/blogc-git-receiver/pre-receive-parser.c
parent06998bda19b6f9dd452a48ed12b61ca9df7dba23 (diff)
downloadblogc-8e74dace4b878027405c267670f559ff761f8ea6.tar.gz
blogc-8e74dace4b878027405c267670f559ff761f8ea6.tar.bz2
blogc-8e74dace4b878027405c267670f559ff761f8ea6.zip
git-receiver: allow deploying from "main" branch
if a "main" branch is available and no "master" branch is available, use it. "master" still takes precedence to avoid breaking old setups.
Diffstat (limited to 'src/blogc-git-receiver/pre-receive-parser.c')
-rw-r--r--src/blogc-git-receiver/pre-receive-parser.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/blogc-git-receiver/pre-receive-parser.c b/src/blogc-git-receiver/pre-receive-parser.c
index 8b9b968..52b0b76 100644
--- a/src/blogc-git-receiver/pre-receive-parser.c
+++ b/src/blogc-git-receiver/pre-receive-parser.c
@@ -22,13 +22,15 @@ typedef enum {
} input_state_t;
-char*
+bc_trie_t*
bgr_pre_receive_parse(const char *input, size_t input_len)
{
input_state_t state = START_OLD;
size_t start = 0;
size_t start_new = 0;
+ bc_trie_t* rv = bc_trie_new(free);
+
for (size_t current = 0; current < input_len; current++) {
char c = input[current];
@@ -62,16 +64,19 @@ bgr_pre_receive_parse(const char *input, size_t input_len)
if (c != '\n')
break;
state = START_OLD;
- // we just care about a ref (refs/heads/master), everything
- // else is disposable :)
- if ((current - start == 17) &&
- (0 == strncmp("refs/heads/master", input + start, 17)))
- {
- return bc_strndup(input + start_new, start - 1 - start_new);
+ if (current - start > 11) {
+ char *key = bc_strndup(input + start + 11, current - start - 11);
+ bc_trie_insert(rv, key, bc_strndup(input + start_new, start - 1 - start_new));
+ free(key);
}
break;
}
}
- return NULL;
+ if (bc_trie_size(rv) == 0) {
+ bc_trie_free(rv);
+ return NULL;
+ }
+
+ return rv;
}