]> git.proxmox.com Git - debcargo-conf.git/blob - vars.sh.frag
Merge branch 'pending-prost-types'
[debcargo-conf.git] / vars.sh.frag
1 # -*- mode: sh -*-
2 # Common shell utilities.
3 #
4 # Envvars:
5 # DEBCARGO
6 # Path to debcargo. Set this to use your custom version, e.g. from git.
7 set -e
8
9 abort() { local x=$1; shift; for i in "$@"; do echo >&2 "$0: abort: $i"; done; exit "$x"; }
10
11 mkdir -p "$(dirname "$0")/.git/hooks"
12 HOOK_COMMIT="$(dirname "$0")/.git/hooks/pre-commit"
13 if [ ! -x "$HOOK_COMMIT" ]; then
14 cat <<'eof' >"$HOOK_COMMIT"
15 #!/bin/sh
16 if git rev-parse -q --verify MERGE_HEAD; then exit; fi
17 case $(git rev-parse --abbrev-ref HEAD) in
18 pending-*) true;;
19 *) if git diff --cached --name-only | \
20 grep '^src/.*/debian/changelog$' | \
21 while read x; do if ! [ -f "$x" ]; then continue; fi; echo "$x: $(head -n1 $x)"; done | \
22 grep -v UNRELEASED-FIXME-AUTOGENERATED-DEBCARGO; then
23 echo >&2 "please don't finalise changelogs directly on the master branch, use ./release.sh instead"; exit 1;
24 fi;;
25 esac
26 eof
27 chmod +x "$HOOK_COMMIT"
28 fi
29
30 if [ -n "$DEBCARGO" ]; then
31 true
32 elif type -p debcargo >/dev/null 2>&1; then
33 DEBCARGO=$(type -p debcargo)
34 elif [ -f "$HOME/.cargo/bin/debcargo" ]; then
35 DEBCARGO="$HOME/.cargo/bin/debcargo"
36 else
37 abort 1 "debcargo not found, run \`cargo install debcargo\` or set DEBCARGO to point to it"
38 fi
39
40 test -x "$DEBCARGO" || abort 1 "debcargo found but not executable: $DEBCARGO"
41 dcver=$($DEBCARGO --version | sed -ne 's/debcargo //p')
42 case $dcver in
43 2.0.*|2.1.*|2.2.*|2.3.*) abort 1 "unsupported debcargo version $dcver. try reinstalling with \`cargo install debcargo --force\`";;
44 2.4.*) true;;
45 2.5.*) true;;
46 2.6.*) true;;
47 *) abort 1 "unsupported debcargo version: $dcver";;
48 esac
49
50 if [ $# -ne 1 -a $# -ne 2 ]; then
51 echo >&2 "Usage: $0 <rust-crate-name>"
52 echo >&2 " $0 <rust-crate-name> <old-version>"
53 echo >&2 "See README.rst for more details on usage."
54 exit 2
55 fi
56
57 CRATE="$1"
58 VER="$2"
59
60 if [ -n "$CRATE" -a -z "$VER" ] && grep -q crate_src_path "src/$CRATE/debian/debcargo.toml" 2>/dev/null; then
61 # special hack for crate_src_path, could be cleaner...
62 PKGNAME="$CRATE"
63 PKGBASE="$CRATE"
64 else
65 PKGNAME=${PKGNAME:-$($DEBCARGO deb-src-name "$CRATE" $VER || abort 1 "couldn't find crate $CRATE")}
66 PKGBASE=${PKGBASE:-$($DEBCARGO deb-src-name "$CRATE" || abort 1 "couldn't find crate $CRATE")}
67 fi
68
69 PKGDIR_REL="src/$PKGNAME"
70 PKGDIR="$PWD/$PKGDIR_REL"
71 BUILDDIR="$PWD/build/$PKGNAME"
72 PKGCFG="$PKGDIR/debian/debcargo.toml"
73
74 mkdir -p "$(dirname $BUILDDIR)"
75 ln -srf "$PWD/build.sh" "$PWD/build/build.sh"
76 chmod +x "$PWD/build/build.sh"
77
78 if [ -z "$CRATE" ]; then
79 abort 2 "Usage: $0 <crate> [<version>]"
80 fi
81
82 run_debcargo() {
83 rm -rf "$BUILDDIR" "$(dirname "$BUILDDIR")/rust-${PKGNAME}_${REALVER:-$VER}"*.orig.tar.*
84 set +e
85 $DEBCARGO package --config "$PKGCFG" --directory "$BUILDDIR" "$@" "$CRATE" "${REALVER:-$VER}"
86 if [ $? -ne 0 ]; then
87 echo "Command failed. If the patches failed to apply, to rebase them, run":
88 echo "cd $BUILDDIR"
89 echo "rm -rf .pc"
90 echo "ln -s $PKGDIR/debian/patches"
91 echo "quilt push -a"
92 echo "$EDITOR <file>"
93 echo "quilt refresh"
94 exit 1
95 fi
96 set -e
97 }
98
99 shouldbuild() {
100 local dst="$1"
101 local src="$2"
102 test ! -e "$dst" -o "$src" -nt "$dst"
103 }
104
105 get_existing_version() {
106 sed -nre "s/.*Package .* (.*) from crates.io.*/\1/gp" "$1/debian/changelog" | head -n1
107 }