From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH 6/7] t5533: test "push --lockref"
Date: Tue, 9 Jul 2013 12:53:29 -0700 [thread overview]
Message-ID: <1373399610-8588-7-git-send-email-gitster@pobox.com> (raw)
In-Reply-To: <1373399610-8588-1-git-send-email-gitster@pobox.com>
Prepare two repositories, src and dst, the latter of which is a
clone of the former (with tracking branches), and push from the
latter into the former, using --lockref=name (using tracking ref for
"name" when updating "name"), --lockref=name:value, --lockref=name:
(i.e. check creation), and --lockref (using tracking ref for
anything that we update).
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
t/t5533-push-cas.sh | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 176 insertions(+)
create mode 100755 t/t5533-push-cas.sh
diff --git a/t/t5533-push-cas.sh b/t/t5533-push-cas.sh
new file mode 100755
index 0000000..c080467
--- /dev/null
+++ b/t/t5533-push-cas.sh
@@ -0,0 +1,176 @@
+#!/bin/sh
+
+test_description='compare & swap push force/delete safety'
+
+. ./test-lib.sh
+
+setup_srcdst_basic () {
+ rm -fr src dst &&
+ git clone --no-local . src &&
+ git clone --no-local src dst &&
+ (
+ cd src && git checkout HEAD^0
+ )
+}
+
+test_expect_success setup '
+ : create template repository
+ test_commit A &&
+ test_commit B &&
+ test_commit C
+'
+
+test_expect_success 'push to create (protected)' '
+ setup_srcdst_basic &&
+ (
+ cd dst &&
+ test_commit D &&
+ test_must_fail git push --lockref=master: origin master &&
+ test_must_fail git push --force --lockref=master: origin master
+ ) &&
+ >expect &&
+ git ls-remote src refs/heads/naster >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to create (allowed)' '
+ setup_srcdst_basic &&
+ (
+ cd dst &&
+ test_commit D &&
+ git push --lockref=naster: origin HEAD:naster
+ ) &&
+ git ls-remote dst refs/heads/master |
+ sed -e "s/master/naster/" >expect &&
+ git ls-remote src refs/heads/naster >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to update (protected)' '
+ setup_srcdst_basic &&
+ (
+ cd dst &&
+ test_commit D &&
+ test_must_fail git push --lockref=master:master origin master &&
+ test_must_fail git push --force --lockref=master:master origin master
+ ) &&
+ git ls-remote . refs/heads/master >expect &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to update (protected, tracking)' '
+ setup_srcdst_basic &&
+ (
+ cd src &&
+ git checkout master &&
+ test_commit D &&
+ git checkout HEAD^0
+ ) &&
+ git ls-remote src refs/heads/master >expect &&
+ (
+ cd dst &&
+ test_commit E &&
+ git ls-remote . refs/remotes/origin/master >expect &&
+ test_must_fail git push --lockref=master origin master &&
+ test_must_fail git push --force --lockref=master origin master &&
+ git ls-remote . refs/remotes/origin/master >actual &&
+ test_cmp expect actual
+ ) &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to update (allowed)' '
+ setup_srcdst_basic &&
+ (
+ cd dst &&
+ test_commit D &&
+ git push --lockref=master:master^ origin master
+ ) &&
+ git ls-remote dst refs/heads/master >expect &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to update (allowed, tracking)' '
+ setup_srcdst_basic &&
+ (
+ cd dst &&
+ test_commit D &&
+ git push --lockref=master origin master
+ ) &&
+ git ls-remote dst refs/heads/master >expect &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to update (still rejected with non-ff check)' '
+ setup_srcdst_basic &&
+ git ls-remote src refs/heads/master >expect &&
+ (
+ cd dst &&
+ git reset --hard HEAD^ &&
+ test_commit D &&
+ test_must_fail git push --lockref=master origin master
+ ) &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to delete (protected)' '
+ setup_srcdst_basic &&
+ git ls-remote src refs/heads/master >expect &&
+ (
+ cd dst &&
+ test_must_fail git push --lockref=master:master^ origin :master &&
+ test_must_fail git push --force --lockref=master:master^ origin :master
+ ) &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'push to delete (allowed)' '
+ setup_srcdst_basic &&
+ (
+ cd dst &&
+ git push --lockref=master origin :master
+ ) &&
+ >expect &&
+ git ls-remote src refs/heads/master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'cover everything with default lockref (protected)' '
+ setup_srcdst_basic &&
+ (
+ cd src &&
+ git branch naster master^
+ )
+ git ls-remote src refs/heads/\* >expect &&
+ (
+ cd dst &&
+ test_must_fail git push --lockref origin master master:naster
+ ) &&
+ git ls-remote src refs/heads/\* >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'cover everything with default lockref (allowed)' '
+ setup_srcdst_basic &&
+ (
+ cd src &&
+ git branch naster master^
+ )
+ (
+ cd dst &&
+ git fetch &&
+ git push --lockref origin master master:naster
+ ) &&
+ git ls-remote dst refs/heads/master |
+ sed -e "s/master/naster/" >expect &&
+ git ls-remote src refs/heads/naster >actual &&
+ test_cmp expect actual
+'
+
+test_done
--
1.8.3.2-875-g76c723c
next prev parent reply other threads:[~2013-07-09 19:53 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-02 20:57 [RFD] Making "git push [--force/--delete]" safer? Junio C Hamano
2013-07-02 22:55 ` Johan Herland
2013-07-03 6:34 ` Johan Herland
2013-07-03 8:49 ` Junio C Hamano
2013-07-03 10:00 ` Johan Herland
2013-07-03 10:06 ` Jonathan del Strother
2013-07-03 10:11 ` Johan Herland
2013-07-03 10:50 ` Michael Haggerty
2013-07-03 12:06 ` Johannes Sixt
2013-07-03 19:53 ` Junio C Hamano
2013-07-04 5:37 ` Johannes Sixt
2013-07-04 5:46 ` Junio C Hamano
2013-07-03 19:50 ` Junio C Hamano
2013-07-03 20:18 ` Junio C Hamano
2013-07-03 19:48 ` Junio C Hamano
2013-07-09 19:53 ` [PATCH 0/7] safer "push --force" with compare-and-swap Junio C Hamano
2013-07-09 19:53 ` [PATCH 1/7] cache.h: move remote/connect API out of it Junio C Hamano
2013-07-09 19:53 ` [PATCH 2/7] builtin/push.c: use OPT_BOOL, not OPT_BOOLEAN Junio C Hamano
2013-07-09 19:53 ` [PATCH 3/7] push: beginning of compare-and-swap "force/delete safety" Junio C Hamano
2013-07-09 19:53 ` [PATCH 4/7] remote.c: add command line option parser for --lockref Junio C Hamano
2013-07-16 22:13 ` John Keeping
2013-07-17 17:06 ` Junio C Hamano
2013-07-17 17:09 ` Junio C Hamano
2013-07-09 19:53 ` [PATCH 5/7] push --lockref: implement logic to populate old_sha1_expect[] Junio C Hamano
2013-07-09 19:53 ` Junio C Hamano [this message]
2013-07-09 19:53 ` [PATCH 7/7] push: document --lockref Junio C Hamano
2013-07-09 20:17 ` Aaron Schrab
2013-07-09 20:39 ` Junio C Hamano
2013-07-09 20:24 ` Johannes Sixt
2013-07-09 20:37 ` Junio C Hamano
2013-07-09 20:55 ` Johannes Sixt
2013-07-09 22:09 ` Junio C Hamano
2013-07-09 23:08 ` Junio C Hamano
2013-07-11 21:10 ` Johannes Sixt
2013-07-11 21:57 ` Junio C Hamano
2013-07-11 22:14 ` Junio C Hamano
2013-07-12 17:21 ` Johannes Sixt
2013-07-12 17:40 ` Junio C Hamano
2013-07-12 20:00 ` Johannes Sixt
2013-07-12 21:19 ` Junio C Hamano
2013-07-13 6:52 ` Johannes Sixt
2013-07-13 18:14 ` Junio C Hamano
2013-07-13 20:08 ` Junio C Hamano
2013-07-13 21:11 ` Johannes Sixt
2013-07-14 14:28 ` John Keeping
2013-07-13 20:17 ` Johannes Sixt
2013-07-14 19:17 ` Junio C Hamano
2013-07-14 20:21 ` Johannes Sixt
2013-07-14 20:34 ` Jonathan Nieder
2013-07-14 20:49 ` Jonathan Nieder
2013-07-14 20:59 ` Johannes Sixt
2013-07-14 21:28 ` Jonathan Nieder
2013-07-15 4:10 ` Junio C Hamano
2013-07-15 4:44 ` Jonathan Nieder
2013-07-15 15:37 ` Junio C Hamano
2013-07-15 20:30 ` Johannes Sixt
2013-07-15 3:50 ` Junio C Hamano
2013-07-15 15:47 ` Default expectation of --lockref Junio C Hamano
2013-07-15 20:27 ` [PATCH 7/7] push: document --lockref Johannes Sixt
2013-07-09 21:37 ` Marc Branchaud
2013-07-09 20:27 ` Michael Haggerty
2013-07-09 20:42 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1373399610-8588-7-git-send-email-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).