summaryrefslogtreecommitdiffstats
path: root/bin/git-debian-check
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbin/git-debian-check132
-rwxr-xr-xbin/git-debian-check.d/branch_initial-empty-commit.sh31
-rwxr-xr-xbin/git-debian-check.d/comit_good-signatures.sh32
-rwxr-xr-xbin/git-debian-check.d/comit_signed-off-lines.sh32
-rwxr-xr-xbin/git-debian-check.d/commit_message-begin-with-capital-letter.sh36
-rwxr-xr-xbin/git-debian-check.d/commit_message-end-with-full-stop.sh36
-rwxr-xr-xbin/git-debian-check.d/commit_release-commits-have-release-tags.sh38
-rwxr-xr-xbin/git-debian-check.d/packaging_debian-maintainer-fields.sh29
-rwxr-xr-xbin/git-debian-check.d/packaging_debian-source-compression.sh43
-rwxr-xr-xbin/git-debian-check.d/packaging_debian-source-format.sh31
-rwxr-xr-xbin/git-debian-check.d/packaging_debian-source-local-options.sh29
-rwxr-xr-xbin/git-debian-check.d/packaging_debian-upload-urgency.sh48
-rwxr-xr-xbin/git-debian-check.d/packaging_debian-vcs-fields.sh35
-rwxr-xr-xbin/git-debian-check.d/packaging_no-direct-upstream-changes.sh31
-rwxr-xr-xbin/git-debian-check.d/repository_branches-exist.sh34
-rwxr-xr-xbin/git-debian-check.d/repository_branches-not-exist.sh34
-rwxr-xr-xbin/git-debian-check.d/repository_clean-working-directory.sh30
-rwxr-xr-xbin/git-debian-check.d/tag_all-tags-are-on-branch.sh36
-rwxr-xr-xbin/git-debian-check.d/tag_messages-match-release-commit.sh36
-rwxr-xr-xbin/git-debian-check.d/tag_messages-match-version.sh36
-rwxr-xr-xbin/git-debian-check.d/tag_signatures-with-gnupg.sh34
21 files changed, 823 insertions, 0 deletions
diff --git a/bin/git-debian-check b/bin/git-debian-check
new file mode 100755
index 0000000..b4d5869
--- /dev/null
+++ b/bin/git-debian-check
@@ -0,0 +1,132 @@
+#!/bin/sh
+
+# source-tools - Manage Git repositories effectively and efficiently
+# Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+FEATURE_BRANCH="progress-linux"
+MAINTAINER="Progress Linux Maintainers <maintainers@lists.progress-linux.org>"
+
+Main ()
+{
+ REPOSITORY="$(basename $(git config --get remote.origin.url) .git)"
+
+ echo "Checking ${REPOSITORY} repository:"
+
+ # repository checks
+ for CHECK in /usr/lib/git-tools/repository-check.d/repository_*
+ do
+ ./${CHECK}
+ done
+
+ ORIGINAL_BRANCH="$(git branch | awk '/^\* / { print $2 }')"
+
+ case "${ORIGINAL_BRANCH}" in
+ ${FEATURE_BRANCH})
+ ;;
+
+ *)
+ git checkout ${FEATURE_BRANCH}
+ ;;
+ esac
+
+ DISTRIBUTION="$(dpkg-parsechangelog | awk '/Distribution: / { print $2 }')"
+
+ case ${DISTRIBUTION} in
+ *-extras)
+ BRANCHES="upstream ${FEATURE_BRANCH}"
+ ;;
+
+ *)
+ BRANCHES="upstream debian ${FEATURE_BRANCH}"
+ ;;
+ esac
+
+ # repository checks
+ for CHECK in /usr/lib/git-tools/repository-check.d/branch_*
+ do
+ ./${CHECK}
+ done
+
+ BRANCHES="$(git branch | sed -e 's|^\* ||')"
+
+ for BRANCH in ${BRANCHES}
+ do
+ case "${BRANCH}" in
+ upstream)
+ Branch_has_initial_empty_commit
+ ;;
+ esac
+
+ # repository checks
+ for CHECK in /usr/lib/git-tools/repository-check.d/commit_*
+ do
+ ./${CHECK}
+ done
+
+ # repository checks
+ for CHECK in /usr/lib/git-tools/repository-check.d/tag_*
+ do
+ ./${CHECK}
+ done
+
+ # TODO:
+ # * git commits and tags have ever increasing commit date
+ done
+
+ RELEASE="$(echo ${DISTRIBUTION} | sed -e 's|-extras||' -e 's|-security||' -e 's|-updates||')"
+
+ VCS_BROWSER="https://sources.progress-linux.org/cgit/releases/${RELEASE}/packages"
+ VCS_GIT="git://sources.progress-linux.org/git/releases/${RELEASE}/packages"
+
+ case "${REPOSITORY}" in
+ apt|dpkg|debian-archive-keyring|debian-keyring|clzip|lunzip|lzd|lzip|lziprecover|lzlib|pdlzip|plzip|zutils)
+ COMPRESSION="xz"
+ ;;
+
+ *)
+ COMPRESSION="lzip"
+ ;;
+ esac
+
+ # repository checks
+ for CHECK in /usr/lib/git-tools/repository-check.d/packaging_*
+ do
+ ./${CHECK}
+ done
+
+ # TODO:
+ # * debian version
+ # * debian distribution
+ # * debian changelog entries
+ # * release tags only modify debian/changelog
+
+ CURRENT_BRANCH="$(git branch | awk '/^\* / { print $2 }')"
+
+ case "${CURRENT_BRANCH}" in
+ ${ORIGINAL_BRANCH})
+ ;;
+
+ *)
+ git checkout ${ORIGINAL_BRANCH}
+ ;;
+ esac
+
+ echo "done."
+}
+
+Main ${@}
diff --git a/bin/git-debian-check.d/branch_initial-empty-commit.sh b/bin/git-debian-check.d/branch_initial-empty-commit.sh
new file mode 100755
index 0000000..8efc8e4
--- /dev/null
+++ b/bin/git-debian-check.d/branch_initial-empty-commit.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) branch has initial empty commit..."
+
+ID="$(git log --no-abbrev-commit ${BRANCH} -- | awk '/^commit / { print $2 }' | tail -n1)"
+MESSAGE="$(git show --no-patch --no-renames --pretty=format:%B ${ID} | head -n1)"
+
+if [ "${MESSAGE}" != "Initial commit." ]
+then
+ echo " \033[1;31mno\033[0m."
+else
+ echo " \033[1;32myes\033[0m."
+fi
diff --git a/bin/git-debian-check.d/comit_good-signatures.sh b/bin/git-debian-check.d/comit_good-signatures.sh
new file mode 100755
index 0000000..3501639
--- /dev/null
+++ b/bin/git-debian-check.d/comit_good-signatures.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) commits have good signatures..."
+
+IDS="$(git log ${BRANCH} -- | grep -c ^commit)"
+SIGNATURES="$(git log --show-signature ${BRANCH} -- | grep -c '^gpg: Good signature from')"
+
+if [ "${IDS}" -ne "${SIGNATURES}" ]
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: some commits on branch ${BRANCH} have no good signatures."
+else
+ echo " \033[1;32myes\033[0m."
+fi
diff --git a/bin/git-debian-check.d/comit_signed-off-lines.sh b/bin/git-debian-check.d/comit_signed-off-lines.sh
new file mode 100755
index 0000000..0940eaa
--- /dev/null
+++ b/bin/git-debian-check.d/comit_signed-off-lines.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) commits have Signed-off-by lines..."
+
+IDS="$(git log ${BRANCH} -- | grep -c ^commit)"
+SIGNED="$(git log ${BRANCH} -- | grep -c '^ Signed-off-by: ')"
+
+if [ "${IDS}" -ne "${SIGNED}" ]
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: some commits on branch ${BRANCH} have no Signed-off-by lines."
+else
+ echo " \033[1;32myes\033[0m."
+fi
diff --git a/bin/git-debian-check.d/commit_message-begin-with-capital-letter.sh b/bin/git-debian-check.d/commit_message-begin-with-capital-letter.sh
new file mode 100755
index 0000000..0cc981a
--- /dev/null
+++ b/bin/git-debian-check.d/commit_message-begin-with-capital-letter.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) commit messages begin with capital letter..."
+
+COMMITS="$(git log --no-abbrev-commit ${BRANCH} -- | awk '/^commit / { print $2 }')"
+
+for COMMIT in ${COMMITS}
+do
+ MESSAGE="$(git show --no-patch --no-renames --pretty=format:%B ${COMMIT} | head -n1)"
+
+ if ! echo ${MESSAGE} | grep -qs '^[A-Z]'
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: commit message ${COMMIT} does not begin with capital letter."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/commit_message-end-with-full-stop.sh b/bin/git-debian-check.d/commit_message-end-with-full-stop.sh
new file mode 100755
index 0000000..4a97e42
--- /dev/null
+++ b/bin/git-debian-check.d/commit_message-end-with-full-stop.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) commit messages end with full stop..."
+
+COMMITS="$(git log --no-abbrev-commit ${BRANCH} -- | awk '/^commit / { print $2 }')"
+
+for COMMIT in ${COMMITS}
+do
+ MESSAGE="$(git show --no-patch --no-renames --pretty=format:%B ${COMMIT} | head -n1)"
+
+ if ! echo ${MESSAGE} | grep -qs '.$'
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: commit message ${COMMIT} does not end with full stop."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/commit_release-commits-have-release-tags.sh b/bin/git-debian-check.d/commit_release-commits-have-release-tags.sh
new file mode 100755
index 0000000..cdc2d98
--- /dev/null
+++ b/bin/git-debian-check.d/commit_release-commits-have-release-tags.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) release commits have release tags..."
+
+COMMITS="$(git log --no-abbrev-commit ${BRANCH} -- | grep -B4 -E "(Releasing|Adding) ${BRANCH} version [0-9].*.$" | awk '/^commit / { print $2 }')"
+
+for COMMIT in ${COMMITS}
+do
+ VERSION="$(git show --no-patch --no-renames --pretty=format:%B ${COMMIT} | head -n1 | awk -Fversion\ '{ print $2 }' | sed -e 's|.$||')"
+ TAG="$(echo ${VERSION} | sed -e 's|:|%|g' -e 's|~|_|g')"
+ ID="$(git show --no-abbrev-commit --no-patch --no-renames ${BRANCH}/${TAG} | awk '/^commit / { print $2 }')"
+
+ if [ "${ID}" != "${COMMIT}" ]
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: commit ${COMMIT} has no release tag."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_debian-maintainer-fields.sh b/bin/git-debian-check.d/packaging_debian-maintainer-fields.sh
new file mode 100755
index 0000000..65dfcfd
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_debian-maintainer-fields.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) debian maintainer field..."
+
+if ! grep -qs "^Maintainer: ${MAINTAINER}" debian/control
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: packaging has no maintainer field."
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_debian-source-compression.sh b/bin/git-debian-check.d/packaging_debian-source-compression.sh
new file mode 100755
index 0000000..dabbbb7
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_debian-source-compression.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+COMPRESSION="${@}"
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) debian source compression..."
+
+case "${COMPRESSION}" in
+ lzip)
+ if grep -qs "^compression" debian/source/options
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: wrong compression."
+ fi
+ ;;
+
+ xz)
+ if [ "$(awk -F= '/^compression/ { print $2 }' debian/source/options | sed -e 's| ||g' -e 's|"||g')" != "xz" ]
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: wrong compression."
+ fi
+ ;;
+esac
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_debian-source-format.sh b/bin/git-debian-check.d/packaging_debian-source-format.sh
new file mode 100755
index 0000000..060aef6
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_debian-source-format.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) debian package source format..."
+
+FORMAT="$(cat debian/source/format)"
+
+if [ "${FORMAT}" != "3.0 (quilt)" ]
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: debian source format is not 3.0 (quilt)."
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_debian-source-local-options.sh b/bin/git-debian-check.d/packaging_debian-source-local-options.sh
new file mode 100755
index 0000000..a3a2bb6
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_debian-source-local-options.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) source local options..."
+
+if ! grep -qs ^abort-on-upstream-changes debian/source/local-options
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: packaging has no source local options."
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_debian-upload-urgency.sh b/bin/git-debian-check.d/packaging_debian-upload-urgency.sh
new file mode 100755
index 0000000..8ee731f
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_debian-upload-urgency.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) debian upload urgency..."
+
+DERIVATIVE_TAGS="$(git tag | grep "^${FEATURE_BRANCH}" | awk -F/ '{ print $2 }')"
+
+for DERIVATIVE_TAG in ${DERIVATIVE_TAGS}
+do
+ DERIVATIVE_URGENCY="$(git show ${FEATURE_BRANCH}/${DERIVATIVE_TAG}:debian/changelog | head -n1 | awk -Furgency= '{ print $2 }' | sed -e 's| ||g')"
+ DISTRIBUTION="$(git show ${FEATURE_BRANCH}/${DERIVATIVE_TAG}:debian/changelog | head -n1 | awk '{ print $3 }' | sed -e 's|;$||')"
+
+ case "${DISTRIBUTION}" in
+ *-extras)
+ URGENCY="low"
+ ;;
+
+ *)
+ TAG="$(echo ${DERIVATIVE_TAG} | sed -e 's|-0+cairon[0-9]$||' -e 's|-0_cairon[0-9]$||' -e 's|-0cairon[0-9]$||' -e 's|_cairon[0-9]$||' -e 's|cairon[0-9]$||')"
+ URGENCY="$(git show debian/${TAG}:debian/changelog | head -n1 | awk -Furgency= '{ print $2 }' | sed -e 's| ||g')"
+ ;;
+ esac
+
+ if [ "${DERIVATIVE_URGENCY}" != "${URGENCY}" ]
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: wrong urgency of ${DERIVATIVE_TAG}, should be ${URGENCY} instead of ${DERIVATIVE_URGENCY}."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_debian-vcs-fields.sh b/bin/git-debian-check.d/packaging_debian-vcs-fields.sh
new file mode 100755
index 0000000..476a947
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_debian-vcs-fields.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) debian vcs fields..."
+
+if ! grep -qs "^Vcs-Browser: ${VCS_BROWSER}/${REPOSITORY}.git" debian/control
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: packaging has no vcs-browser field."
+fi
+
+if ! grep -qs "Vcs-Git: ${VCS_GIT}/${REPOSITORY}.git" debian/control
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: packaging has no vcs-git field."
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/packaging_no-direct-upstream-changes.sh b/bin/git-debian-check.d/packaging_no-direct-upstream-changes.sh
new file mode 100755
index 0000000..2cf0372
--- /dev/null
+++ b/bin/git-debian-check.d/packaging_no-direct-upstream-changes.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${FEATURE_BRANCH}\033[0m) no direct upstream changes..."
+
+CHANGES="$(git diff upstream..${FEATURE_BRANCH} | grep -E '^(---|\+\+\+) (a|b)/' | sed -e 's|--- a/||g' -e 's|+++ a/||g' -e 's|--- b/||g' -e 's|+++ b/||g' | grep -v ^debian\/ || true)"
+
+if [ -n "${CHANGES}" ]
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: packaging has direct upstream changes."
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/repository_branches-exist.sh b/bin/git-debian-check.d/repository_branches-exist.sh
new file mode 100755
index 0000000..dfbdd9e
--- /dev/null
+++ b/bin/git-debian-check.d/repository_branches-exist.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+BRANCHES="${@}"
+
+echo -n " * [\033[1;34m${REPOSITORY}\033[0m] branches \"${BRANCHES}\" exist..."
+
+for BRANCH in ${BRANCHES}
+do
+ if ! git branch | grep -qs " ${BRANCH}$"
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: repository has no ${BRANCH} branch."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/repository_branches-not-exist.sh b/bin/git-debian-check.d/repository_branches-not-exist.sh
new file mode 100755
index 0000000..69b3251
--- /dev/null
+++ b/bin/git-debian-check.d/repository_branches-not-exist.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+BRANCHES="${@}"
+
+echo -n " * [\033[1;34m${REPOSITORY}\033[0m] no other branches..."
+
+BRANCHES="$(echo ${@} | sed -e 's| |\||g')"
+BRANCH="$(echo $(git branch | grep -Ev " (${BRANCHES})$" || true) | sed -e 's| | |g')"
+
+if [ -n "${BRANCH}" ]
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: repository has other branches ${BRANCH}."
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/repository_clean-working-directory.sh b/bin/git-debian-check.d/repository_clean-working-directory.sh
new file mode 100755
index 0000000..72aa501
--- /dev/null
+++ b/bin/git-debian-check.d/repository_clean-working-directory.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * [\033[1;34m${REPOSITORY}\033[0m] repository working directory clean..."
+
+if ! git status 2>&1 | grep -qs "^nothing to commit, working directory clean$"
+then
+ echo " \033[1;31mno\033[0m."
+ echo "E: repository has unclean working directory."
+ exit 1
+fi
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/tag_all-tags-are-on-branch.sh b/bin/git-debian-check.d/tag_all-tags-are-on-branch.sh
new file mode 100755
index 0000000..7463758
--- /dev/null
+++ b/bin/git-debian-check.d/tag_all-tags-are-on-branch.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) tags are on branch..."
+
+TAGS="$(git tag | grep ^${BRANCH}/ | sort -V)"
+
+for TAG in ${TAGS}
+do
+ ID="$(git show --no-abbrev-commit --no-patch --no-renames ${TAG} | awk '/^commit / { print $2 }')"
+
+ if ! git log --no-abbrev-commit ${BRANCH} -- | grep -Eqs "^commit ${ID}($| \()"
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: tag ${TAG} is not on branch."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/tag_messages-match-release-commit.sh b/bin/git-debian-check.d/tag_messages-match-release-commit.sh
new file mode 100755
index 0000000..e53a87a
--- /dev/null
+++ b/bin/git-debian-check.d/tag_messages-match-release-commit.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) tag messages matches release commit..."
+
+TAGS="$(git tag | grep ^${BRANCH}/ | sort -V)"
+
+for TAG in ${TAGS}
+do
+ VERSION="$(echo ${TAG} | awk -F/ '{ print $2 }' | sed -e 's|%|:|g' -e 's|_|~|g')"
+
+ if ! git show --no-patch --no-renames ${TAG} | grep -Eqs "^ (Releasing|Adding) ${BRANCH} version $(echo ${VERSION} | sed -e 's|+|\\+|g').$"
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: tag message ${TAG} does not match release commit."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/tag_messages-match-version.sh b/bin/git-debian-check.d/tag_messages-match-version.sh
new file mode 100755
index 0000000..c4edef0
--- /dev/null
+++ b/bin/git-debian-check.d/tag_messages-match-version.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) tag messages matches version..."
+
+TAGS="$(git tag | grep ^${BRANCH}/ | sort -V)"
+
+for TAG in ${TAGS}
+do
+ VERSION="$(echo ${TAG} | awk -F/ '{ print $2 }' | sed -e 's|%|:|g' -e 's|_|~|g')"
+
+ if ! git show --no-patch --no-renames ${TAG} | grep -qs "^Tagging ${BRANCH} version ${VERSION}.$"
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: tag message ${TAG} does not match version ${VERSION}."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."
diff --git a/bin/git-debian-check.d/tag_signatures-with-gnupg.sh b/bin/git-debian-check.d/tag_signatures-with-gnupg.sh
new file mode 100755
index 0000000..d74055d
--- /dev/null
+++ b/bin/git-debian-check.d/tag_signatures-with-gnupg.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# source-tools - Git extra utilities
+# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+echo -n " * (\033[0;32m${BRANCH}\033[0m) tags signatures with gnupg..."
+
+TAGS="$(git tag | grep ^${BRANCH}/ | sort -V)"
+
+for TAG in ${TAGS}
+do
+ if ! git show --no-patch --no-renames ${TAG} | grep -qs '^Version: GnuPG v1$'
+ then
+ echo " \033[1;31mno\033[0m."
+ echo "E: tag ${TAG} has no signature with gnupg."
+ fi
+done
+
+echo " \033[1;32myes\033[0m."