Browse Source
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Nguyễn Thái Ngọc Duy
11 years ago
committed by
Junio C Hamano
6 changed files with 233 additions and 2 deletions
@ -0,0 +1,194 @@
@@ -0,0 +1,194 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='split index mode tests' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
# We need total control of index splitting here |
||||
sane_unset GIT_TEST_SPLIT_INDEX |
||||
|
||||
test_expect_success 'enable split index' ' |
||||
git update-index --split-index && |
||||
test-dump-split-index .git/index >actual && |
||||
cat >expect <<EOF && |
||||
own 8299b0bcd1ac364e5f1d7768efb62fa2da79a339 |
||||
base 39d890139ee5356c7ef572216cebcd27aa41f9df |
||||
replacements: |
||||
deletions: |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'add one file' ' |
||||
: >one && |
||||
git update-index --add one && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
cat >expect <<EOF && |
||||
base 39d890139ee5356c7ef572216cebcd27aa41f9df |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
replacements: |
||||
deletions: |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'disable split index' ' |
||||
git update-index --no-split-index && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
BASE=`test-dump-split-index .git/index | grep "^own" | sed "s/own/base/"` && |
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
cat >expect <<EOF && |
||||
not a split index |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'enable split index again, "one" now belongs to base index"' ' |
||||
git update-index --split-index && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
cat >expect <<EOF && |
||||
$BASE |
||||
replacements: |
||||
deletions: |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'modify original file, base index untouched' ' |
||||
echo modified >one && |
||||
git update-index one && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
q_to_tab >expect <<EOF && |
||||
$BASE |
||||
100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q |
||||
replacements: 0 |
||||
deletions: |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'add another file, which stays index' ' |
||||
: >two && |
||||
git update-index --add two && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
q_to_tab >expect <<EOF && |
||||
$BASE |
||||
100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two |
||||
replacements: 0 |
||||
deletions: |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'remove file not in base index' ' |
||||
git update-index --force-remove two && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
q_to_tab >expect <<EOF && |
||||
$BASE |
||||
100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q |
||||
replacements: 0 |
||||
deletions: |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'remove file in base index' ' |
||||
git update-index --force-remove one && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
cat >expect <<EOF && |
||||
$BASE |
||||
replacements: |
||||
deletions: 0 |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'add original file back' ' |
||||
: >one && |
||||
git update-index --add one && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual && |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
cat >expect <<EOF && |
||||
$BASE |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
replacements: |
||||
deletions: 0 |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'add new file' ' |
||||
: >two && |
||||
git update-index --add two && |
||||
git ls-files --stage >actual && |
||||
cat >expect <<EOF && |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'unify index, two files remain' ' |
||||
git update-index --no-split-index && |
||||
git ls-files --stage >ls-files.actual && |
||||
cat >ls-files.expect <<EOF && |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one |
||||
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two |
||||
EOF |
||||
test_cmp ls-files.expect ls-files.actual |
||||
|
||||
test-dump-split-index .git/index | sed "/^own/d" >actual && |
||||
cat >expect <<EOF && |
||||
not a split index |
||||
EOF |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_done |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
#include "cache.h" |
||||
#include "split-index.h" |
||||
#include "ewah/ewok.h" |
||||
|
||||
static void show_bit(size_t pos, void *data) |
||||
{ |
||||
printf(" %d", (int)pos); |
||||
} |
||||
|
||||
int main(int ac, char **av) |
||||
{ |
||||
struct split_index *si; |
||||
int i; |
||||
|
||||
do_read_index(&the_index, av[1], 1); |
||||
printf("own %s\n", sha1_to_hex(the_index.sha1)); |
||||
si = the_index.split_index; |
||||
if (!si) { |
||||
printf("not a split index\n"); |
||||
return 0; |
||||
} |
||||
printf("base %s\n", sha1_to_hex(si->base_sha1)); |
||||
for (i = 0; i < the_index.cache_nr; i++) { |
||||
struct cache_entry *ce = the_index.cache[i]; |
||||
printf("%06o %s %d\t%s\n", ce->ce_mode, |
||||
sha1_to_hex(ce->sha1), ce_stage(ce), ce->name); |
||||
} |
||||
printf("replacements:"); |
||||
ewah_each_bit(si->replace_bitmap, show_bit, NULL); |
||||
printf("\ndeletions:"); |
||||
ewah_each_bit(si->delete_bitmap, show_bit, NULL); |
||||
printf("\n"); |
||||
return 0; |
||||
} |
Loading…
Reference in new issue