diff options
| author | Patrick Steinhardt <ps@pks.im> | 2025-04-29 09:52:17 +0200 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2025-04-29 10:08:12 -0700 |
| commit | 0b8ed25b66aedc9f4fe44d1a5cab2719290b22a9 (patch) | |
| tree | 65a7f303e6d38747541900fc449abc43288a70a1 /path.c | |
| parent | object-store: drop `loose_object_path()` (diff) | |
| download | git-0b8ed25b66aedc9f4fe44d1a5cab2719290b22a9.tar.gz git-0b8ed25b66aedc9f4fe44d1a5cab2719290b22a9.zip | |
object-store: move and rename `odb_pack_keep()`
The function `odb_pack_keep()` creates a file at the passed-in path. If
this fails, then the function re-tries by first creating any potentially
missing leading directories and then trying to create the file once
again. As such, this function doesn't host any kind of logic that is
specific to the object store, but is rather a generic helper function.
Rename the function to `safe_create_file_with_leading_directories()` and
move it into "path.c". While at it, refactor it so that it loses its
dependency on `the_repository`.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'path.c')
| -rw-r--r-- | path.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -1011,6 +1011,20 @@ enum scld_error safe_create_leading_directories_const(struct repository *repo, return result; } +int safe_create_file_with_leading_directories(struct repository *repo, + const char *path) +{ + int fd; + + fd = open(path, O_RDWR|O_CREAT|O_EXCL, 0600); + if (0 <= fd) + return fd; + + /* slow path */ + safe_create_leading_directories_const(repo, path); + return open(path, O_RDWR|O_CREAT|O_EXCL, 0600); +} + static int have_same_root(const char *path1, const char *path2) { int is_abs1, is_abs2; |
