Skip to content

Commit 1a99fe8

Browse files
pks-tgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d1fa670 commit 1a99fe8

27 files changed

+173
-167
lines changed

builtin/bugreport.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
#include "editor.h"
55
#include "gettext.h"
66
#include "parse-options.h"
7+
#include "path.h"
78
#include "strbuf.h"
89
#include "help.h"
910
#include "compat/compiler.h"
1011
#include "hook.h"
1112
#include "hook-list.h"
1213
#include "diagnose.h"
13-
#include "object-file.h"
1414
#include "setup.h"
1515
#include "version.h"
1616

@@ -141,7 +141,7 @@ int cmd_bugreport(int argc,
141141
}
142142
strbuf_addstr(&report_path, ".txt");
143143

144-
switch (safe_create_leading_directories(report_path.buf)) {
144+
switch (safe_create_leading_directories(the_repository, report_path.buf)) {
145145
case SCLD_OK:
146146
case SCLD_EXISTS:
147147
break;

builtin/clone.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ int cmd_clone(int argc,
10901090
sigchain_push_common(remove_junk_on_signal);
10911091

10921092
if (!option_bare) {
1093-
if (safe_create_leading_directories_const(work_tree) < 0)
1093+
if (safe_create_leading_directories_const(the_repository, work_tree) < 0)
10941094
die_errno(_("could not create leading directories of '%s'"),
10951095
work_tree);
10961096
if (dest_exists)
@@ -1111,7 +1111,7 @@ int cmd_clone(int argc,
11111111
junk_git_dir_flags |= REMOVE_DIR_KEEP_TOPLEVEL;
11121112
junk_git_dir = git_dir;
11131113
}
1114-
if (safe_create_leading_directories_const(git_dir) < 0)
1114+
if (safe_create_leading_directories_const(the_repository, git_dir) < 0)
11151115
die(_("could not create leading directories of '%s'"), git_dir);
11161116

11171117
if (0 <= option_verbosity) {

builtin/credential-cache--daemon.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include "builtin.h"
33
#include "abspath.h"
44
#include "gettext.h"
5-
#include "object-file.h"
65
#include "parse-options.h"
6+
#include "path.h"
77

88
#ifndef NO_UNIX_SOCKETS
99

@@ -271,7 +271,7 @@ static void init_socket_directory(const char *path)
271271
* condition in which somebody can chdir to it, sleep, then try to open
272272
* our protected socket.
273273
*/
274-
if (safe_create_leading_directories_const(dir) < 0)
274+
if (safe_create_leading_directories_const(the_repository, dir) < 0)
275275
die_errno("unable to create directories for '%s'", dir);
276276
if (mkdir(dir, 0700) < 0)
277277
die_errno("unable to mkdir '%s'", dir);

builtin/diagnose.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
#include "builtin.h"
44
#include "abspath.h"
55
#include "gettext.h"
6-
#include "object-file.h"
76
#include "parse-options.h"
7+
#include "path.h"
88
#include "diagnose.h"
99

1010
static const char * const diagnose_usage[] = {
@@ -50,7 +50,7 @@ int cmd_diagnose(int argc,
5050
strbuf_addftime(&zip_path, option_suffix, localtime_r(&now, &tm), 0, 0);
5151
strbuf_addstr(&zip_path, ".zip");
5252

53-
switch (safe_create_leading_directories(zip_path.buf)) {
53+
switch (safe_create_leading_directories(the_repository, zip_path.buf)) {
5454
case SCLD_OK:
5555
case SCLD_EXISTS:
5656
break;

builtin/difftool.c

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "gettext.h"
2323
#include "hex.h"
2424
#include "parse-options.h"
25+
#include "path.h"
2526
#include "read-cache-ll.h"
2627
#include "repository.h"
2728
#include "sparse-index.h"
@@ -271,9 +272,9 @@ static void changed_files(struct repository *repo,
271272
strbuf_release(&buf);
272273
}
273274

274-
static int ensure_leading_directories(char *path)
275+
static int ensure_leading_directories(struct repository *repo, char *path)
275276
{
276-
switch (safe_create_leading_directories(path)) {
277+
switch (safe_create_leading_directories(repo, path)) {
277278
case SCLD_OK:
278279
case SCLD_EXISTS:
279280
return 0;
@@ -341,11 +342,12 @@ static int checkout_path(unsigned mode, struct object_id *oid,
341342
return ret;
342343
}
343344

344-
static void write_file_in_directory(struct strbuf *dir, size_t dir_len,
345-
const char *path, const char *content)
345+
static void write_file_in_directory(struct repository *repo,
346+
struct strbuf *dir, size_t dir_len,
347+
const char *path, const char *content)
346348
{
347349
add_path(dir, dir_len, path);
348-
ensure_leading_directories(dir->buf);
350+
ensure_leading_directories(repo, dir->buf);
349351
unlink(dir->buf);
350352
write_file(dir->buf, "%s", content);
351353
}
@@ -356,14 +358,15 @@ static void write_file_in_directory(struct strbuf *dir, size_t dir_len,
356358
* as text files, resulting in behavior that is analogous to what "git diff"
357359
* displays for symlink and submodule diffs.
358360
*/
359-
static void write_standin_files(struct pair_entry *entry,
360-
struct strbuf *ldir, size_t ldir_len,
361-
struct strbuf *rdir, size_t rdir_len)
361+
static void write_standin_files(struct repository *repo,
362+
struct pair_entry *entry,
363+
struct strbuf *ldir, size_t ldir_len,
364+
struct strbuf *rdir, size_t rdir_len)
362365
{
363366
if (*entry->left)
364-
write_file_in_directory(ldir, ldir_len, entry->path, entry->left);
367+
write_file_in_directory(repo, ldir, ldir_len, entry->path, entry->left);
365368
if (*entry->right)
366-
write_file_in_directory(rdir, rdir_len, entry->path, entry->right);
369+
write_file_in_directory(repo, rdir, rdir_len, entry->path, entry->right);
367370
}
368371

369372
static int run_dir_diff(struct repository *repo,
@@ -533,7 +536,7 @@ static int run_dir_diff(struct repository *repo,
533536
ADD_CACHE_JUST_APPEND);
534537

535538
add_path(&rdir, rdir_len, dst_path);
536-
if (ensure_leading_directories(rdir.buf)) {
539+
if (ensure_leading_directories(repo, rdir.buf)) {
537540
ret = error("could not create "
538541
"directory for '%s'",
539542
dst_path);
@@ -576,7 +579,7 @@ static int run_dir_diff(struct repository *repo,
576579
*/
577580
hashmap_for_each_entry(&submodules, &iter, entry,
578581
entry /* member name */) {
579-
write_standin_files(entry, &ldir, ldir_len, &rdir, rdir_len);
582+
write_standin_files(repo, entry, &ldir, ldir_len, &rdir, rdir_len);
580583
}
581584

582585
/*
@@ -587,7 +590,7 @@ static int run_dir_diff(struct repository *repo,
587590
hashmap_for_each_entry(&symlinks2, &iter, entry,
588591
entry /* member name */) {
589592

590-
write_standin_files(entry, &ldir, ldir_len, &rdir, rdir_len);
593+
write_standin_files(repo, entry, &ldir, ldir_len, &rdir, rdir_len);
591594
}
592595

593596
strbuf_setlen(&ldir, ldir_len);

builtin/fast-import.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1720,7 +1720,7 @@ static void dump_marks(void)
17201720
if (!export_marks_file || (import_marks_file && !import_marks_file_done))
17211721
return;
17221722

1723-
if (safe_create_leading_directories_const(export_marks_file)) {
1723+
if (safe_create_leading_directories_const(the_repository, export_marks_file)) {
17241724
failure |= error_errno("unable to create leading directories of %s",
17251725
export_marks_file);
17261726
return;

builtin/fsck.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ static void check_unreachable_object(struct object *obj)
332332
describe_object(&obj->oid));
333333
FILE *f;
334334

335-
if (safe_create_leading_directories_const(filename)) {
335+
if (safe_create_leading_directories_const(the_repository, filename)) {
336336
error(_("could not create lost-found"));
337337
free(filename);
338338
return;

builtin/gc.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include "commit.h"
2929
#include "commit-graph.h"
3030
#include "packfile.h"
31-
#include "object-file.h"
3231
#include "object-store-ll.h"
3332
#include "pack.h"
3433
#include "pack-objects.h"
@@ -2099,7 +2098,7 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
20992098
}
21002099
strbuf_addstr(&plist, "</array>\n</dict>\n</plist>\n");
21012100

2102-
if (safe_create_leading_directories(filename))
2101+
if (safe_create_leading_directories(the_repository, filename))
21032102
die(_("failed to create directories for '%s'"), filename);
21042103

21052104
if ((long)lock_file_timeout_ms < 0 &&
@@ -2565,7 +2564,7 @@ static int systemd_timer_write_timer_file(enum schedule_priority schedule,
25652564

25662565
filename = xdg_config_home_systemd(local_timer_name);
25672566

2568-
if (safe_create_leading_directories(filename)) {
2567+
if (safe_create_leading_directories(the_repository, filename)) {
25692568
error(_("failed to create directories for '%s'"), filename);
25702569
goto error;
25712570
}
@@ -2638,7 +2637,7 @@ static int systemd_timer_write_service_template(const char *exec_path)
26382637
char *local_service_name = xstrfmt(SYSTEMD_UNIT_FORMAT, "", "service");
26392638

26402639
filename = xdg_config_home_systemd(local_service_name);
2641-
if (safe_create_leading_directories(filename)) {
2640+
if (safe_create_leading_directories(the_repository, filename)) {
26422641
error(_("failed to create directories for '%s'"), filename);
26432642
goto error;
26442643
}

builtin/init-db.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "abspath.h"
99
#include "environment.h"
1010
#include "gettext.h"
11-
#include "object-file.h"
1211
#include "parse-options.h"
1312
#include "path.h"
1413
#include "refs.h"
@@ -134,7 +133,7 @@ int cmd_init_db(int argc,
134133
*/
135134
saved = repo_settings_get_shared_repository(the_repository);
136135
repo_settings_set_shared_repository(the_repository, 0);
137-
switch (safe_create_leading_directories_const(argv[0])) {
136+
switch (safe_create_leading_directories_const(the_repository, argv[0])) {
138137
case SCLD_OK:
139138
case SCLD_PERMS:
140139
break;

builtin/log.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include "gettext.h"
1515
#include "hex.h"
1616
#include "refs.h"
17-
#include "object-file.h"
1817
#include "object-name.h"
1918
#include "object-store-ll.h"
2019
#include "pager.h"
@@ -29,6 +28,7 @@
2928
#include "tag.h"
3029
#include "reflog-walk.h"
3130
#include "patch-ids.h"
31+
#include "path.h"
3232
#include "shortlog.h"
3333
#include "remote.h"
3434
#include "string-list.h"
@@ -2311,7 +2311,7 @@ int cmd_format_patch(int argc,
23112311
*/
23122312
saved = repo_settings_get_shared_repository(the_repository);
23132313
repo_settings_set_shared_repository(the_repository, 0);
2314-
switch (safe_create_leading_directories_const(output_directory)) {
2314+
switch (safe_create_leading_directories_const(the_repository, output_directory)) {
23152315
case SCLD_OK:
23162316
case SCLD_EXISTS:
23172317
break;

0 commit comments

Comments
 (0)