diff options
Diffstat (limited to 'brep/handler/submit/submit.bash.in')
-rw-r--r-- | brep/handler/submit/submit.bash.in | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/brep/handler/submit/submit.bash.in b/brep/handler/submit/submit.bash.in new file mode 100644 index 0000000..38a4e06 --- /dev/null +++ b/brep/handler/submit/submit.bash.in @@ -0,0 +1,60 @@ +# file : brep/handler/submit/submit.bash.in +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Utility functions useful for implementing package submission handlers. + +if [ "$brep_handler_submit" ]; then + return 0 +else + brep_handler_submit=true +fi + +@import brep/handler/handler@ + +# Serialize the package submission result manifest to stdout and exit the +# (sub-)shell with the zero status. +# +reference= # Should be assigned later by the handler, when becomes available. + +function exit_with_manifest () # <status> <message> +{ + trace_func "$@" + + local sts="$1" + local msg="$2" + + manifest_serializer_start + + manifest_serialize "" "1" # Start of manifest. + manifest_serialize "status" "$sts" + manifest_serialize "message" "$msg" + + if [ -n "$reference" ]; then + manifest_serialize "reference" "$reference" + elif [ "$sts" == "200" ]; then + error "no reference for code $sts" + fi + + manifest_serializer_finish + run exit 0 +} + +# Verify archive is a valid package and extract its manifest into +# <manifest> file. +# +function extract_package_manifest () # <archive> <manifest> +{ + local arc="$1" + local man="$2" + + if ! run_silent bpkg pkg-verify --manifest "$arc" >"$man"; then + # Perform the sanity check to make sure that bpkg is runnable. + # + if ! run bpkg --version >/dev/null; then + error "unable to run bpkg" + fi + + exit_with_manifest 400 "archive is not a valid package (run bpkg pkg-verify for details)" + fi +} |