[PATCH 17/27] dir.c: accept a directory as part of cone-mode patterns
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jan 25, 2021, 17:42 UTC
- Message-ID
- <036653cac368c6c04b439f5352d70a5dcc3c5feb.1611596534.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.847.git.1611596533.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>
When we have sparse directory entries in the index, we want to compare that directory against sparse-checkout patterns. Those pattern matching algorithms are built expecting a file path, not a directory path. This is especially important in the "cone mode" patterns which will match files that exist within the "parent directories" as well as the recursive directory matches.
If path_matches_pattern_list() is given a directory, we can add a bogus filename ("-") to the directory and get the same results as before, assuming we are in cone mode. Since sparse index requires cone mode patterns, this is an acceptable assumption.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com> --- dir.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/dir.c b/dir.c index ad6eb033cb1..c786fa98d0e 100644 --- a/dir.c +++ b/dir.c @@ -1384,6 +1384,11 @@ enum pattern_match_result path_matches_pattern_list( strbuf_addch(&parent_pathname, '/'); strbuf_add(&parent_pathname, pathname, pathlen); + /* Directory requests should be added as if they are a file */ + if (parent_pathname.len > 1 && + parent_pathname.buf[parent_pathname.len - 1] == '/') + strbuf_add(&parent_pathname, "-", 1); + if (hashmap_contains_path(&pl->recursive_hashmap, &parent_pathname)) { result = MATCHED_RECURSIVE;
-- gitgitgadget