From: Jiang Xin <worldhello.net@gmail.com>
To: "Junio C Hamano" <gitster@pobox.com>,
"Git List" <git@vger.kernel.org>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Sun Chao" <sunchao9@huawei.com>
Cc: Jiang Xin <zhiyou.jx@alibaba-inc.com>,
Jiang Xin <worldhello.net@gmail.com>
Subject: [PATCH v7 1/6] t5323: test cases for git-pack-redundant
Date: Wed, 30 Jan 2019 19:47:31 +0800 [thread overview]
Message-ID: <20190130114736.30357-2-worldhello.net@gmail.com> (raw)
In-Reply-To: <20190112091754.30985-1-worldhello.net@gmail.com>
From: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Add test cases for git pack-redundant to validate new algorithm for git
pack-redundant.
Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Reviewed-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
t/t5323-pack-redundant.sh | 322 ++++++++++++++++++++++++++++++++++++++
1 file changed, 322 insertions(+)
create mode 100755 t/t5323-pack-redundant.sh
diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
new file mode 100755
index 0000000000..710fe9884c
--- /dev/null
+++ b/t/t5323-pack-redundant.sh
@@ -0,0 +1,322 @@
+#!/bin/sh
+#
+# Copyright (c) 2018 Jiang Xin
+#
+
+test_description='git pack-redundant test'
+
+. ./test-lib.sh
+
+create_commits () {
+ parent=
+ for name in A B C D E F G H I J K L M N O P Q R
+ do
+ test_tick &&
+ T=$(git write-tree) &&
+ if test -z "$parent"
+ then
+ oid=$(echo $name | git commit-tree $T)
+ else
+ oid=$(echo $name | git commit-tree -p $parent $T)
+ fi &&
+ eval $name=$oid &&
+ parent=$oid ||
+ return 1
+ done
+ git update-ref refs/heads/master $R
+}
+
+create_pack_1 () {
+ P1=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $T
+ $A
+ $B
+ $C
+ $D
+ $E
+ $F
+ $R
+ EOF
+ ) &&
+ eval P$P1=P1:$P1
+}
+
+create_pack_2 () {
+ P2=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $B
+ $C
+ $D
+ $E
+ $G
+ $H
+ $I
+ EOF
+ ) &&
+ eval P$P2=P2:$P2
+}
+
+create_pack_3 () {
+ P3=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $F
+ $I
+ $J
+ $K
+ $L
+ $M
+ EOF
+ ) &&
+ eval P$P3=P3:$P3
+}
+
+create_pack_4 () {
+ P4=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $J
+ $K
+ $L
+ $M
+ $P
+ EOF
+ ) &&
+ eval P$P4=P4:$P4
+}
+
+create_pack_5 () {
+ P5=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $G
+ $H
+ $N
+ $O
+ EOF
+ ) &&
+ eval P$P5=P5:$P5
+}
+
+create_pack_6 () {
+ P6=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $N
+ $O
+ $Q
+ EOF
+ ) &&
+ eval P$P6=P6:$P6
+}
+
+create_pack_7 () {
+ P7=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $P
+ $Q
+ EOF
+ ) &&
+ eval P$P7=P7:$P7
+}
+
+create_pack_8 () {
+ P8=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $A
+ EOF
+ ) &&
+ eval P$P8=P8:$P8
+}
+
+format_packfiles () {
+ sed \
+ -e "s#.*/pack-\(.*\)\.idx#\1#" \
+ -e "s#.*/pack-\(.*\)\.pack#\1#" |
+ sort -u |
+ while read p
+ do
+ if test -z "$(eval echo \${P$p})"
+ then
+ echo $p
+ else
+ eval echo "\${P$p}"
+ fi
+ done |
+ sort
+}
+
+test_expect_success 'setup master.git' '
+ git init --bare master.git &&
+ cd master.git &&
+ create_commits
+'
+
+test_expect_success 'no redundant for pack 1, 2, 3' '
+ create_pack_1 && create_pack_2 && create_pack_3 &&
+ git pack-redundant --all >out &&
+ test_must_be_empty out
+'
+
+test_expect_success 'create pack 4, 5' '
+ create_pack_4 && create_pack_5
+'
+
+cat >expected <<EOF
+P2:$P2
+EOF
+
+test_expect_success 'one of pack-2/pack-3 is redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'create pack 6, 7' '
+ create_pack_6 && create_pack_7
+'
+
+# Only after calling create_pack_6, we can use $P6 variable.
+cat >expected <<EOF
+P2:$P2
+P4:$P4
+P6:$P6
+EOF
+
+test_expect_success 'pack 2, 4, and 6 are redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'create pack 8' '
+ create_pack_8
+'
+
+cat >expected <<EOF
+P2:$P2
+P4:$P4
+P6:$P6
+P8:$P8
+EOF
+
+test_expect_success 'pack-8 (subset of pack-1) is also redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'clean loose objects' '
+ git prune-packed &&
+ find objects -type f | sed -e "/objects\/pack\//d" >out &&
+ test_must_be_empty out
+'
+
+test_expect_success 'remove redundant packs and pass fsck' '
+ git pack-redundant --all | xargs rm &&
+ git fsck --no-progress &&
+ git pack-redundant --all >out &&
+ test_must_be_empty out
+'
+
+test_expect_success 'setup shared.git' '
+ cd "$TRASH_DIRECTORY" &&
+ git clone -q --mirror master.git shared.git &&
+ cd shared.git &&
+ printf "../../master.git/objects" >objects/info/alternates
+'
+
+test_expect_success 'no redundant packs without --alt-odb' '
+ git pack-redundant --all >out &&
+ test_must_be_empty out
+'
+
+cat >expected <<EOF
+P1:$P1
+P3:$P3
+P5:$P5
+P7:$P7
+EOF
+
+test_expect_success 'pack-redundant --verbose: show duplicate packs in stderr' '
+ git pack-redundant --all --verbose >out 2>out.err &&
+ test_must_be_empty out &&
+ grep "pack$" out.err | format_packfiles >actual &&
+ test_cmp expected actual
+'
+
+cat >expected <<EOF
+fatal: Zero packs found!
+EOF
+
+test_expect_success 'remove redundant packs by alt-odb, no packs left' '
+ git pack-redundant --all --alt-odb | xargs rm &&
+ git fsck --no-progress &&
+ test_must_fail git pack-redundant --all --alt-odb >actual 2>&1 &&
+ test_cmp expected actual
+'
+
+create_commits_others () {
+ parent=$(git rev-parse HEAD)
+ for name in X Y Z
+ do
+ test_tick &&
+ T=$(git write-tree) &&
+ if test -z "$parent"
+ then
+ oid=$(echo $name | git commit-tree $T)
+ else
+ oid=$(echo $name | git commit-tree -p $parent $T)
+ fi &&
+ eval $name=$oid &&
+ parent=$oid ||
+ return 1
+ done
+ git update-ref refs/heads/master $Z
+}
+
+create_pack_x1 () {
+ Px1=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $X
+ $Y
+ $Z
+ $A
+ $B
+ $C
+ EOF
+ ) &&
+ eval P${Px1}=Px1:${Px1}
+}
+
+create_pack_x2 () {
+ Px2=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $X
+ $Y
+ $Z
+ $D
+ $E
+ $F
+ EOF
+ ) &&
+ eval P${Px2}=Px2:${Px2}
+}
+
+test_expect_success 'new objects and packs in shared.git' '
+ create_commits_others &&
+ create_pack_x1 &&
+ create_pack_x2 &&
+ git pack-redundant --all >out &&
+ test_must_be_empty out
+'
+
+test_expect_success 'one pack is redundant' '
+ git pack-redundant --all --alt-odb >out &&
+ format_packfiles <out >actual &&
+ test_line_count = 1 actual
+'
+
+cat >expected <<EOF
+Px1:$Px1
+Px2:$Px2
+EOF
+
+test_expect_success 'set ignore objects and all two packs are redundant' '
+ git pack-redundant --all --alt-odb >out <<-EOF &&
+ $X
+ $Y
+ $Z
+ EOF
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
+test_done
--
2.20.1.103.ged0fc2ca7b
next prev parent reply other threads:[~2019-01-30 11:48 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-18 9:58 [PATCH 1/2] pack-redundant: new algorithm to find min packs Jiang Xin
2018-12-18 9:58 ` [PATCH 2/2] pack-redundant: remove unused functions Jiang Xin
2018-12-19 12:14 ` [PATCH v2 0/3] pack-redundant: new algorithm to find min packs Jiang Xin
2019-01-02 4:34 ` [PATCH v3 " Jiang Xin
2019-01-02 4:34 ` [PATCH v3 1/3] t5323: test cases for git-pack-redundant Jiang Xin
2019-01-09 12:56 ` SZEDER Gábor
2019-01-09 16:47 ` SZEDER Gábor
2019-01-10 12:01 ` [PATCH v5 0/5] pack-redundant: new algorithm to find min packs Jiang Xin
2019-01-12 9:17 ` [PATCH v6 " Jiang Xin
2019-01-30 11:47 ` [PATCH v7 0/6] " Jiang Xin
2019-02-01 16:21 ` [PATCH v9 " Jiang Xin
2019-02-01 16:21 ` [PATCH v9 1/6] t5323: test cases for git-pack-redundant Jiang Xin
2019-02-01 19:42 ` Eric Sunshine
2019-02-01 21:03 ` Junio C Hamano
2019-02-01 21:49 ` Eric Sunshine
2019-02-02 13:30 ` [PATCH v10 0/6] pack-redundant: new algorithm to find min packs Jiang Xin
2019-02-02 13:30 ` [PATCH v10 1/6] t5323: test cases for git-pack-redundant Jiang Xin
2019-02-02 13:30 ` [PATCH v10 2/6] pack-redundant: delay creation of unique_objects Jiang Xin
2019-02-02 13:30 ` [PATCH v10 3/6] pack-redundant: delete redundant code Jiang Xin
2019-02-02 13:30 ` [PATCH v10 4/6] pack-redundant: new algorithm to find min packs Jiang Xin
2019-02-02 13:30 ` [PATCH v10 5/6] pack-redundant: rename pack_list.all_objects Jiang Xin
2019-02-02 13:30 ` [PATCH v10 6/6] pack-redundant: consistent sort method Jiang Xin
2019-02-01 16:21 ` [PATCH v9 2/6] pack-redundant: delay creation of unique_objects Jiang Xin
2019-02-01 16:21 ` [PATCH v9 3/6] pack-redundant: delete redundant code Jiang Xin
2019-02-01 16:21 ` [PATCH v9 4/6] pack-redundant: new algorithm to find min packs Jiang Xin
2019-02-01 16:21 ` [PATCH v9 5/6] pack-redundant: rename pack_list.all_objects Jiang Xin
2019-02-01 16:21 ` [PATCH v9 6/6] pack-redundant: consistent sort method Jiang Xin
2019-01-30 11:47 ` Jiang Xin [this message]
2019-01-31 21:44 ` [PATCH v7 1/6] t5323: test cases for git-pack-redundant Junio C Hamano
2019-02-01 5:44 ` Jiang Xin
2019-02-01 6:11 ` Eric Sunshine
2019-02-01 7:23 ` Jiang Xin
2019-02-01 7:25 ` Jiang Xin
2019-02-01 9:51 ` Jiang Xin
2019-01-30 11:47 ` [PATCH v7 2/6] pack-redundant: delay creation of unique_objects Jiang Xin
2019-01-30 11:47 ` [PATCH v7 3/6] pack-redundant: new algorithm to find min packs Jiang Xin
2019-01-31 19:30 ` Junio C Hamano
2019-02-01 9:55 ` Jiang Xin
2019-01-30 11:47 ` [PATCH v7 4/6] pack-redundant: remove unused functions Jiang Xin
2019-01-30 15:03 ` [PATCH v8 1/1] pack-redundant: delete redundant code 16657101987
2019-01-30 11:47 ` [PATCH v7 5/6] pack-redundant: rename pack_list.all_objects Jiang Xin
2019-01-30 11:47 ` [PATCH v7 6/6] pack-redundant: consistent sort method Jiang Xin
2019-01-12 9:17 ` [PATCH v6 1/5] t5323: test cases for git-pack-redundant Jiang Xin
2019-01-12 9:17 ` [PATCH v6 2/5] pack-redundant: new algorithm to find min packs Jiang Xin
2019-01-12 9:17 ` [PATCH v6 3/5] pack-redundant: remove unused functions Jiang Xin
2019-01-12 9:17 ` [PATCH v6 4/5] pack-redundant: rename pack_list.all_objects Jiang Xin
2019-01-12 9:17 ` [PATCH v6 5/5] pack-redundant: consistent sort method Jiang Xin
2019-01-10 12:01 ` [PATCH v5 1/5] t5323: test cases for git-pack-redundant Jiang Xin
2019-01-10 21:11 ` Junio C Hamano
2019-01-11 1:59 ` Jiang Xin
2019-01-11 18:00 ` Junio C Hamano
2019-01-10 12:01 ` [PATCH v5 2/5] pack-redundant: new algorithm to find min packs Jiang Xin
2019-01-11 1:19 ` SZEDER Gábor
2019-01-10 12:01 ` [PATCH v5 3/5] pack-redundant: rename pack_list.all_objects Jiang Xin
2019-01-10 12:01 ` [PATCH v5 4/5] pack-redundant: consistent sort method Jiang Xin
2019-01-10 20:05 ` SZEDER Gábor
2019-01-10 12:01 ` [PATCH v5 5/5] pack-redundant: remove unused functions Jiang Xin
2019-01-10 3:28 ` [PATCH v3 1/3] t5323: test cases for git-pack-redundant Jiang Xin
2019-01-10 7:11 ` Johannes Sixt
2019-01-10 11:57 ` SZEDER Gábor
2019-01-10 12:25 ` Torsten Bögershausen
2019-01-10 17:36 ` Junio C Hamano
2019-01-15 20:30 ` [PATCH/RFC v1 1/1] test-lint: sed -E (or -a, -l) are not portable tboegi
2019-01-15 21:09 ` Eric Sunshine
2019-01-16 11:24 ` Ævar Arnfjörð Bjarmason
2019-01-20 7:53 ` [PATCH/RFC v2 1/1] test-lint: Only use only sed [-n] [-e command] [-f command_file] tboegi
2019-01-22 19:47 ` Junio C Hamano
2019-01-22 20:00 ` Torsten Bögershausen
2019-01-22 21:15 ` Eric Sunshine
2019-01-23 6:35 ` Torsten Bögershausen
2019-01-23 17:54 ` Junio C Hamano
2019-01-25 19:12 ` Torsten Bögershausen
2019-01-27 22:34 ` Junio C Hamano
2019-01-02 4:34 ` [PATCH v3 2/3] pack-redundant: new algorithm to find min packs Jiang Xin
2019-01-02 4:34 ` [PATCH v3 3/3] pack-redundant: remove unused functions Jiang Xin
2019-01-08 16:40 ` [PATCH v4 0/1] " 16657101987
2019-01-08 19:30 ` Junio C Hamano
2019-01-09 0:29 ` 16657101987
2019-01-08 16:43 ` [PATCH v4 1/1] " 16657101987
2019-01-08 16:45 ` [PATCH v4 0/1] " 16657101987
2018-12-19 12:14 ` [PATCH v2 1/3] t5322: test cases for git-pack-redundant Jiang Xin
2018-12-19 12:14 ` [PATCH v2 2/3] pack-redundant: new algorithm to find min packs Jiang Xin
2018-12-19 12:14 ` [PATCH v2 3/3] pack-redundant: remove unused functions Jiang Xin
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190130114736.30357-2-worldhello.net@gmail.com \
--to=worldhello.net@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=sunchao9@huawei.com \
--cc=szeder.dev@gmail.com \
--cc=zhiyou.jx@alibaba-inc.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.