diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2022-02-10 02:52:01 +0100 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2022-02-10 02:52:19 +0100 |
commit | 8e74dace4b878027405c267670f559ff761f8ea6 (patch) | |
tree | 6475dd99fe888bcc9af32773b6e6ec3b60160d6f /src/blogc-git-receiver/pre-receive-parser.c | |
parent | 06998bda19b6f9dd452a48ed12b61ca9df7dba23 (diff) | |
download | blogc-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.c | 21 |
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; } |