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-date
|
||||||
/test-delta
|
/test-delta
|
||||||
/test-dump-cache-tree
|
/test-dump-cache-tree
|
||||||
|
/test-dump-split-index
|
||||||
/test-scrap-cache-tree
|
/test-scrap-cache-tree
|
||||||
/test-genrandom
|
/test-genrandom
|
||||||
/test-hashmap
|
/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-date
|
||||||
TEST_PROGRAMS_NEED_X += test-delta
|
TEST_PROGRAMS_NEED_X += test-delta
|
||||||
TEST_PROGRAMS_NEED_X += test-dump-cache-tree
|
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-genrandom
|
||||||
TEST_PROGRAMS_NEED_X += test-hashmap
|
TEST_PROGRAMS_NEED_X += test-hashmap
|
||||||
TEST_PROGRAMS_NEED_X += test-index-version
|
TEST_PROGRAMS_NEED_X += test-index-version
|
||||||
|
2
cache.h
2
cache.h
@ -473,6 +473,8 @@ extern int daemonize(void);
|
|||||||
struct lock_file;
|
struct lock_file;
|
||||||
extern int read_index(struct index_state *);
|
extern int read_index(struct index_state *);
|
||||||
extern int read_index_preload(struct index_state *, const struct pathspec *pathspec);
|
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 read_index_from(struct index_state *, const char *path);
|
||||||
extern int is_index_unborn(struct index_state *);
|
extern int is_index_unborn(struct index_state *);
|
||||||
extern int read_index_unmerged(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! */
|
/* remember to discard_cache() before reading a different cache! */
|
||||||
static int do_read_index(struct index_state *istate, const char *path,
|
int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
||||||
int must_exist)
|
|
||||||
{
|
{
|
||||||
int fd, i;
|
int fd, i;
|
||||||
struct stat st;
|
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