diff options
| -rw-r--r-- | src/blogc-git-receiver/pre-receive.c | 69 | ||||
| -rwxr-xr-x | tests/blogc-git-receiver/check_pre_receive.sh.in | 32 | 
2 files changed, 71 insertions, 30 deletions
diff --git a/src/blogc-git-receiver/pre-receive.c b/src/blogc-git-receiver/pre-receive.c index c780055..15db99a 100644 --- a/src/blogc-git-receiver/pre-receive.c +++ b/src/blogc-git-receiver/pre-receive.c @@ -40,8 +40,6 @@ rmdir_recursive(const char *dir)          return;      struct stat buf;      if (0 != stat(dir, &buf)) { -        fprintf(stderr, "warning: failed to remove directory (%s): %s\n", dir, -            strerror(errno));          return;      }      if (!S_ISDIR(buf.st_mode)) { @@ -178,11 +176,6 @@ bgr_pre_receive_hook(int argc, char *argv[])          goto cleanup;      } -    if ((0 != access("Makefile", F_OK)) && (0 != access("GNUMakefile", F_OK))) { -        fprintf(stderr, "warning: no makefile found. skipping ...\n"); -        goto cleanup; -    } -      char *home = getenv("HOME");      if (home == NULL) {          fprintf(stderr, "error: failed to find user home path\n"); @@ -190,21 +183,6 @@ bgr_pre_receive_hook(int argc, char *argv[])          goto cleanup;      } -    const char *make_impl = NULL; - -    if (127 != WEXITSTATUS(system("gmake -f /dev/null 2> /dev/null > /dev/null"))) { -        make_impl = "gmake"; -    } -    else if (127 != WEXITSTATUS(system("make -f /dev/null 2> /dev/null > /dev/null"))) { -        make_impl = "make"; -    } - -    if (make_impl == NULL) { -        fprintf(stderr, "error: no 'make' implementation found\n"); -        rv = 3; -        goto cleanup; -    } -      unsigned long epoch = time(NULL);      output_dir = bc_strdup_printf("%s/builds/%s-%lu", home, master, epoch); @@ -214,19 +192,52 @@ bgr_pre_receive_hook(int argc, char *argv[])          free(tmp);      } -    char *gmake_cmd = bc_strdup_printf( -        "%s -j%d OUTPUT_DIR=\"%s\" BLOGC_GIT_RECEIVER=1", make_impl, -        cpu_count(), output_dir); -    fprintf(stdout, "running command: %s\n\n", gmake_cmd); +    // detect if we will run blogc-make, make or nothing, and generate the +    // command. +    char *build_cmd = NULL; +    if (0 == access("blogcfile", F_OK)) { +        if (127 == WEXITSTATUS(system("blogc-make -v 2> /dev/null > /dev/null"))) { +            fprintf(stderr, "error: failed to find blogc-make binary\n"); +            rv = 3; +            goto cleanup; +        } +        build_cmd = bc_strdup_printf("OUTPUT_DIR=\"%s\" blogc-make -V all", +            output_dir); +    } +    else if ((0 == access("Makefile", F_OK)) || (0 == access("GNUMakefile", F_OK))) { +        const char *make_impl = NULL; + +        if (127 != WEXITSTATUS(system("gmake -f /dev/null 2> /dev/null > /dev/null"))) { +            make_impl = "gmake"; +        } +        else if (127 != WEXITSTATUS(system("make -f /dev/null 2> /dev/null > /dev/null"))) { +            make_impl = "make"; +        } + +        if (make_impl == NULL) { +            fprintf(stderr, "error: no 'make' implementation found\n"); +            rv = 3; +            goto cleanup; +        } +        build_cmd = bc_strdup_printf( +            "%s -j%d OUTPUT_DIR=\"%s\" BLOGC_GIT_RECEIVER=1", make_impl, +            cpu_count(), output_dir); +    } +    else { +        fprintf(stderr, "warning: no blogcfile or Makefile found. skipping ...\n"); +        goto cleanup; +    } + +    fprintf(stdout, "running command: %s\n\n", build_cmd);      fflush(stdout); -    if (0 != system(gmake_cmd)) { +    if (0 != system(build_cmd)) {          fprintf(stderr, "error: failed to build website ...\n");          rmdir_recursive(output_dir); -        free(gmake_cmd); +        free(build_cmd);          rv = 3;          goto cleanup;      } -    free(gmake_cmd); +    free(build_cmd);      if (0 != chdir(repo_dir)) {          fprintf(stderr, "error: failed to chdir (%s): %s\n", repo_dir, diff --git a/tests/blogc-git-receiver/check_pre_receive.sh.in b/tests/blogc-git-receiver/check_pre_receive.sh.in index ba3d78c..eff8691 100755 --- a/tests/blogc-git-receiver/check_pre_receive.sh.in +++ b/tests/blogc-git-receiver/check_pre_receive.sh.in @@ -59,7 +59,7 @@ cat > "${TEMP}/payload.txt" <<EOF  EOF  SHELL="${SELF}" HOME="${TEMP}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt" -grep "warning: no makefile found. skipping ..." "${TEMP}/output.txt" &> /dev/null +grep "warning: no blogcfile or Makefile found. skipping ..." "${TEMP}/output.txt" &> /dev/null  cd "${TEMP}"  git init --bare "${TEMP}/repos/foo2.git" &> /dev/null @@ -171,4 +171,34 @@ HOME="${TEMP}" ${TESTS_ENVIRONMENT} ./repos/foo3.git/hooks/pre-receive 2>&1 | te  [[ "${DEST}" != "$(readlink repos/foo3.git/htdocs)" ]]  [[ ! -e "${DEST}" ]] +cd "${TEMP}" +git init --bare "${TEMP}/repos/foo4.git" &> /dev/null +ln -s "${SELF}" "${TEMP}/repos/foo4.git/hooks/pre-receive" + +cat > "${TEMP}/tmp.txt" <<EOF +blob +mark :1 +data 0 + +reset refs/heads/master +commit refs/heads/master +mark :2 +author Rafael G. Martins <rafael@rafaelmartins.eng.br> 1483558736 +0100 +committer Rafael G. Martins <rafael@rafaelmartins.eng.br> 1483558736 +0100 +data 12 +testing3... +M 100644 :1 blogcfile + +EOF + +cd "${TEMP}/repos/foo4.git" +git fast-import < "${TEMP}/tmp.txt" &> /dev/null + +cat > "${TEMP}/payload.txt" <<EOF +0000000000000000000000000000000000000000 $(git rev-parse HEAD) refs/heads/master +EOF + +SHELL="${SELF}" HOME="${TEMP}" PATH="@abs_top_builddir@:${PATH}" GIT_DIR=. ${TESTS_ENVIRONMENT} ./hooks/pre-receive < "${TEMP}/payload.txt" 2>&1 | tee "${TEMP}/output.txt" || true +grep "blogc-make: error: settings: " "${TEMP}/output.txt" &> /dev/null +  rm "${TEMP}/output.txt"  | 
