aboutsummaryrefslogtreecommitdiff
path: root/brep/handler/submit/submit.bash.in
blob: d1d06340646b4cd6a08457e7fd088fb992ce45c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# file      : brep/handler/submit/submit.bash.in
# copyright : Copyright (c) 2014-2019 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"

  # Pass the --deep option to make sure that the *-file manifest values are
  # resolvable, so rep-create will not fail due to this package down the road.
  # Note that we also make sure that all the manifest values are known (see
  # bpkg-pkg-verify for details).
  #
  if ! run_silent bpkg pkg-verify --deep --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
}