path.hon commit path: add repo_git_path and strbuf_repo_git_path (3181d86)
   1#ifndef PATH_H
   2#define PATH_H
   3
   4struct repository;
   5
   6/*
   7 * Return a statically allocated filename, either generically (mkpath), in
   8 * the repository directory (git_path), or in a submodule's repository
   9 * directory (git_path_submodule). In all cases, note that the result
  10 * may be overwritten by another call to _any_ of the functions. Consider
  11 * using the safer "dup" or "strbuf" formats below (in some cases, the
  12 * unsafe versions have already been removed).
  13 */
  14extern const char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
  15extern const char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
  16extern const char *git_common_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
  17
  18extern char *mksnpath(char *buf, size_t n, const char *fmt, ...)
  19        __attribute__((format (printf, 3, 4)));
  20extern void strbuf_git_path(struct strbuf *sb, const char *fmt, ...)
  21        __attribute__((format (printf, 2, 3)));
  22extern void strbuf_git_common_path(struct strbuf *sb,
  23                                   const struct repository *repo,
  24                                   const char *fmt, ...)
  25        __attribute__((format (printf, 3, 4)));
  26extern char *git_path_buf(struct strbuf *buf, const char *fmt, ...)
  27        __attribute__((format (printf, 2, 3)));
  28extern int strbuf_git_path_submodule(struct strbuf *sb, const char *path,
  29                                     const char *fmt, ...)
  30        __attribute__((format (printf, 3, 4)));
  31extern char *git_pathdup(const char *fmt, ...)
  32        __attribute__((format (printf, 1, 2)));
  33extern char *mkpathdup(const char *fmt, ...)
  34        __attribute__((format (printf, 1, 2)));
  35extern char *git_pathdup_submodule(const char *path, const char *fmt, ...)
  36        __attribute__((format (printf, 2, 3)));
  37
  38extern char *repo_git_path(const struct repository *repo,
  39                           const char *fmt, ...)
  40        __attribute__((format (printf, 2, 3)));
  41extern void strbuf_repo_git_path(struct strbuf *sb,
  42                                 const struct repository *repo,
  43                                 const char *fmt, ...)
  44        __attribute__((format (printf, 3, 4)));
  45
  46extern void report_linked_checkout_garbage(void);
  47
  48/*
  49 * You can define a static memoized git path like:
  50 *
  51 *    static GIT_PATH_FUNC(git_path_foo, "FOO");
  52 *
  53 * or use one of the global ones below.
  54 */
  55#define GIT_PATH_FUNC(func, filename) \
  56        const char *func(void) \
  57        { \
  58                static char *ret; \
  59                if (!ret) \
  60                        ret = git_pathdup(filename); \
  61                return ret; \
  62        }
  63
  64const char *git_path_cherry_pick_head(void);
  65const char *git_path_revert_head(void);
  66const char *git_path_squash_msg(void);
  67const char *git_path_merge_msg(void);
  68const char *git_path_merge_rr(void);
  69const char *git_path_merge_mode(void);
  70const char *git_path_merge_head(void);
  71const char *git_path_fetch_head(void);
  72const char *git_path_shallow(void);
  73
  74#endif /* PATH_H */