[RFC PATCH v4 00/19] Sparse checkout
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Aug 20, 2009, 13:46 UTC
- Message-ID
- <1250776033-12395-1-git-send-email-pclouds@gmail.com>
Welcome to the fourth round of sparse checkout this year, dubbed "The mummy^W^W^W^W^Wno-checkout returns", although the bit now comes under a new name "skip-worktree" [1]. This series has two parts: sparse worktree and sparse checkout. Details will be given below.
For brave users of this series: I have pushed it to my sparse-checkout branch [2] so you can just clone it and test away. Visible changes:
- the spec is now .git/info/sparse-checkout - the spec is positive matching, that is it matches what _is_ in worktree, not what is out of worktree like the last series - you need to set core.sparsecheckout no additional command argument is needed.
Except from running tests, I have only used it a little bit, so be careful, it may burn your trees.
Nguyá» n Thái Ngá»c Duy (8): update-index: refactor mark_valid() in preparation for new options Add test-index-version Introduce "skip-worktree" bit in index, teach Git to get/set this bit Teach Git to respect skip-worktree bit (reading part) Teach Git to respect skip-worktree bit (writing part) Avoid writing to buffer in add_excludes_from_file_1() Read .gitignore from index if it is skip-worktree unpack-trees(): carry skip-worktree bit over in merged_entry()
The three main patches in this part are 3, 4 and 5, which define how "skip-worktree" should work (and I'd love to have feedback whether I get it right) and implement it.
.gitignore patches are from last series and do not change much.
Nguyá»
n Thái Ngá»c Duy (11):
excluded_1(): support exclude files in index
dir.c: export excluded_1() and add_excludes_from_file_1()
Introduce "sparse checkout"
unpack-trees(): add CE_WT_REMOVE to remove on worktree alone
unpack-trees.c: generalize verify_* functions
unpack-trees(): "enable" sparse checkout and load
$GIT_DIR/info/sparse-checkout
unpack_trees(): apply $GIT_DIR/info/sparse-checkout to the final
index
unpack-trees(): ignore worktree check outside checkout area
read-tree: add --no-sparse-checkout to disable sparse checkout
support
Add tests for sparse checkout
sparse checkout: inhibit empty worktreeThe recent assume-unchanged "breakage" that lets Git overwrite assume-unchanged files worried me. I sat back, checked and wrote tests to catch similar situations. As a result, core sparse checkout code becomes more complicated and is splitted into smaller parts for easier read.
Interesting patches are 11/19 (OK not that interesting, it's just boring text), 14/19-16/19. Patch 18/19 also covers "foo" vs "foo/" matching bug in tests.
[1] There are a few reasons behind this rename: - there is nothing about "checkout" in the first part, it's about "sparse worktree" - the double negation issue with "no-" part of "no-checkout" - new name makes cache.h diff align beautifully
[2] http://repo.or.cz/w/git/pclouds.git?a=shortlog;h=refs/heads/sparse-checkout
.gitignore | 1 + Documentation/config.txt | 4 + Documentation/git-ls-files.txt | 1 + Documentation/git-read-tree.txt | 52 ++++++- Documentation/git-update-index.txt | 29 ++++ Documentation/technical/api-directory-listing.txt | 3 + Makefile | 1 + builtin-clean.c | 4 +- builtin-commit.c | 5 + builtin-grep.c | 2 +- builtin-ls-files.c | 11 +- builtin-read-tree.c | 4 +- builtin-update-index.c | 78 ++++++---- cache.h | 8 +- config.c | 5 + diff-lib.c | 5 +- diff.c | 2 +- dir.c | 100 ++++++++---- dir.h | 4 + environment.c | 1 + read-cache.c | 8 +- t/t1009-read-tree-sparse-checkout.sh | 150 ++++++++++++++++++ t/t2104-update-index-skip-worktree.sh | 57 +++++++ t/t3001-ls-files-others-exclude.sh | 22 +++ t/t7011-skip-worktree-reading.sh | 163 +++++++++++++++++++ t/t7012-skip-worktree-writing.sh | 146 +++++++++++++++++ t/t7300-clean.sh | 19 +++ test-index-version.c | 14 ++ unpack-trees.c | 175 +++++++++++++++++++-- unpack-trees.h | 6 + 30 files changed, 983 insertions(+), 97 deletions(-) create mode 100755 t/t1009-read-tree-sparse-checkout.sh create mode 100755 t/t2104-update-index-skip-worktree.sh create mode 100755 t/t7011-skip-worktree-reading.sh create mode 100755 t/t7012-skip-worktree-writing.sh create mode 100644 test-index-version.c