Re: Solaris test t5500 race condition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Peter Eriksen" <s022018@xxxxxxxxxxxxxx> writes:

>     Generating pack...
>     Done counting 3 objects.
>     Deltifying 3 objects.
>       33% (1/3) done^M  66% (2/3) done^M 100% (3/3) done
>     Total 3Unpacking , written 33 objects          <------------
>      (delta 0), reused 0 (delta 0)
>     11fa2f0cb58ed7f02dbd5ac75ed82a53fae62a7b refs/heads/A

Hmph.  Not good.  Before the writer managed to flush the report
the reader has already decoded the header and reports the number
of objects it is going to unpack.

Unfortunately the Solaris box I have access to is perhaps
sufficiently slow that this is not an issue X-<.

I think test based on the eye-candy is fragile anyway.  We would
want to probably _count_ before and after to see if the command
did what we expected.

There is a subtle difficulty doing so, however.  The test is
trying to see if fetch-pack vs upload-pack negotiations result
in minimal transfer, but if it is not, unpack side would just
happily say "I received this one, oh, I already have it".

We could do "fetch-pack -k" to keep the result packed, count the
number of objects in the resulting pack.

How about doing something like this instead?

-- >8 --
[PATCH] t5500: test fix

Relying on eye-candy progress bar was fragile to begin with.
Run fetch-pack with -k option, and count the objects that are in
the pack that were transferred from the other end.

Signed-off-by: Junio C Hamano <junkio@xxxxxxx>

---

 t/t5500-fetch-pack.sh |   33 ++++++++++++++-------------------
 1 files changed, 14 insertions(+), 19 deletions(-)

7f732c632ff7a1adc2309257becdc0c1fe76b514
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
index e15e14f..92f12d9 100755
--- a/t/t5500-fetch-pack.sh
+++ b/t/t5500-fetch-pack.sh
@@ -12,11 +12,6 @@ # Test fetch-pack/upload-pack pair.
 
 # Some convenience functions
 
-function show_count () {
-	commit_count=$(($commit_count+1))
-	printf "      %d\r" $commit_count
-}
-
 function add () {
 	local name=$1
 	local text="$@"
@@ -55,13 +50,6 @@ function test_expect_object_count () {
 		"test $count = $output"
 }
 
-function test_repack () {
-	local rep=$1
-
-	test_expect_success "repack && prune-packed in $rep" \
-		'(git-repack && git-prune-packed)2>>log.txt'
-}
-
 function pull_to_client () {
 	local number=$1
 	local heads=$2
@@ -70,13 +58,23 @@ function pull_to_client () {
 
 	cd client
 	test_expect_success "$number pull" \
-		"git-fetch-pack -v .. $heads > log.txt 2>&1"
+		"git-fetch-pack -k -v .. $heads"
 	case "$heads" in *A*) echo $ATIP > .git/refs/heads/A;; esac
 	case "$heads" in *B*) echo $BTIP > .git/refs/heads/B;; esac
 	git-symbolic-ref HEAD refs/heads/${heads:0:1}
+
 	test_expect_success "fsck" 'git-fsck-objects --full > fsck.txt 2>&1'
-	test_expect_object_count "after $number pull" $count
-	pack_count=$(grep Unpacking log.txt|tr -dc "0-9")
+
+	test_expect_success 'check downloaded results' \
+	'mv .git/objects/pack/pack-* . &&
+	 p=`ls -1 pack-*.pack` &&
+	 git-unpack-objects <$p &&
+	 git-fsck-objects --full'
+
+	test_expect_success "new object count after $number pull" \
+	'idx=`echo pack-*.idx` &&
+	 pack_count=`git-show-index <$idx | wc -l` &&
+	 test $pack_count = $count'
 	test -z "$pack_count" && pack_count=0
 	if [ -z "$no_strict_count_check" ]; then
 		test_expect_success "minimal count" "test $count = $pack_count"
@@ -84,6 +82,7 @@ function pull_to_client () {
 		test $count != $pack_count && \
 			echo "WARNING: $pack_count objects transmitted, only $count of which were needed"
 	fi
+	rm -f pack-*
 	cd ..
 }
 
@@ -117,8 +116,6 @@ git-symbolic-ref HEAD refs/heads/B
 
 pull_to_client 1st "B A" $((11*3))
 
-(cd client; test_repack client)
-
 add A11 $A10
 
 prev=1; cur=2; while [ $cur -le 65 ]; do
@@ -129,8 +126,6 @@ done
 
 pull_to_client 2nd "B" $((64*3))
 
-(cd client; test_repack client)
-
 pull_to_client 3rd "A" $((1*3)) # old fails
 
 test_done
-- 
1.3.0.rc3.g9306


-
: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]