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 <worldhello.net@gmail.com>,
Jiang Xin <zhiyou.jx@alibaba-inc.com>
Subject: [PATCH v7 0/6] pack-redundant: new algorithm to find min packs
Date: Wed, 30 Jan 2019 19:47:30 +0800 [thread overview]
Message-ID: <20190130114736.30357-1-worldhello.net@gmail.com> (raw)
In-Reply-To: <20190112091754.30985-1-worldhello.net@gmail.com>
Sun Chao (my former colleague at Huawei) found a bug of
git-pack-redundant. If there are too many packs and many of them
overlap each other, running `git pack-redundant --all` will
exhaust all memories and the process will be killed by kernel.
There is a script in commit log of commit 3/6, which can be used to
create a repository with lots of redundant packs. Running `git
pack-redundant --all` in it can reproduce this issue.
Derrick Stolee <stolee@gmail.com> 于2019年1月20日周日 上午9:08写道:
>
> Here is today's test coverage report.
>
> builtin/pack-redundant.c
> a338d10395 builtin/pack-redundant.c 339) static int cmp_remaining_objects(const void *a, const void *b)
> e4e2c2884e builtin/pack-redundant.c 341) struct pack_list *pl_a = *((struct pack_list **)a);
> e4e2c2884e builtin/pack-redundant.c 342) struct pack_list *pl_b = *((struct pack_list **)b);
> ...
Add new test cases in t5323 for better test coverage.
## Changes since reroll v6
* Add new test cases in t5323.
* Add new patch 2/6 (pack-redundant: delay creation of unique_objects),
which will fix a bug which fail to find redundant packs if turn on alt-odb
searching with `--alt-odb` option. This is because alt-odb objects are
only remove in unique_objects fields but not in all_objects fields of
pack_list.
## Range diff
1: be6555ae60 ! 1: 799e804d5e t5323: test cases for git-pack-redundant
@@ -43,7 +43,7 @@
+}
+
+create_pack_1 () {
-+ P1=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P1=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $T
+ $A
+ $B
@@ -58,7 +58,7 @@
+}
+
+create_pack_2 () {
-+ P2=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P2=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $B
+ $C
+ $D
@@ -72,7 +72,7 @@
+}
+
+create_pack_3 () {
-+ P3=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P3=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $F
+ $I
+ $J
@@ -85,7 +85,7 @@
+}
+
+create_pack_4 () {
-+ P4=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P4=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $J
+ $K
+ $L
@@ -97,7 +97,7 @@
+}
+
+create_pack_5 () {
-+ P5=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P5=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $G
+ $H
+ $N
@@ -108,7 +108,7 @@
+}
+
+create_pack_6 () {
-+ P6=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P6=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $N
+ $O
+ $Q
@@ -118,7 +118,7 @@
+}
+
+create_pack_7 () {
-+ P7=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P7=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $P
+ $Q
+ EOF
@@ -127,18 +127,37 @@
+}
+
+create_pack_8 () {
-+ P8=$(git -C .git/objects/pack pack-objects -q pack <<-EOF
++ P8=$(git -C objects/pack pack-objects -q pack <<-EOF
+ $A
+ EOF
+ ) &&
+ eval P$P8=P8:$P8
+}
+
-+test_expect_success 'setup' '
++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 packs' '
++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
@@ -154,12 +173,7 @@
+
+test_expect_success 'one of pack-2/pack-3 is redundant' '
+ git pack-redundant --all >out &&
-+ sed \
-+ -e "s#.*/pack-\(.*\)\.idx#\1#" \
-+ -e "s#.*/pack-\(.*\)\.pack#\1#" out |
-+ sort -u |
-+ while read p; do eval echo "\${P$p}"; done |
-+ sort >actual &&
++ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
@@ -176,12 +190,7 @@
+
+test_expect_success 'pack 2, 4, and 6 are redundant' '
+ git pack-redundant --all >out &&
-+ sed \
-+ -e "s#.*/pack-\(.*\)\.idx#\1#" \
-+ -e "s#.*/pack-\(.*\)\.pack#\1#" out |
-+ sort -u |
-+ while read p; do eval echo "\${P$p}"; done |
-+ sort >actual &&
++ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
@@ -198,18 +207,13 @@
+
+test_expect_success 'pack-8 (subset of pack-1) is also redundant' '
+ git pack-redundant --all >out &&
-+ sed \
-+ -e "s#.*/pack-\(.*\)\.idx#\1#" \
-+ -e "s#.*/pack-\(.*\)\.pack#\1#" out |
-+ sort -u |
-+ while read p; do eval echo "\${P$p}"; done |
-+ sort >actual &&
++ format_packfiles <out >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'clean loose objects' '
+ git prune-packed &&
-+ find .git/objects -type f | sed -e "/objects\/pack\//d" >out &&
++ find objects -type f | sed -e "/objects\/pack\//d" >out &&
+ test_must_be_empty out
+'
+
@@ -220,4 +224,115 @@
+ 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: 520f6277fb pack-redundant: delay creation of unique_objects
2: e4e2c2884e ! 3: ab1c2c4950 pack-redundant: new algorithm to find min packs
@@ -64,6 +64,9 @@
4. Drop the duplicated objects from other packs in the ordered
non_unique pack list, and repeat step 3.
+ Some test cases will fail on Mac OS X. Mark them and will resolve in
+ later commit.
+
Original PR and discussions: https://github.com/jiangxin/git/pull/25
Signed-off-by: Sun Chao <sunchao9@huawei.com>
@@ -213,11 +216,61 @@
struct llist *ignore;
struct object_id *oid;
char buf[GIT_MAX_HEXSZ + 2]; /* hex hash + \n + \0 */
+
+ diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
+ --- a/t/t5323-pack-redundant.sh
+ +++ b/t/t5323-pack-redundant.sh
@@
- pl = local_packs;
- while (pl) {
- llist_sorted_difference_inplace(pl->unique_objects, ignore);
-+ llist_sorted_difference_inplace(pl->all_objects, ignore);
- pl = pl->next;
- }
+ P2:$P2
+ EOF
+
+-test_expect_success 'one of pack-2/pack-3 is redundant' '
++test_expect_failure 'one of pack-2/pack-3 is redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+@@
+ P6:$P6
+ EOF
+
+-test_expect_success 'pack 2, 4, and 6 are redundant' '
++test_expect_failure 'pack 2, 4, and 6 are redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+@@
+ P8:$P8
+ EOF
+
+-test_expect_success 'pack-8 (subset of pack-1) is also redundant' '
++test_expect_failure 'pack-8 (subset of pack-1) is also redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+@@
+ test_must_be_empty out
+ '
+
+-test_expect_success 'remove redundant packs and pass fsck' '
++test_expect_failure 'remove redundant packs and pass fsck' '
+ git pack-redundant --all | xargs rm &&
+ git fsck --no-progress &&
+ git pack-redundant --all >out &&
+@@
+ printf "../../master.git/objects" >objects/info/alternates
+ '
+
+-test_expect_success 'no redundant packs without --alt-odb' '
++test_expect_failure 'no redundant packs without --alt-odb' '
+ git pack-redundant --all >out &&
+ test_must_be_empty out
+ '
+@@
+ P7:$P7
+ EOF
+-test_expect_success 'pack-redundant --verbose: show duplicate packs in stderr' '
++test_expect_failure '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 &&
3: e60b134e66 = 4: 3c3a7ea40f pack-redundant: remove unused functions
4: cb7e0336fc ! 5: bc4b681f40 pack-redundant: rename pack_list.all_objects
@@ -20,6 +20,18 @@
} *local_packs = NULL, *altodb_packs = NULL;
static struct llist_item *free_nodes;
+@@
+ const unsigned int hashsz = the_hash_algo->rawsz;
+
+ if (!p1->unique_objects)
+- p1->unique_objects = llist_copy(p1->all_objects);
++ p1->unique_objects = llist_copy(p1->remaining_objects);
+ if (!p2->unique_objects)
+- p2->unique_objects = llist_copy(p2->all_objects);
++ p2->unique_objects = llist_copy(p2->remaining_objects);
+
+ p1_base = p1->pack->index_data;
+ p2_base = p2->pack->index_data;
@@
{
struct pack_list *pl_a = *((struct pack_list **)a);
@@ -94,10 +106,12 @@
}
}
@@
+ while (alt) {
local = local_packs;
while (local) {
- llist_sorted_difference_inplace(local->unique_objects,
+- llist_sorted_difference_inplace(local->all_objects,
- alt->all_objects);
++ llist_sorted_difference_inplace(local->remaining_objects,
+ alt->remaining_objects);
local = local->next;
}
@@ -123,16 +137,11 @@
+ llist_insert_back(l.remaining_objects, (const struct object_id *)(base + off));
off += step;
}
- /* this list will be pruned in cmp_two_packs later */
-- l.unique_objects = llist_copy(l.all_objects);
-+ l.unique_objects = llist_copy(l.remaining_objects);
- if (p->pack_local)
- return pack_list_insert(&local_packs, &l);
- else
+ l.unique_objects = NULL;
@@
+ llist_sorted_difference_inplace(all_objects, ignore);
pl = local_packs;
while (pl) {
- llist_sorted_difference_inplace(pl->unique_objects, ignore);
- llist_sorted_difference_inplace(pl->all_objects, ignore);
+ llist_sorted_difference_inplace(pl->remaining_objects, ignore);
pl = pl->next;
5: a338d10395 ! 6: 6cfba5b4b2 pack-redundant: consistent sort method
@@ -75,9 +75,9 @@
off += step;
}
+ l.all_objects_size = l.remaining_objects->size;
- /* this list will be pruned in cmp_two_packs later */
- l.unique_objects = llist_copy(l.remaining_objects);
+ l.unique_objects = NULL;
if (p->pack_local)
+ return pack_list_insert(&local_packs, &l);
diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
--- a/t/t5323-pack-redundant.sh
@@ -90,4 +90,53 @@
+P3:$P3
EOF
- test_expect_success 'one of pack-2/pack-3 is redundant' '
+-test_expect_failure 'one of pack-2/pack-3 is redundant' '
++test_expect_success 'one of pack-2/pack-3 is redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+@@
+ P6:$P6
+ EOF
+
+-test_expect_failure 'pack 2, 4, and 6 are redundant' '
++test_expect_success 'pack 2, 4, and 6 are redundant' '
+ git pack-redundant --all >out &&
+ format_packfiles <out >actual &&
+ test_cmp expected actual
+@@
+ P8:$P8
+ EOF
+
+-test_expect_failure 'pack-8 (subset of pack-1) is also redundant' '
++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_must_be_empty out
+ '
+
+-test_expect_failure 'remove redundant packs and pass fsck' '
++test_expect_success 'remove redundant packs and pass fsck' '
+ git pack-redundant --all | xargs rm &&
+ git fsck --no-progress &&
+ git pack-redundant --all >out &&
+@@
+ printf "../../master.git/objects" >objects/info/alternates
+ '
+
+-test_expect_failure 'no redundant packs without --alt-odb' '
++test_expect_success 'no redundant packs without --alt-odb' '
+ git pack-redundant --all >out &&
+ test_must_be_empty out
+ '
+@@
+ P7:$P7
+ EOF
+
+-test_expect_failure 'pack-redundant --verbose: show duplicate packs in stderr' '
++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 &&
--
Jiang Xin (4):
t5323: test cases for git-pack-redundant
pack-redundant: delay creation of unique_objects
pack-redundant: rename pack_list.all_objects
pack-redundant: consistent sort method
Sun Chao (2):
pack-redundant: new algorithm to find min packs
pack-redundant: remove unused functions
builtin/pack-redundant.c | 233 +++++++++++----------------
t/t5323-pack-redundant.sh | 322 ++++++++++++++++++++++++++++++++++++++
2 files changed, 415 insertions(+), 140 deletions(-)
create mode 100755 t/t5323-pack-redundant.sh
--
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 ` Jiang Xin [this message]
2019-02-01 16:21 ` [PATCH v9 0/6] " 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 ` [PATCH v7 1/6] t5323: test cases for git-pack-redundant Jiang Xin
2019-01-31 21:44 ` 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-1-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.