In commit 45f24e78 (git_repository_init: stop traversing at windows root, 2019-04-12), we have fixed `git_futils_mkdir` to correctly handle the case where we create a directory in Windows-style filesystem roots like "C:\repo". The problem here is an off-by-one: previously, to that commit, we've been checking wether the parent directory's length is equal to the root directory's length incremented by one. When we call the function with "/example", then the parent directory's length ("/") is 1, but the root directory offset is 0 as the path is directly rooted without a drive prefix. This resulted in `1 == 0 + 1`, which was true. With the change, we've stopped incrementing the root directory length, and thus now compare `1 <= 0`, which is false. The previous way of doing it was kind of finicky any non-obvious, which is also why the error was introduced. So instead of just re-adding the increment, let's explicitly add a condition that aborts finding the parent if the current parent path is "/". Making this change causes Azure Pipelines to fail the testcase repo::init::nonexistent_paths on Unix-based systems. This is because we have just fixed creating directories in the filesystem root, which previously didn't work. As Docker-based tests are running as root user, we are thus able to create the non-existing path and will now succeed to create the repository that was expected to actually fail. Let's split this up into three different tests: - A test to verify that we do not create repos in a non-existing parent directoy if the flag `GIT_REPOSITORY_INIT_MKPATH` is not set. - A test to verify that we fail if the root directory does not exist. As there is a common root directory on Unix-based systems that always exist, we can only test for this on Windows-based systems. - A test to verify that we fail if trying to create a repository in an unwriteable parent directory. We can only test this if not running tests as root user, as CAP_DAC_OVERRIDE will cause us to ignore permissions when creating files.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| allocators | Loading commit data... | |
| hash | Loading commit data... | |
| streams | Loading commit data... | |
| transports | Loading commit data... | |
| unix | Loading commit data... | |
| win32 | Loading commit data... | |
| xdiff | Loading commit data... | |
| CMakeLists.txt | Loading commit data... | |
| alloc.c | Loading commit data... | |
| alloc.h | Loading commit data... | |
| annotated_commit.c | Loading commit data... | |
| annotated_commit.h | Loading commit data... | |
| apply.c | Loading commit data... | |
| apply.h | Loading commit data... | |
| array.h | Loading commit data... | |
| attr.c | Loading commit data... | |
| attr.h | Loading commit data... | |
| attr_file.c | Loading commit data... | |
| attr_file.h | Loading commit data... | |
| attrcache.c | Loading commit data... | |
| attrcache.h | Loading commit data... | |
| bitvec.h | Loading commit data... | |
| blame.c | Loading commit data... | |
| blame.h | Loading commit data... | |
| blame_git.c | Loading commit data... | |
| blame_git.h | Loading commit data... | |
| blob.c | Loading commit data... | |
| blob.h | Loading commit data... | |
| branch.c | Loading commit data... | |
| branch.h | Loading commit data... | |
| buf_text.c | Loading commit data... | |
| buf_text.h | Loading commit data... | |
| buffer.c | Loading commit data... | |
| buffer.h | Loading commit data... | |
| cache.c | Loading commit data... | |
| cache.h | Loading commit data... | |
| cc-compat.h | Loading commit data... | |
| checkout.c | Loading commit data... | |
| checkout.h | Loading commit data... | |
| cherrypick.c | Loading commit data... | |
| clone.c | Loading commit data... | |
| clone.h | Loading commit data... | |
| commit.c | Loading commit data... | |
| commit.h | Loading commit data... | |
| commit_list.c | Loading commit data... | |
| commit_list.h | Loading commit data... | |
| common.h | Loading commit data... | |
| config.c | Loading commit data... | |
| config.h | Loading commit data... | |
| config_backend.h | Loading commit data... | |
| config_cache.c | Loading commit data... | |
| config_entries.c | Loading commit data... | |
| config_entries.h | Loading commit data... | |
| config_file.c | Loading commit data... | |
| config_mem.c | Loading commit data... | |
| config_parse.c | Loading commit data... | |
| config_parse.h | Loading commit data... | |
| crlf.c | Loading commit data... | |
| date.c | Loading commit data... | |
| delta.c | Loading commit data... | |
| delta.h | Loading commit data... | |
| describe.c | Loading commit data... | |
| diff.c | Loading commit data... | |
| diff.h | Loading commit data... | |
| diff_driver.c | Loading commit data... | |
| diff_driver.h | Loading commit data... | |
| diff_file.c | Loading commit data... | |
| diff_file.h | Loading commit data... | |
| diff_generate.c | Loading commit data... | |
| diff_generate.h | Loading commit data... | |
| diff_parse.c | Loading commit data... | |
| diff_parse.h | Loading commit data... | |
| diff_print.c | Loading commit data... | |
| diff_stats.c | Loading commit data... | |
| diff_tform.c | Loading commit data... | |
| diff_tform.h | Loading commit data... | |
| diff_xdiff.c | Loading commit data... | |
| diff_xdiff.h | Loading commit data... | |
| errors.c | Loading commit data... | |
| errors.h | Loading commit data... | |
| features.h.in | Loading commit data... | |
| fetch.c | Loading commit data... | |
| fetch.h | Loading commit data... | |
| fetchhead.c | Loading commit data... | |
| fetchhead.h | Loading commit data... | |
| filebuf.c | Loading commit data... | |
| filebuf.h | Loading commit data... | |
| fileops.c | Loading commit data... | |
| fileops.h | Loading commit data... | |
| filter.c | Loading commit data... | |
| filter.h | Loading commit data... | |
| global.c | Loading commit data... | |
| global.h | Loading commit data... | |
| graph.c | Loading commit data... | |
| hash.c | Loading commit data... | |
| hash.h | Loading commit data... | |
| hashsig.c | Loading commit data... | |
| ident.c | Loading commit data... | |
| idxmap.c | Loading commit data... | |
| idxmap.h | Loading commit data... | |
| ignore.c | Loading commit data... | |
| ignore.h | Loading commit data... | |
| index.c | Loading commit data... | |
| index.h | Loading commit data... | |
| indexer.c | Loading commit data... | |
| indexer.h | Loading commit data... | |
| integer.h | Loading commit data... | |
| iterator.c | Loading commit data... | |
| iterator.h | Loading commit data... | |
| khash.h | Loading commit data... | |
| mailmap.c | Loading commit data... | |
| mailmap.h | Loading commit data... | |
| map.h | Loading commit data... | |
| merge.c | Loading commit data... | |
| merge.h | Loading commit data... | |
| merge_driver.c | Loading commit data... | |
| merge_driver.h | Loading commit data... | |
| merge_file.c | Loading commit data... | |
| message.c | Loading commit data... | |
| message.h | Loading commit data... | |
| mwindow.c | Loading commit data... | |
| mwindow.h | Loading commit data... | |
| net.c | Loading commit data... | |
| net.h | Loading commit data... | |
| netops.c | Loading commit data... | |
| netops.h | Loading commit data... | |
| notes.c | Loading commit data... | |
| notes.h | Loading commit data... | |
| object.c | Loading commit data... | |
| object.h | Loading commit data... | |
| object_api.c | Loading commit data... | |
| odb.c | Loading commit data... | |
| odb.h | Loading commit data... | |
| odb_loose.c | Loading commit data... | |
| odb_mempack.c | Loading commit data... | |
| odb_pack.c | Loading commit data... | |
| offmap.c | Loading commit data... | |
| offmap.h | Loading commit data... | |
| oid.c | Loading commit data... | |
| oid.h | Loading commit data... | |
| oidarray.c | Loading commit data... | |
| oidarray.h | Loading commit data... | |
| oidmap.c | Loading commit data... | |
| oidmap.h | Loading commit data... | |
| pack-objects.c | Loading commit data... | |
| pack-objects.h | Loading commit data... | |
| pack.c | Loading commit data... | |
| pack.h | Loading commit data... | |
| parse.c | Loading commit data... | |
| parse.h | Loading commit data... | |
| patch.c | Loading commit data... | |
| patch.h | Loading commit data... | |
| patch_generate.c | Loading commit data... | |
| patch_generate.h | Loading commit data... | |
| patch_parse.c | Loading commit data... | |
| patch_parse.h | Loading commit data... | |
| path.c | Loading commit data... | |
| path.h | Loading commit data... | |
| pathspec.c | Loading commit data... | |
| pathspec.h | Loading commit data... | |
| pool.c | Loading commit data... | |
| pool.h | Loading commit data... | |
| posix.c | Loading commit data... | |
| posix.h | Loading commit data... | |
| posix_regex.h | Loading commit data... | |
| pqueue.c | Loading commit data... | |
| pqueue.h | Loading commit data... | |
| proxy.c | Loading commit data... | |
| proxy.h | Loading commit data... | |
| push.c | Loading commit data... | |
| push.h | Loading commit data... | |
| reader.c | Loading commit data... | |
| reader.h | Loading commit data... | |
| rebase.c | Loading commit data... | |
| refdb.c | Loading commit data... | |
| refdb.h | Loading commit data... | |
| refdb_fs.c | Loading commit data... | |
| refdb_fs.h | Loading commit data... | |
| reflog.c | Loading commit data... | |
| reflog.h | Loading commit data... | |
| refs.c | Loading commit data... | |
| refs.h | Loading commit data... | |
| refspec.c | Loading commit data... | |
| refspec.h | Loading commit data... | |
| remote.c | Loading commit data... | |
| remote.h | Loading commit data... | |
| repo_template.h | Loading commit data... | |
| repository.c | Loading commit data... | |
| repository.h | Loading commit data... | |
| reset.c | Loading commit data... | |
| revert.c | Loading commit data... | |
| revparse.c | Loading commit data... | |
| revwalk.c | Loading commit data... | |
| revwalk.h | Loading commit data... | |
| settings.c | Loading commit data... | |
| sha1_lookup.c | Loading commit data... | |
| sha1_lookup.h | Loading commit data... | |
| signature.c | Loading commit data... | |
| signature.h | Loading commit data... | |
| sortedcache.c | Loading commit data... | |
| sortedcache.h | Loading commit data... | |
| stash.c | Loading commit data... | |
| status.c | Loading commit data... | |
| status.h | Loading commit data... | |
| stream.h | Loading commit data... | |
| strmap.c | Loading commit data... | |
| strmap.h | Loading commit data... | |
| strnlen.h | Loading commit data... | |
| submodule.c | Loading commit data... | |
| submodule.h | Loading commit data... | |
| sysdir.c | Loading commit data... | |
| sysdir.h | Loading commit data... | |
| tag.c | Loading commit data... | |
| tag.h | Loading commit data... | |
| thread-utils.c | Loading commit data... | |
| thread-utils.h | Loading commit data... | |
| trace.c | Loading commit data... | |
| trace.h | Loading commit data... | |
| trailer.c | Loading commit data... | |
| transaction.c | Loading commit data... | |
| transaction.h | Loading commit data... | |
| transport.c | Loading commit data... | |
| tree-cache.c | Loading commit data... | |
| tree-cache.h | Loading commit data... | |
| tree.c | Loading commit data... | |
| tree.h | Loading commit data... | |
| tsort.c | Loading commit data... | |
| userdiff.h | Loading commit data... | |
| util.c | Loading commit data... | |
| util.h | Loading commit data... | |
| varint.c | Loading commit data... | |
| varint.h | Loading commit data... | |
| vector.c | Loading commit data... | |
| vector.h | Loading commit data... | |
| wildmatch.c | Loading commit data... | |
| wildmatch.h | Loading commit data... | |
| worktree.c | Loading commit data... | |
| worktree.h | Loading commit data... | |
| zstream.c | Loading commit data... | |
| zstream.h | Loading commit data... |