summaryrefslogtreecommitdiff
path: root/path.h
diff options
context:
space:
mode:
Diffstat (limited to 'path.h')
-rw-r--r--path.h43
1 files changed, 33 insertions, 10 deletions
diff --git a/path.h b/path.h
index 1ccd0373c9..b654ea8ff5 100644
--- a/path.h
+++ b/path.h
@@ -2,6 +2,7 @@
#define PATH_H
struct repository;
+struct strbuf;
/*
* The result to all functions which return statically allocated memory may be
@@ -147,7 +148,7 @@ extern void report_linked_checkout_garbage(void);
/*
* You can define a static memoized git path like:
*
- * static GIT_PATH_FUNC(git_path_foo, "FOO");
+ * static GIT_PATH_FUNC(git_path_foo, "FOO")
*
* or use one of the global ones below.
*/
@@ -160,14 +161,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 */