Skip to content

Commit f1ce861

Browse files
pks-tgitster
authored andcommitted
environment: move access to "core.sharedRepository" into repo settings
Similar as with the preceding commit, we track "core.sharedRepository" via a pair of global variables. Move them into `struct repo_settings` so that we can instead track them per-repository. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 6f3fbed commit f1ce861

File tree

8 files changed

+58
-58
lines changed

8 files changed

+58
-58
lines changed

builtin/init-db.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ int cmd_init_db(int argc,
132132
* and we know shared_repository should always be 0;
133133
* but just in case we play safe.
134134
*/
135-
saved = get_shared_repository();
136-
set_shared_repository(0);
135+
saved = repo_settings_get_shared_repository(the_repository);
136+
repo_settings_set_shared_repository(the_repository, 0);
137137
switch (safe_create_leading_directories_const(argv[0])) {
138138
case SCLD_OK:
139139
case SCLD_PERMS:
@@ -145,7 +145,7 @@ int cmd_init_db(int argc,
145145
die_errno(_("cannot mkdir %s"), argv[0]);
146146
break;
147147
}
148-
set_shared_repository(saved);
148+
repo_settings_set_shared_repository(the_repository, saved);
149149
if (mkdir(argv[0], 0777) < 0)
150150
die_errno(_("cannot mkdir %s"), argv[0]);
151151
mkdir_tried = 1;
@@ -175,7 +175,7 @@ int cmd_init_db(int argc,
175175
}
176176

177177
if (init_shared_repository != -1)
178-
set_shared_repository(init_shared_repository);
178+
repo_settings_set_shared_repository(the_repository, init_shared_repository);
179179

180180
/*
181181
* GIT_WORK_TREE makes sense only in conjunction with GIT_DIR

builtin/log.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2309,8 +2309,8 @@ int cmd_format_patch(int argc,
23092309
* We consider <outdir> as 'outside of gitdir', therefore avoid
23102310
* applying adjust_shared_perm in s-c-l-d.
23112311
*/
2312-
saved = get_shared_repository();
2313-
set_shared_repository(0);
2312+
saved = repo_settings_get_shared_repository(the_repository);
2313+
repo_settings_set_shared_repository(the_repository, 0);
23142314
switch (safe_create_leading_directories_const(output_directory)) {
23152315
case SCLD_OK:
23162316
case SCLD_EXISTS:
@@ -2319,7 +2319,7 @@ int cmd_format_patch(int argc,
23192319
die(_("could not create leading directories "
23202320
"of '%s'"), output_directory);
23212321
}
2322-
set_shared_repository(saved);
2322+
repo_settings_set_shared_repository(the_repository, saved);
23232323
if (mkdir(output_directory, 0777) < 0 && errno != EEXIST)
23242324
die_errno(_("could not create directory '%s'"),
23252325
output_directory);

environment.c

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -206,32 +206,6 @@ const char *get_commit_output_encoding(void)
206206
return git_commit_encoding ? git_commit_encoding : "UTF-8";
207207
}
208208

209-
static int the_shared_repository = PERM_UMASK;
210-
static int need_shared_repository_from_config = 1;
211-
212-
void set_shared_repository(int value)
213-
{
214-
the_shared_repository = value;
215-
need_shared_repository_from_config = 0;
216-
}
217-
218-
int get_shared_repository(void)
219-
{
220-
if (need_shared_repository_from_config) {
221-
const char *var = "core.sharedrepository";
222-
const char *value;
223-
if (!git_config_get_value(var, &value))
224-
the_shared_repository = git_config_perm(var, value);
225-
need_shared_repository_from_config = 0;
226-
}
227-
return the_shared_repository;
228-
}
229-
230-
void reset_shared_repository(void)
231-
{
232-
need_shared_repository_from_config = 1;
233-
}
234-
235209
int use_optional_locks(void)
236210
{
237211
return git_env_bool(GIT_OPTIONAL_LOCKS_ENVIRONMENT, 1);

environment.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,16 +134,6 @@ void setup_git_env(const char *git_dir);
134134
*/
135135
int have_git_dir(void);
136136

137-
/*
138-
* Accessors for the core.sharedrepository config which lazy-load the value
139-
* from the config (if not already set). The "reset" function can be
140-
* used to unset "set" or cached value, meaning that the value will be loaded
141-
* fresh from the config file on the next call to get_shared_repository().
142-
*/
143-
void set_shared_repository(int value);
144-
int get_shared_repository(void);
145-
void reset_shared_repository(void);
146-
147137
extern int is_bare_repository_cfg;
148138
int is_bare_repository(void);
149139
extern char *git_work_tree_cfg;

path.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -844,17 +844,17 @@ int calc_shared_perm(int mode)
844844
{
845845
int tweak;
846846

847-
if (get_shared_repository() < 0)
848-
tweak = -get_shared_repository();
847+
if (repo_settings_get_shared_repository(the_repository) < 0)
848+
tweak = -repo_settings_get_shared_repository(the_repository);
849849
else
850-
tweak = get_shared_repository();
850+
tweak = repo_settings_get_shared_repository(the_repository);
851851

852852
if (!(mode & S_IWUSR))
853853
tweak &= ~0222;
854854
if (mode & S_IXUSR)
855855
/* Copy read bits to execute bits */
856856
tweak |= (tweak & 0444) >> 2;
857-
if (get_shared_repository() < 0)
857+
if (repo_settings_get_shared_repository(the_repository) < 0)
858858
mode = (mode & ~0777) | tweak;
859859
else
860860
mode |= tweak;
@@ -867,7 +867,7 @@ int adjust_shared_perm(const char *path)
867867
{
868868
int old_mode, new_mode;
869869

870-
if (!get_shared_repository())
870+
if (!repo_settings_get_shared_repository(the_repository))
871871
return 0;
872872
if (get_st_mode_bits(path, &old_mode) < 0)
873873
return -1;

repo-settings.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "repository.h"
55
#include "midx.h"
66
#include "pack-objects.h"
7+
#include "setup.h"
78

89
static void repo_cfg_bool(struct repository *r, const char *key, int *dest,
910
int def)
@@ -181,3 +182,28 @@ const char *repo_settings_get_hooks_path(struct repository *repo)
181182
repo_config_get_pathname(repo, "core.hookspath", &repo->settings.hooks_path);
182183
return repo->settings.hooks_path;
183184
}
185+
186+
int repo_settings_get_shared_repository(struct repository *repo)
187+
{
188+
if (!repo->settings.shared_repository_initialized) {
189+
const char *var = "core.sharedrepository";
190+
const char *value;
191+
if (!repo_config_get_value(repo, var, &value))
192+
repo->settings.shared_repository = git_config_perm(var, value);
193+
else
194+
repo->settings.shared_repository = PERM_UMASK;
195+
repo->settings.shared_repository_initialized = 1;
196+
}
197+
return repo->settings.shared_repository;
198+
}
199+
200+
void repo_settings_set_shared_repository(struct repository *repo, int value)
201+
{
202+
repo->settings.shared_repository = value;
203+
repo->settings.shared_repository_initialized = 1;
204+
}
205+
206+
void repo_settings_reset_shared_repository(struct repository *repo)
207+
{
208+
repo->settings.shared_repository_initialized = 0;
209+
}

repo-settings.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ struct repo_settings {
3737
int pack_use_bitmap_boundary_traversal;
3838
int pack_use_multi_pack_reuse;
3939

40+
int shared_repository;
41+
int shared_repository_initialized;
42+
4043
/*
4144
* Does this repository have core.useReplaceRefs=true (on by
4245
* default)? This provides a repository-scoped version of this
@@ -65,6 +68,7 @@ struct repo_settings {
6568
char *hooks_path;
6669
};
6770
#define REPO_SETTINGS_INIT { \
71+
.shared_repository = -1, \
6872
.index_version = -1, \
6973
.core_untracked_cache = UNTRACKED_CACHE_KEEP, \
7074
.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE, \
@@ -84,4 +88,9 @@ int repo_settings_get_warn_ambiguous_refs(struct repository *repo);
8488
/* Read the value for "core.hooksPath". */
8589
const char *repo_settings_get_hooks_path(struct repository *repo);
8690

91+
/* Read, set or reset the value for "core.sharedRepository". */
92+
int repo_settings_get_shared_repository(struct repository *repo);
93+
void repo_settings_set_shared_repository(struct repository *repo, int value);
94+
void repo_settings_reset_shared_repository(struct repository *repo);
95+
8796
#endif /* REPO_SETTINGS_H */

setup.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2332,7 +2332,7 @@ static int create_default_files(const char *template_path,
23322332
*/
23332333
copy_templates(template_path);
23342334
git_config_clear();
2335-
reset_shared_repository();
2335+
repo_settings_reset_shared_repository(the_repository);
23362336
git_config(git_default_config, NULL);
23372337

23382338
reinit = is_reinit();
@@ -2342,15 +2342,16 @@ static int create_default_files(const char *template_path,
23422342
* values we might have just re-read from the config.
23432343
*/
23442344
if (init_shared_repository != -1)
2345-
set_shared_repository(init_shared_repository);
2345+
repo_settings_set_shared_repository(the_repository,
2346+
init_shared_repository);
23462347

23472348
is_bare_repository_cfg = !work_tree;
23482349

23492350
/*
23502351
* We would have created the above under user's umask -- under
23512352
* shared-repository settings, we would need to fix them up.
23522353
*/
2353-
if (get_shared_repository()) {
2354+
if (repo_settings_get_shared_repository(the_repository)) {
23542355
adjust_shared_perm(repo_get_git_dir(the_repository));
23552356
}
23562357

@@ -2597,20 +2598,20 @@ int init_db(const char *git_dir, const char *real_git_dir,
25972598
initial_branch, flags & INIT_DB_QUIET);
25982599
create_object_directory();
25992600

2600-
if (get_shared_repository()) {
2601+
if (repo_settings_get_shared_repository(the_repository)) {
26012602
char buf[10];
26022603
/* We do not spell "group" and such, so that
26032604
* the configuration can be read by older version
26042605
* of git. Note, we use octal numbers for new share modes,
26052606
* and compatibility values for PERM_GROUP and
26062607
* PERM_EVERYBODY.
26072608
*/
2608-
if (get_shared_repository() < 0)
2609+
if (repo_settings_get_shared_repository(the_repository) < 0)
26092610
/* force to the mode value */
2610-
xsnprintf(buf, sizeof(buf), "0%o", -get_shared_repository());
2611-
else if (get_shared_repository() == PERM_GROUP)
2611+
xsnprintf(buf, sizeof(buf), "0%o", -repo_settings_get_shared_repository(the_repository));
2612+
else if (repo_settings_get_shared_repository(the_repository) == PERM_GROUP)
26122613
xsnprintf(buf, sizeof(buf), "%d", OLD_PERM_GROUP);
2613-
else if (get_shared_repository() == PERM_EVERYBODY)
2614+
else if (repo_settings_get_shared_repository(the_repository) == PERM_EVERYBODY)
26142615
xsnprintf(buf, sizeof(buf), "%d", OLD_PERM_EVERYBODY);
26152616
else
26162617
BUG("invalid value for shared_repository");
@@ -2622,12 +2623,12 @@ int init_db(const char *git_dir, const char *real_git_dir,
26222623
int len = strlen(git_dir);
26232624

26242625
if (reinit)
2625-
printf(get_shared_repository()
2626+
printf(repo_settings_get_shared_repository(the_repository)
26262627
? _("Reinitialized existing shared Git repository in %s%s\n")
26272628
: _("Reinitialized existing Git repository in %s%s\n"),
26282629
git_dir, len && git_dir[len-1] != '/' ? "/" : "");
26292630
else
2630-
printf(get_shared_repository()
2631+
printf(repo_settings_get_shared_repository(the_repository)
26312632
? _("Initialized empty shared Git repository in %s%s\n")
26322633
: _("Initialized empty Git repository in %s%s\n"),
26332634
git_dir, len && git_dir[len-1] != '/' ? "/" : "");

0 commit comments

Comments
 (0)