"Derrick Stolee via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Derrick Stolee <derrickstolee@xxxxxxxxxx> > > The --object-dir argument to 'git multi-pack-index' allows a user to > specify an alternate to use instead of the local $GITDIR. This is used > by third-party tools like VFS for Git to maintain the pack-files in a > "shared object cache" used by multiple clones. > > On Windows, the user can specify a path using a Windows-style file path > with backslashes such as "C:\Path\To\ObjectDir". This same path style is > used in the .git/objects/info/alternates file, so it already matches the > path of that alternate. However, find_odb() converts these paths to > real-paths for the comparison, which use forward slashes. As of the > previous change, lookup_multi_pack_index() uses real-paths, so it > correctly finds the target multi-pack-index when given these paths. > > Some commands such as 'git multi-pack-index repack' call child processes > using the object_dir value, so it can be helpful to convert the path to > the real-path before sending it to those locations. > > Add a callback to convert the real path immediately upon parsing the > argument. We need to be careful that we don't store the exact value out > of get_object_directory() and free it, or we could corrupt a later use > of the_repository->objects->odb->path. > > We don't use get_object_directory() for the initial instantiation in > cmd_multi_pack_index() because we need 'git multi-pack-index -h' to work > without a Git repository. > > Signed-off-by: Derrick Stolee <derrickstolee@xxxxxxxxxx> > --- > builtin/multi-pack-index.c | 45 ++++++++++++++++++++++++++++---------- > 1 file changed, 34 insertions(+), 11 deletions(-) Much nicer compared to the previous round, by doing the normalization early. Will queue. thanks.