git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Michael Haggerty <mhagger@alum.mit.edu>
To: Christian Couder <christian.couder@gmail.com>, git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Stefan Beller" <sbeller@google.com>,
	"Jonathan Nieder" <jrnieder@gmail.com>,
	"Jonathan Tan" <jonathantanmy@google.com>,
	"Duy Nguyen" <pclouds@gmail.com>,
	"Derrick Stolee" <stolee@gmail.com>,
	"Carlos Martín Nieto" <cmn@dwim.me>,
	"David Turner" <novalis@novalis.org>,
	"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"SZEDER Gábor" <szeder.dev@gmail.com>,
	"Christian Couder" <chriscool@tuxfamily.org>,
	"David Turner" <dturner@twopensource.com>
Subject: Re: [PATCH v2] t: make many tests depend less on the refs being files
Date: Fri, 25 May 2018 10:48:04 +0200	[thread overview]
Message-ID: <615f57ad-7591-128a-0c42-660312d34ca2@alum.mit.edu> (raw)
In-Reply-To: <20180523052517.4443-1-chriscool@tuxfamily.org>

On 05/23/2018 07:25 AM, Christian Couder wrote:
> From: David Turner <dturner@twopensource.com>
> 
> Many tests are very focused on the file system representation of the
> loose and packed refs code. As there are plans to implement other
> ref storage systems, let's migrate these tests to a form that test
> the intent of the refs storage system instead of it internals.
> [...]
> 
> diff --git a/t/t1401-symbolic-ref.sh b/t/t1401-symbolic-ref.sh
> index 9e782a8122..a4ebb0b65f 100755
> --- a/t/t1401-symbolic-ref.sh
> +++ b/t/t1401-symbolic-ref.sh
> @@ -65,7 +65,7 @@ reset_to_sane
>  test_expect_success 'symbolic-ref fails to delete real ref' '
>  	echo "fatal: Cannot delete refs/heads/foo, not a symbolic ref" >expect &&
>  	test_must_fail git symbolic-ref -d refs/heads/foo >actual 2>&1 &&
> -	test_path_is_file .git/refs/heads/foo &&
> +	git rev-parse --verify refs/heads/foo &&
>  	test_cmp expect actual
>  '
>  reset_to_sane

Should t1401 be considered a backend-agnostic test, or is it needed to
ensure that symbolic refs are written correctly in the files backend?

> diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
> index c0ef946811..222dc2c377 100755
> --- a/t/t3200-branch.sh
> +++ b/t/t3200-branch.sh
> @@ -234,34 +234,34 @@ test_expect_success 'git branch -M master2 master2 should work when master is ch
>  
>  test_expect_success 'git branch -v -d t should work' '
>  	git branch t &&
> -	test_path_is_file .git/refs/heads/t &&
> +	git rev-parse --verify refs/heads/t &&
>  	git branch -v -d t &&
> -	test_path_is_missing .git/refs/heads/t
> +	test_must_fail git rev-parse --verify refs/heads/t
>  '
>  
>  test_expect_success 'git branch -v -m t s should work' '
>  	git branch t &&
> -	test_path_is_file .git/refs/heads/t &&
> +	git rev-parse --verify refs/heads/t &&
>  	git branch -v -m t s &&
> -	test_path_is_missing .git/refs/heads/t &&
> -	test_path_is_file .git/refs/heads/s &&
> +	test_must_fail git rev-parse --verify refs/heads/t &&
> +	git rev-parse --verify refs/heads/s &&
>  	git branch -d s
>  '
>  
>  test_expect_success 'git branch -m -d t s should fail' '
>  	git branch t &&
> -	test_path_is_file .git/refs/heads/t &&
> +	git rev-parse refs/heads/t &&
>  	test_must_fail git branch -m -d t s &&
>  	git branch -d t &&
> -	test_path_is_missing .git/refs/heads/t
> +	test_must_fail git rev-parse refs/heads/t
>  '
>  
>  test_expect_success 'git branch --list -d t should fail' '
>  	git branch t &&
> -	test_path_is_file .git/refs/heads/t &&
> +	git rev-parse refs/heads/t &&
>  	test_must_fail git branch --list -d t &&
>  	git branch -d t &&
> -	test_path_is_missing .git/refs/heads/t
> +	test_must_fail git rev-parse refs/heads/t
>  '
>  
>  test_expect_success 'git branch --list -v with --abbrev' '
> diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
> index aefde7b172..1f871d3cca 100755
> --- a/t/t3903-stash.sh
> +++ b/t/t3903-stash.sh
> @@ -726,7 +726,7 @@ test_expect_success 'store updates stash ref and reflog' '
>  	git reset --hard &&
>  	! grep quux bazzy &&
>  	git stash store -m quuxery $STASH_ID &&
> -	test $(cat .git/refs/stash) = $STASH_ID &&
> +	test $(git rev-parse stash) = $STASH_ID &&
>  	git reflog --format=%H stash| grep $STASH_ID &&
>  	git stash pop &&
>  	grep quux bazzy
> diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
> index 0680dec808..d4f435155f 100755
> --- a/t/t5500-fetch-pack.sh
> +++ b/t/t5500-fetch-pack.sh
> @@ -30,7 +30,7 @@ add () {
>  	test_tick &&
>  	commit=$(echo "$text" | git commit-tree $tree $parents) &&
>  	eval "$name=$commit; export $name" &&
> -	echo $commit > .git/refs/heads/$branch &&
> +	git update-ref "refs/heads/$branch" "$commit" &&
>  	eval ${branch}TIP=$commit
>  }
>  
> @@ -45,10 +45,10 @@ pull_to_client () {
>  
>  			case "$heads" in
>  			    *A*)
> -				    echo $ATIP > .git/refs/heads/A;;
> +				    git update-ref refs/heads/A "$ATIP";;
>  			esac &&
>  			case "$heads" in *B*)
> -			    echo $BTIP > .git/refs/heads/B;;
> +			    git update-ref refs/heads/B "$BTIP";;
>  			esac &&
>  			git symbolic-ref HEAD refs/heads/$(echo $heads \
>  				| sed -e "s/^\(.\).*$/\1/") &&
> @@ -92,8 +92,8 @@ test_expect_success 'setup' '
>  		cur=$(($cur+1))
>  	done &&
>  	add B1 $A1 &&
> -	echo $ATIP > .git/refs/heads/A &&
> -	echo $BTIP > .git/refs/heads/B &&
> +	git update-ref refs/heads/A "$ATIP" &&
> +	git update-ref refs/heads/B "$BTIP" &&
>  	git symbolic-ref HEAD refs/heads/B
>  '
>  
> diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
> index ae5a530a2d..e402aee6a2 100755
> --- a/t/t5510-fetch.sh
> +++ b/t/t5510-fetch.sh
> @@ -63,7 +63,7 @@ test_expect_success "fetch test" '
>  	git commit -a -m "updated by origin" &&
>  	cd two &&
>  	git fetch &&
> -	test -f .git/refs/heads/one &&
> +	git rev-parse --verify refs/heads/one &&
>  	mine=$(git rev-parse refs/heads/one) &&
>  	his=$(cd ../one && git rev-parse refs/heads/master) &&
>  	test "z$mine" = "z$his"
> @@ -73,8 +73,8 @@ test_expect_success "fetch test for-merge" '
>  	cd "$D" &&
>  	cd three &&
>  	git fetch &&
> -	test -f .git/refs/heads/two &&
> -	test -f .git/refs/heads/one &&
> +	git rev-parse --verify refs/heads/two &&
> +	git rev-parse --verify refs/heads/one &&
>  	master_in_two=$(cd ../two && git rev-parse master) &&
>  	one_in_two=$(cd ../two && git rev-parse one) &&
>  	{
> diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
> index 31db7b5f91..aa2d360ce3 100755
> --- a/t/t6010-merge-base.sh
> +++ b/t/t6010-merge-base.sh
> @@ -34,7 +34,7 @@ doit () {
>  
>  	commit=$(echo $NAME | git commit-tree $T $PARENTS) &&
>  
> -	echo $commit >.git/refs/tags/$NAME &&
> +	git update-ref "refs/tags/$NAME" "$commit" &&
>  	echo $commit
>  }
>  
> diff --git a/t/t7201-co.sh b/t/t7201-co.sh
> index 76c223c967..ab9da61da3 100755
> --- a/t/t7201-co.sh
> +++ b/t/t7201-co.sh
> @@ -65,7 +65,7 @@ test_expect_success setup '
>  test_expect_success "checkout from non-existing branch" '
>  
>  	git checkout -b delete-me master &&
> -	rm .git/refs/heads/delete-me &&
> +	git update-ref -d --no-deref refs/heads/delete-me &&
>  	test refs/heads/delete-me = "$(git symbolic-ref HEAD)" &&
>  	git checkout master &&
>  	test refs/heads/master = "$(git symbolic-ref HEAD)"
> diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh
> index a735fa3717..9c49b6c1fe 100755
> --- a/t/t9104-git-svn-follow-parent.sh
> +++ b/t/t9104-git-svn-follow-parent.sh
> @@ -215,7 +215,8 @@ test_expect_success "multi-fetch continues to work" "
>  	"
>  
>  test_expect_success "multi-fetch works off a 'clean' repository" '
> -	rm -r "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" "$GIT_DIR/logs" &&
> +	rm -rf "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" &&
> +	git reflog expire --all --expire=all &&
>  	mkdir "$GIT_DIR/svn" &&
>  	git svn multi-fetch
>  	'
> 

`rm -rf "$GIT_DIR/refs/remotes"` is not kosher. I think it can be written

    printf 'option no-deref\ndelete %s\n' $(git for-each-ref
--format='%(refname)' refs/remotes) | git update-ref --stdin

as long as the number of references doesn't exceed command-line limits.
This will also take care of the reflogs. Another alternative would be to
write it as a loop.

Michael

  parent reply	other threads:[~2018-05-25  8:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-23  5:25 [PATCH v2] t: make many tests depend less on the refs being files Christian Couder
2018-05-23  6:08 ` Junio C Hamano
2018-05-25  8:48 ` Michael Haggerty [this message]
2018-05-25  8:59   ` Jeff King
2018-05-25  9:05     ` Michael Haggerty
2018-05-25 11:22       ` Christian Couder
2018-05-25 11:21   ` Christian Couder

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=615f57ad-7591-128a-0c42-660312d34ca2@alum.mit.edu \
    --to=mhagger@alum.mit.edu \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=avarab@gmail.com \
    --cc=chriscool@tuxfamily.org \
    --cc=christian.couder@gmail.com \
    --cc=cmn@dwim.me \
    --cc=dturner@twopensource.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jonathantanmy@google.com \
    --cc=jrnieder@gmail.com \
    --cc=novalis@novalis.org \
    --cc=pclouds@gmail.com \
    --cc=sbeller@google.com \
    --cc=stolee@gmail.com \
    --cc=szeder.dev@gmail.com \
    /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).