summaryrefslogtreecommitdiffstats
path: root/path.h
diff options
context:
space:
mode:
authorStefan Beller <sbeller@google.com>2018-05-17 15:51:51 -0700
committerJunio C Hamano <gitster@pobox.com>2018-05-18 08:13:10 +0900
commit102de880d24fe66a8916e7c984e5bf8db6be047c (patch)
tree0368ad2a280ca777b8edf01e77fb0ed1258c8c32 /path.h
parent0437a2e365f3b9156097d029ca6f91cbb8bffd5e (diff)
downloadgit-102de880d24fe66a8916e7c984e5bf8db6be047c.tar.gz
git-102de880d24fe66a8916e7c984e5bf8db6be047c.tar.xz
path.c: migrate global git_path_* to take a repository argument
Migrate all git_path_* functions that are defined in path.c to take a repository argument. Unlike other patches in this series, do not use the #define trick, as we rewrite the whole function, which is rather small. This doesn't migrate all the functions, as other builtins have their own local path functions defined using GIT_PATH_FUNC. So keep that macro around to serve the other locations. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'path.h')
-rw-r--r--path.h40
1 files changed, 31 insertions, 9 deletions
diff --git a/path.h b/path.h
index 1ccd0373c..5263f4051 100644
--- a/path.h
+++ b/path.h
@@ -160,14 +160,36 @@ extern void report_linked_checkout_garbage(void);
return ret; \
}
-const char *git_path_cherry_pick_head(void);
-const char *git_path_revert_head(void);
-const char *git_path_squash_msg(void);
-const char *git_path_merge_msg(void);
-const char *git_path_merge_rr(void);
-const char *git_path_merge_mode(void);
-const char *git_path_merge_head(void);
-const char *git_path_fetch_head(void);
-const char *git_path_shallow(void);
+#define REPO_GIT_PATH_FUNC(var, filename) \
+ const char *git_path_##var(struct repository *r) \
+ { \
+ if (!r->cached_paths.var) \
+ r->cached_paths.var = git_pathdup(filename); \
+ return r->cached_paths.var; \
+ }
+
+struct path_cache {
+ const char *cherry_pick_head;
+ const char *revert_head;
+ const char *squash_msg;
+ const char *merge_msg;
+ const char *merge_rr;
+ const char *merge_mode;
+ const char *merge_head;
+ const char *fetch_head;
+ const char *shallow;
+};
+
+#define PATH_CACHE_INIT { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
+
+const char *git_path_cherry_pick_head(struct repository *r);
+const char *git_path_revert_head(struct repository *r);
+const char *git_path_squash_msg(struct repository *r);
+const char *git_path_merge_msg(struct repository *r);
+const char *git_path_merge_rr(struct repository *r);
+const char *git_path_merge_mode(struct repository *r);
+const char *git_path_merge_head(struct repository *r);
+const char *git_path_fetch_head(struct repository *r);
+const char *git_path_shallow(struct repository *r);
#endif /* PATH_H */