t1700: new tests for split-index mode
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5b0a78c1c0
commit
3e52f70b15
1
.gitignore
vendored
1
.gitignore
vendored
@ -180,6 +180,7 @@
|
||||
/test-date
|
||||
/test-delta
|
||||
/test-dump-cache-tree
|
||||
/test-dump-split-index
|
||||
/test-scrap-cache-tree
|
||||
/test-genrandom
|
||||
/test-hashmap
|
||||
|
1
Makefile
1
Makefile
@ -565,6 +565,7 @@ TEST_PROGRAMS_NEED_X += test-ctype
|
||||
TEST_PROGRAMS_NEED_X += test-date
|
||||
TEST_PROGRAMS_NEED_X += test-delta
|
||||
TEST_PROGRAMS_NEED_X += test-dump-cache-tree
|
||||
TEST_PROGRAMS_NEED_X += test-dump-split-index
|
||||
TEST_PROGRAMS_NEED_X += test-genrandom
|
||||
TEST_PROGRAMS_NEED_X += test-hashmap
|
||||
TEST_PROGRAMS_NEED_X += test-index-version
|
||||
|
2
cache.h
2
cache.h
@ -473,6 +473,8 @@ extern int daemonize(void);
|
||||
struct lock_file;
|
||||
extern int read_index(struct index_state *);
|
||||
extern int read_index_preload(struct index_state *, const struct pathspec *pathspec);
|
||||
extern int do_read_index(struct index_state *istate, const char *path,
|
||||
int must_exist); /* for testting only! */
|
||||
extern int read_index_from(struct index_state *, const char *path);
|
||||
extern int is_index_unborn(struct index_state *);
|
||||
extern int read_index_unmerged(struct index_state *);
|
||||
|
@ -1463,8 +1463,7 @@ static struct cache_entry *create_from_disk(struct ondisk_cache_entry *ondisk,
|
||||
}
|
||||
|
||||
/* remember to discard_cache() before reading a different cache! */
|
||||
static int do_read_index(struct index_state *istate, const char *path,
|
||||
int must_exist)
|
||||
int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
||||
{
|
||||
int fd, i;
|
||||
struct stat st;
|
||||
|
194
t/t1700-split-index.sh
Executable file
194
t/t1700-split-index.sh
Executable file
@ -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
|
34
test-dump-split-index.c
Normal file
34
test-dump-split-index.c
Normal file
@ -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
Block a user