aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc-git-receiver/pre-receive.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.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.c')
-rw-r--r--src/blogc-git-receiver/pre-receive.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/blogc-git-receiver/pre-receive.c b/src/blogc-git-receiver/pre-receive.c
index 9804824..12d29cf 100644
--- a/src/blogc-git-receiver/pre-receive.c
+++ b/src/blogc-git-receiver/pre-receive.c
@@ -93,7 +93,7 @@ int
bgr_pre_receive_hook(int argc, char *argv[])
{
int rv = 0;
- char *master = NULL;
+ char *ref = NULL;
char *output_dir = NULL;
char *tmpdir = NULL;
char *sym = NULL;
@@ -166,18 +166,27 @@ default_sym:
rv = 1;
goto cleanup;
}
- master = bc_strdup(pieces[0]);
+ ref = bc_strdup(pieces[0]);
bc_strv_free(pieces);
}
else {
size_t input_len;
char *input = bc_stdin_read(&input_len);
- master = bgr_pre_receive_parse(input, input_len);
+ bc_trie_t *branches = bgr_pre_receive_parse(input, input_len);
+
+ // try 'master' by default to avoid breaking existing setups
+ ref = bc_strdup(bc_trie_lookup(branches, "master"));
+ if (ref == NULL) {
+ // try 'main'
+ ref = bc_strdup(bc_trie_lookup(branches, "main"));
+ }
+
+ bc_trie_free(branches);
free(input);
}
- if (master == NULL) {
- fprintf(stderr, "warning: no reference to master branch found. "
+ if (ref == NULL) {
+ fprintf(stderr, "warning: no suitable branch found. "
"nothing to deploy.\n");
goto cleanup;
}
@@ -190,7 +199,7 @@ default_sym:
tmpdir = dir;
char *git_archive_cmd = bc_strdup_printf(
- "git archive \"%s\" | tar -x -C \"%s\" -f -", master, tmpdir);
+ "git archive \"%s\" | tar -x -C \"%s\" -f -", ref, tmpdir);
if (0 != system(git_archive_cmd)) {
fprintf(stderr, "error: failed to extract git content to temporary "
"directory: %s\n", tmpdir);
@@ -215,7 +224,7 @@ default_sym:
}
unsigned long epoch = time(NULL);
- output_dir = bc_strdup_printf("%s/%s-%lu", buildsd, master, epoch);
+ output_dir = bc_strdup_printf("%s/%s-%lu", buildsd, ref, epoch);
free(buildsd);
if (0 == access(output_dir, F_OK)) {
@@ -301,7 +310,7 @@ cleanup2:
cleanup:
free(sym);
- free(master);
+ free(ref);
free(output_dir);
rmdir_recursive(tmpdir);
free(repo_dir);