The previous round was at <20171210212202.28231-1-t.gummerer@xxxxxxxxx>. Thanks Brandon, Eric, Szeder, Lars and Junio for the comments on the previous round. Changes since the previous round: - pass in the_repository to do_read_index_from, so we don't have to special case NULL anymore. - free struct repository properly after allocating it in revision.c - run the travis tests in the linux-gcc and linux 32-bit builds, to avoid clashes with the GETTEXT_POISON tests. The travis tests now depend on sg/travis-fixes, as running the split index tests separately gets simplified with the introduction of the '$jobname' variable. The script falls back gracefully to not runing the split index test under linux with gcc and only running the "normal" tests there, while the split index tests would still get run in the linux 32-bit build. Because it's a "soft" dependency I thought having this dependency would be okay, but let me know if you it's getting to complicated and we can use the environment variables set by travis for now, and then switch to the '$jobname' variable when it's merged to next/master. I kept the usage of struct repository for worktrees, as I didn't hear anything back after my last reply in <20171211213948.GC25616@hank>, and don't see a better way of doing it. Interdiff below: diff --git a/.travis.yml b/.travis.yml index c83c766dee..281f101f31 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ env: matrix: include: - - env: GETTEXT_POISON=YesPlease GIT_TEST_SPLIT_INDEX=YesPlease + - env: GETTEXT_POISON=YesPlease os: linux compiler: addons: diff --git a/ci/run-linux32-build.sh b/ci/run-linux32-build.sh index e30fb2cddc..f173c9cf2a 100755 --- a/ci/run-linux32-build.sh +++ b/ci/run-linux32-build.sh @@ -27,4 +27,5 @@ linux32 --32bit i386 su -m -l $CI_USER -c ' cd /usr/src/git && make --jobs=2 && make --quiet test + GIT_TEST_SPLIT_INDEX=YesPlease make --quiet test ' diff --git a/ci/run-tests.sh b/ci/run-tests.sh index f0c743de94..c7aee5b9ff 100755 --- a/ci/run-tests.sh +++ b/ci/run-tests.sh @@ -8,3 +8,7 @@ mkdir -p $HOME/travis-cache ln -s $HOME/travis-cache/.prove t/.prove make --quiet test +if test "$jobname" = "linux-gcc" +then + GIT_TEST_SPLIT_INDEX=YesPlease make --quiet test +fi diff --git a/read-cache.c b/read-cache.c index 4d5c4ad79b..70357febdc 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1898,10 +1898,7 @@ static int do_read_index_from(struct index_state *istate, const char *path, split_index->base = xcalloc(1, sizeof(*split_index->base)); base_sha1_hex = sha1_to_hex(split_index->base_sha1); - if (repo) - base_path = repo_git_path(repo, "sharedindex.%s", base_sha1_hex); - else - base_path = git_path("sharedindex.%s", base_sha1_hex); + base_path = repo_git_path(repo, "sharedindex.%s", base_sha1_hex); ret = do_read_index(split_index->base, base_path, 1); if (hashcmp(split_index->base_sha1, split_index->base->sha1)) die("broken index, expect %s in %s, got %s", @@ -1921,7 +1918,7 @@ int read_index_for_repo(const struct repository *repo) int read_index_from(struct index_state *istate, const char *path) { - return do_read_index_from(istate, path, NULL); + return do_read_index_from(istate, path, the_repository); } int is_index_unborn(struct index_state *istate) diff --git a/revision.c b/revision.c index 9d8d9b96d1..34e1e4b799 100644 --- a/revision.c +++ b/revision.c @@ -1358,6 +1358,7 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) if (repo_read_index(repo) > 0) do_add_index_objects_to_pending(revs, repo->index); discard_index(repo->index); + free(repo); } free_worktrees(worktrees); } Thomas Gummerer (3): repository: fix repo_read_index with submodules prune: fix pruning with multiple worktrees and split index travis: run tests with GIT_TEST_SPLIT_INDEX cache.h | 1 + ci/run-linux32-build.sh | 1 + ci/run-tests.sh | 1 + read-cache.c | 16 ++++++++++++++-- repository.c | 13 ++++++++++++- repository.h | 2 ++ revision.c | 14 +++++++++----- 7 files changed, 40 insertions(+), 8 deletions(-) -- 2.15.1.620.gb9897f4670