summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-debpush35
-rw-r--r--git-debpush.1.pod6
-rwxr-xr-xtests/tests/tagupl9
3 files changed, 50 insertions, 0 deletions
diff --git a/git-debpush b/git-debpush
index dee358b..1bfb093 100755
--- a/git-debpush
+++ b/git-debpush
@@ -79,6 +79,11 @@ fail_check () {
fi
}
+fail_check_upstream_nonidentical () {
+ fail_check upstream-nonidentical \
+ "the upstream source in tag $upstream_tag is not identical to the upstream source in $branch"
+}
+
find_last_tag () {
local prefix=$1
@@ -92,6 +97,23 @@ find_last_tag () {
set -o pipefail
}
+check_treesame () {
+ local first=$1
+ local second=$2
+ shift 2
+
+ set +e
+ git diff --exit-code "$first".."$second" -- . "$@"
+ git_diff_rc=$?
+ set -e
+
+ if [ $git_diff_rc -le 1 ]; then
+ return $git_diff_rc
+ else
+ fail "'git diff' exited with unexpected code $git_diff_rc"
+ fi
+}
+
# **** Parse command line ****
getopt=$(getopt -s bash -o 'nfu:' \
@@ -313,6 +335,19 @@ if ! [ "x$upstream_tag" = "x" ] \
"upstream tag $upstream_tag is not an ancestor of $branch; probably a mistake"
fi
+# ---- Upstream tag tree nonidentical
+
+case "$quilt_mode" in
+ gbp)
+ check_treesame "$upstream_tag" "$branch" ':!debian' ':!**.gitignore' \
+ || fail_check_upstream_nonidentical
+ ;;
+ unapplied)
+ check_treesame "$upstream_tag" "$branch" ':!debian' \
+ || fail_check_upstream_nonidentical
+ ;;
+esac
+
# ---- Summary
if $failed_check; then
diff --git a/git-debpush.1.pod b/git-debpush.1.pod
index 429148d..a554fd5 100644
--- a/git-debpush.1.pod
+++ b/git-debpush.1.pod
@@ -200,6 +200,12 @@ Debian unstable after uploading to Debian experimental).
Ignore the fact that the upstream tag is not an ancestor of the branch
to be tagged (skipping this check is implied by B<--quilt=baredebian>).
+=item B<upstream-nonidentical>
+
+Ignore any differences between the upstream source in the upstream tag
+and the upstream source in the branch to be tagged (this check is only
+run when using B<--quilt=gbp> or B<--quilt=unapplied>).
+
=item B<unreleased>
Permit upload to a suite called UNRELEASED.
diff --git a/tests/tests/tagupl b/tests/tests/tagupl
index 09ca53a..9d3e45a 100755
--- a/tests/tests/tagupl
+++ b/tests/tests/tagupl
@@ -23,10 +23,19 @@ git tag $upstreamtag
git checkout -B master quilt-tip-2
+echo foo >bar
+git add bar
+git commit -m"corrupt the upstream source to test upstream-nonidentical check"
+
t-tagupl-settings
tagname=test-dummy/$v
+t-expect-fail "the upstream source in tag $upstreamtag is not identical to the upstream source in refs/heads/master" \
+t-tagupl-test --quilt=gbp --upstream=$upstreamtag
+
+git reset --hard HEAD~1
+
t-expect-fail "upstream tag $upstreamtag is not an ancestor of refs/heads/master" \
t-tagupl-test --quilt=gbp --upstream=$upstreamtag