mirror of
https://github.com/git/git.git
synced 2026-01-09 17:46:37 +00:00
object-file: move safe_create_leading_directories() into "path.c"
The `safe_create_leading_directories()` function and its relatives are located in "object-file.c", which is not a good fit as they provide generic functionality not related to objects at all. Move them into "path.c", which already hosts `safe_create_dir()` and its relative `safe_create_dir_in_gitdir()`. "path.c" is free of `the_repository`, but the moved functions depend on `the_repository` to read the "core.sharedRepository" config. Adapt the function signature to accept a repository as argument to fix the issue and adjust callers accordingly. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
d1fa670de0
commit
1a99fe8010
34
path.h
34
path.h
@@ -232,6 +232,40 @@ void safe_create_dir(struct repository *repo, const char *dir, int share);
|
||||
*/
|
||||
int safe_create_dir_in_gitdir(struct repository *repo, const char *path);
|
||||
|
||||
/*
|
||||
* Create the directory containing the named path, using care to be
|
||||
* somewhat safe against races. Return one of the scld_error values to
|
||||
* indicate success/failure. On error, set errno to describe the
|
||||
* problem.
|
||||
*
|
||||
* SCLD_VANISHED indicates that one of the ancestor directories of the
|
||||
* path existed at one point during the function call and then
|
||||
* suddenly vanished, probably because another process pruned the
|
||||
* directory while we were working. To be robust against this kind of
|
||||
* race, callers might want to try invoking the function again when it
|
||||
* returns SCLD_VANISHED.
|
||||
*
|
||||
* safe_create_leading_directories() temporarily changes path while it
|
||||
* is working but restores it before returning.
|
||||
* safe_create_leading_directories_const() doesn't modify path, even
|
||||
* temporarily. Both these variants adjust the permissions of the
|
||||
* created directories to honor core.sharedRepository, so they are best
|
||||
* suited for files inside the git dir. For working tree files, use
|
||||
* safe_create_leading_directories_no_share() instead, as it ignores
|
||||
* the core.sharedRepository setting.
|
||||
*/
|
||||
enum scld_error {
|
||||
SCLD_OK = 0,
|
||||
SCLD_FAILED = -1,
|
||||
SCLD_PERMS = -2,
|
||||
SCLD_EXISTS = -3,
|
||||
SCLD_VANISHED = -4
|
||||
};
|
||||
enum scld_error safe_create_leading_directories(struct repository *repo, char *path);
|
||||
enum scld_error safe_create_leading_directories_const(struct repository *repo,
|
||||
const char *path);
|
||||
enum scld_error safe_create_leading_directories_no_share(char *path);
|
||||
|
||||
# ifdef USE_THE_REPOSITORY_VARIABLE
|
||||
# include "strbuf.h"
|
||||
# include "repository.h"
|
||||
|
||||
Reference in New Issue
Block a user