From 69a63fe663874716d2b5bf49b90c550f8279358e Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:08 +0000 Subject: [PATCH 01/22] treewide: be explicit about dependence on strbuf.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- color.c | 1 + common-main.c | 1 + credential.c | 1 + date.c | 1 + ll-merge.c | 1 + split-index.c | 1 + t/helper/test-mergesort.c | 1 + t/helper/test-oid-array.c | 1 + t/helper/test-oidtree.c | 1 + t/helper/test-parse-options.c | 1 + t/helper/test-string-list.c | 1 + wrapper.c | 1 + ws.c | 1 + 13 files changed, 13 insertions(+) diff --git a/color.c b/color.c index 6031998d3e..f8a25ca807 100644 --- a/color.c +++ b/color.c @@ -5,6 +5,7 @@ #include "gettext.h" #include "hex.h" #include "pager.h" +#include "strbuf.h" static int git_use_color_default = GIT_COLOR_AUTO; int color_stdout_is_tty = -1; diff --git a/common-main.c b/common-main.c index f319317353..601a875e2f 100644 --- a/common-main.c +++ b/common-main.c @@ -3,6 +3,7 @@ #include "gettext.h" #include "attr.h" #include "setup.h" +#include "strbuf.h" #include "trace2.h" /* diff --git a/credential.c b/credential.c index e6417bf880..42194efc9e 100644 --- a/credential.c +++ b/credential.c @@ -8,6 +8,7 @@ #include "url.h" #include "prompt.h" #include "sigchain.h" +#include "strbuf.h" #include "urlmatch.h" #include "git-compat-util.h" diff --git a/date.c b/date.c index e944c8905a..bc030da012 100644 --- a/date.c +++ b/date.c @@ -8,6 +8,7 @@ #include "date.h" #include "gettext.h" #include "pager.h" +#include "strbuf.h" /* * This is like mktime, but without normalization of tm_wday and tm_yday. diff --git a/ll-merge.c b/ll-merge.c index 28bc94c45d..85517e668e 100644 --- a/ll-merge.c +++ b/ll-merge.c @@ -12,6 +12,7 @@ #include "run-command.h" #include "ll-merge.h" #include "quote.h" +#include "strbuf.h" #include "wrapper.h" struct ll_merge_driver; diff --git a/split-index.c b/split-index.c index 5602b74994..3fc4e91485 100644 --- a/split-index.c +++ b/split-index.c @@ -3,6 +3,7 @@ #include "gettext.h" #include "mem-pool.h" #include "split-index.h" +#include "strbuf.h" #include "ewah/ewok.h" struct split_index *init_split_index(struct index_state *istate) diff --git a/t/helper/test-mergesort.c b/t/helper/test-mergesort.c index 737e0c5235..3aabae6c1c 100644 --- a/t/helper/test-mergesort.c +++ b/t/helper/test-mergesort.c @@ -2,6 +2,7 @@ #include "cache.h" #include "mem-pool.h" #include "mergesort.h" +#include "strbuf.h" static uint32_t minstd_rand(uint32_t *state) { diff --git a/t/helper/test-oid-array.c b/t/helper/test-oid-array.c index fd6f73ea03..ea3bf27898 100644 --- a/t/helper/test-oid-array.c +++ b/t/helper/test-oid-array.c @@ -3,6 +3,7 @@ #include "hex.h" #include "oid-array.h" #include "setup.h" +#include "strbuf.h" static int print_oid(const struct object_id *oid, void *data) { diff --git a/t/helper/test-oidtree.c b/t/helper/test-oidtree.c index edcb7e9f44..796c9811e0 100644 --- a/t/helper/test-oidtree.c +++ b/t/helper/test-oidtree.c @@ -3,6 +3,7 @@ #include "hex.h" #include "oidtree.h" #include "setup.h" +#include "strbuf.h" static enum cb_next print_oid(const struct object_id *oid, void *data) { diff --git a/t/helper/test-parse-options.c b/t/helper/test-parse-options.c index 506835521a..20a81a1eb2 100644 --- a/t/helper/test-parse-options.c +++ b/t/helper/test-parse-options.c @@ -1,6 +1,7 @@ #include "test-tool.h" #include "cache.h" #include "parse-options.h" +#include "strbuf.h" #include "string-list.h" #include "trace2.h" diff --git a/t/helper/test-string-list.c b/t/helper/test-string-list.c index 2123dda85b..959f27c74c 100644 --- a/t/helper/test-string-list.c +++ b/t/helper/test-string-list.c @@ -1,5 +1,6 @@ #include "test-tool.h" #include "cache.h" +#include "strbuf.h" #include "string-list.h" /* diff --git a/wrapper.c b/wrapper.c index c130d7518b..e80f83498d 100644 --- a/wrapper.c +++ b/wrapper.c @@ -5,6 +5,7 @@ #include "abspath.h" #include "config.h" #include "gettext.h" +#include "strbuf.h" #include "trace2.h" #include "wrapper.h" diff --git a/ws.c b/ws.c index da3d0e28cb..036ccb8ee9 100644 --- a/ws.c +++ b/ws.c @@ -5,6 +5,7 @@ */ #include "cache.h" #include "attr.h" +#include "strbuf.h" static struct whitespace_rule { const char *rule_name; From cb2a51356d3019582128a818aea533ccd11f42c0 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:09 +0000 Subject: [PATCH 02/22] symlinks.h: move declarations for symlinks.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- apply.c | 1 + builtin/checkout.c | 1 + builtin/update-index.c | 1 + cache.h | 22 ---------------------- compat/mingw.c | 1 + diff-lib.c | 1 + dir.c | 1 + entry.c | 1 + merge-recursive.c | 1 + parallel-checkout.c | 1 + pathspec.c | 1 + preload-index.c | 1 + read-cache.c | 1 + run-command.c | 1 + symlinks.c | 3 ++- symlinks.h | 28 ++++++++++++++++++++++++++++ unpack-trees.c | 1 + 17 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 symlinks.h diff --git a/apply.c b/apply.c index 2868cef5dd..efe2dcb0e6 100644 --- a/apply.c +++ b/apply.c @@ -30,6 +30,7 @@ #include "apply.h" #include "entry.h" #include "setup.h" +#include "symlinks.h" #include "wrapper.h" struct gitdiff_data { diff --git a/builtin/checkout.c b/builtin/checkout.c index 6f5d82ed3d..715eeb5048 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -28,6 +28,7 @@ #include "setup.h" #include "submodule.h" #include "submodule-config.h" +#include "symlinks.h" #include "trace2.h" #include "tree.h" #include "tree-walk.h" diff --git a/builtin/update-index.c b/builtin/update-index.c index 33b00cef15..58bbc80db7 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -23,6 +23,7 @@ #include "dir.h" #include "setup.h" #include "split-index.h" +#include "symlinks.h" #include "fsmonitor.h" #include "write-or-die.h" diff --git a/cache.h b/cache.h index 71e2fe74c4..ffec289dc5 100644 --- a/cache.h +++ b/cache.h @@ -593,28 +593,6 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -struct cache_def { - struct strbuf path; - int flags; - int track_flags; - int prefix_len_stat_func; -}; -#define CACHE_DEF_INIT { \ - .path = STRBUF_INIT, \ -} -static inline void cache_def_clear(struct cache_def *cache) -{ - strbuf_release(&cache->path); -} - -int has_symlink_leading_path(const char *name, int len); -int threaded_has_symlink_leading_path(struct cache_def *, const char *, int); -int check_leading_path(const char *name, int len, int warn_on_lstat_err); -int has_dirs_only_path(const char *name, int len, int prefix_len); -void invalidate_lstat_cache(void); -void schedule_dir_for_removal(const char *name, int len); -void remove_scheduled_dirs(void); - struct pack_window { struct pack_window *next; unsigned char *base; diff --git a/compat/mingw.c b/compat/mingw.c index abbc3faf32..d06cdc6254 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -13,6 +13,7 @@ #include "../config.h" #include "../environment.h" #include "../trace2.h" +#include "../symlinks.h" #include "../wrapper.h" #include "dir.h" #include "gettext.h" diff --git a/diff-lib.c b/diff-lib.c index d292405a26..60e979dc1b 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -14,6 +14,7 @@ #include "unpack-trees.h" #include "refs.h" #include "submodule.h" +#include "symlinks.h" #include "trace.h" #include "dir.h" #include "fsmonitor.h" diff --git a/dir.c b/dir.c index aa840995c4..ed262fa6e4 100644 --- a/dir.c +++ b/dir.c @@ -25,6 +25,7 @@ #include "fsmonitor.h" #include "setup.h" #include "submodule-config.h" +#include "symlinks.h" #include "trace2.h" #include "wrapper.h" diff --git a/entry.c b/entry.c index d89e61fa64..91a540bd29 100644 --- a/entry.c +++ b/entry.c @@ -7,6 +7,7 @@ #include "hex.h" #include "streaming.h" #include "submodule.h" +#include "symlinks.h" #include "progress.h" #include "fsmonitor.h" #include "entry.h" diff --git a/merge-recursive.c b/merge-recursive.c index 9875bdb11c..d4d2ab05b2 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -30,6 +30,7 @@ #include "string-list.h" #include "submodule-config.h" #include "submodule.h" +#include "symlinks.h" #include "tag.h" #include "tree-walk.h" #include "unpack-trees.h" diff --git a/parallel-checkout.c b/parallel-checkout.c index 50fd7fe31e..7f0569cc93 100644 --- a/parallel-checkout.c +++ b/parallel-checkout.c @@ -10,6 +10,7 @@ #include "run-command.h" #include "sigchain.h" #include "streaming.h" +#include "symlinks.h" #include "thread-utils.h" #include "trace2.h" #include "wrapper.h" diff --git a/pathspec.c b/pathspec.c index 6972d515f0..ec335a214e 100644 --- a/pathspec.c +++ b/pathspec.c @@ -8,6 +8,7 @@ #include "attr.h" #include "setup.h" #include "strvec.h" +#include "symlinks.h" #include "quote.h" /* diff --git a/preload-index.c b/preload-index.c index 4abf9c983b..7a26b08c21 100644 --- a/preload-index.c +++ b/preload-index.c @@ -11,6 +11,7 @@ #include "progress.h" #include "thread-utils.h" #include "repository.h" +#include "symlinks.h" #include "trace2.h" /* diff --git a/read-cache.c b/read-cache.c index f225bf44cd..206c003e55 100644 --- a/read-cache.c +++ b/read-cache.c @@ -30,6 +30,7 @@ #include "trace2.h" #include "varint.h" #include "split-index.h" +#include "symlinks.h" #include "utf8.h" #include "fsmonitor.h" #include "thread-utils.h" diff --git a/run-command.c b/run-command.c index e64bb08a5b..d4247d5fcc 100644 --- a/run-command.c +++ b/run-command.c @@ -5,6 +5,7 @@ #include "gettext.h" #include "sigchain.h" #include "strvec.h" +#include "symlinks.h" #include "thread-utils.h" #include "strbuf.h" #include "string-list.h" diff --git a/symlinks.c b/symlinks.c index 27ecc93693..b29e340c2d 100644 --- a/symlinks.c +++ b/symlinks.c @@ -1,6 +1,7 @@ -#include "cache.h" +#include "git-compat-util.h" #include "gettext.h" #include "setup.h" +#include "symlinks.h" static int threaded_check_leading_path(struct cache_def *cache, const char *name, int len, int warn_on_lstat_err); diff --git a/symlinks.h b/symlinks.h new file mode 100644 index 0000000000..7ae3d5b856 --- /dev/null +++ b/symlinks.h @@ -0,0 +1,28 @@ +#ifndef SYMLINKS_H +#define SYMLINKS_H + +#include "strbuf.h" + +struct cache_def { + struct strbuf path; + int flags; + int track_flags; + int prefix_len_stat_func; +}; +#define CACHE_DEF_INIT { \ + .path = STRBUF_INIT, \ +} +static inline void cache_def_clear(struct cache_def *cache) +{ + strbuf_release(&cache->path); +} + +int has_symlink_leading_path(const char *name, int len); +int threaded_has_symlink_leading_path(struct cache_def *, const char *, int); +int check_leading_path(const char *name, int len, int warn_on_lstat_err); +int has_dirs_only_path(const char *name, int len, int prefix_len); +void invalidate_lstat_cache(void); +void schedule_dir_for_removal(const char *name, int len); +void remove_scheduled_dirs(void); + +#endif /* SYMLINKS_H */ diff --git a/unpack-trees.c b/unpack-trees.c index c6de2ca5a7..e8a5295e73 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -18,6 +18,7 @@ #include "sparse-index.h" #include "submodule.h" #include "submodule-config.h" +#include "symlinks.h" #include "trace2.h" #include "fsmonitor.h" #include "object-store.h" From 0ff73d742b40bc85966d5b7dcc28f438910f771c Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:10 +0000 Subject: [PATCH 03/22] packfile.h: move pack_window and pack_entry from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 14 -------------- packfile.h | 16 ++++++++++++++-- t/helper/test-read-midx.c | 1 + 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/cache.h b/cache.h index ffec289dc5..ffb9028f01 100644 --- a/cache.h +++ b/cache.h @@ -593,20 +593,6 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -struct pack_window { - struct pack_window *next; - unsigned char *base; - off_t offset; - size_t len; - unsigned int last_used; - unsigned int inuse_cnt; -}; - -struct pack_entry { - off_t offset; - struct packed_git *p; -}; - /* Dumb servers support */ int update_server_info(int); diff --git a/packfile.h b/packfile.h index 665603b696..c3692308b8 100644 --- a/packfile.h +++ b/packfile.h @@ -6,10 +6,22 @@ /* in object-store.h */ struct packed_git; -struct pack_entry; -struct pack_window; struct object_info; +struct pack_window { + struct pack_window *next; + unsigned char *base; + off_t offset; + size_t len; + unsigned int last_used; + unsigned int inuse_cnt; +}; + +struct pack_entry { + off_t offset; + struct packed_git *p; +}; + /* * Generate the filename to be used for a pack file with checksum "sha1" and * extension "ext". The result is written into the strbuf "buf", overwriting diff --git a/t/helper/test-read-midx.c b/t/helper/test-read-midx.c index 05c4f2b262..b32abff7f1 100644 --- a/t/helper/test-read-midx.c +++ b/t/helper/test-read-midx.c @@ -5,6 +5,7 @@ #include "repository.h" #include "object-store.h" #include "pack-bitmap.h" +#include "packfile.h" #include "setup.h" static int read_midx_file(const char *object_dir, int show_objects) From 623b80bef2431f2f0dc550dda9da5cb633c606fd Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:11 +0000 Subject: [PATCH 04/22] server-info.h: move declarations for server-info.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- builtin/receive-pack.c | 1 + builtin/repack.c | 1 + builtin/update-server-info.c | 1 + cache.h | 3 --- server-info.c | 3 ++- server-info.h | 7 +++++++ 6 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 server-info.h diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 7d921170f1..dae99e4554 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -33,6 +33,7 @@ #include "object-store.h" #include "protocol.h" #include "commit-reach.h" +#include "server-info.h" #include "trace.h" #include "trace2.h" #include "worktree.h" diff --git a/builtin/repack.c b/builtin/repack.c index df4d8e0f0b..bed2c2aaaf 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -7,6 +7,7 @@ #include "hex.h" #include "parse-options.h" #include "run-command.h" +#include "server-info.h" #include "sigchain.h" #include "strbuf.h" #include "string-list.h" diff --git a/builtin/update-server-info.c b/builtin/update-server-info.c index e7bff27ae4..19dce3c065 100644 --- a/builtin/update-server-info.c +++ b/builtin/update-server-info.c @@ -3,6 +3,7 @@ #include "builtin.h" #include "gettext.h" #include "parse-options.h" +#include "server-info.h" static const char * const update_server_info_usage[] = { "git update-server-info [-f | --force]", diff --git a/cache.h b/cache.h index ffb9028f01..2eb4546473 100644 --- a/cache.h +++ b/cache.h @@ -593,9 +593,6 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -/* Dumb servers support */ -int update_server_info(int); - #define COPY_READ_ERROR (-2) #define COPY_WRITE_ERROR (-3) int copy_fd(int ifd, int ofd); diff --git a/server-info.c b/server-info.c index 68098ddd1a..55aa04f00a 100644 --- a/server-info.c +++ b/server-info.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "alloc.h" #include "dir.h" #include "environment.h" @@ -11,6 +11,7 @@ #include "packfile.h" #include "object-file.h" #include "object-store.h" +#include "server-info.h" #include "strbuf.h" #include "wrapper.h" diff --git a/server-info.h b/server-info.h new file mode 100644 index 0000000000..13bbde2c55 --- /dev/null +++ b/server-info.h @@ -0,0 +1,7 @@ +#ifndef SERVER_INFO_H +#define SERVER_INFO_H + +/* Dumb servers support */ +int update_server_info(int); + +#endif /* SERVER_INFO_H */ From d5fff46f4025e23ec61b9d74eac2bb19e7a2385d Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:12 +0000 Subject: [PATCH 05/22] copy.h: move declarations for copy.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- builtin/bisect.c | 1 + builtin/clone.c | 1 + builtin/difftool.c | 1 + builtin/init-db.c | 1 + builtin/worktree.c | 1 + bundle-uri.c | 1 + cache.h | 6 ------ convert.c | 1 + copy.c | 1 + copy.h | 10 ++++++++++ pkt-line.c | 1 + refs/files-backend.c | 1 + rerere.c | 1 + sequencer.c | 1 + 14 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 copy.h diff --git a/builtin/bisect.c b/builtin/bisect.c index 4b2143d455..4812450c39 100644 --- a/builtin/bisect.c +++ b/builtin/bisect.c @@ -1,5 +1,6 @@ #include "builtin.h" #include "cache.h" +#include "copy.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/clone.c b/builtin/clone.c index 4ed0a1d5aa..017ebc3faa 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -13,6 +13,7 @@ #include "abspath.h" #include "advice.h" #include "config.h" +#include "copy.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/difftool.c b/builtin/difftool.c index 3ffb0524be..409507983f 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -15,6 +15,7 @@ #include "cache.h" #include "abspath.h" #include "config.h" +#include "copy.h" #include "builtin.h" #include "run-command.h" #include "environment.h" diff --git a/builtin/init-db.c b/builtin/init-db.c index 6183f3fb3f..cda6ee75eb 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -6,6 +6,7 @@ #include "cache.h" #include "abspath.h" #include "config.h" +#include "copy.h" #include "environment.h" #include "gettext.h" #include "refs.h" diff --git a/builtin/worktree.c b/builtin/worktree.c index 0621f6f708..0b411e9dee 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -2,6 +2,7 @@ #include "abspath.h" #include "checkout.h" #include "config.h" +#include "copy.h" #include "builtin.h" #include "dir.h" #include "environment.h" diff --git a/bundle-uri.c b/bundle-uri.c index 1ff1cf51da..6d44662ee1 100644 --- a/bundle-uri.c +++ b/bundle-uri.c @@ -1,6 +1,7 @@ #include "cache.h" #include "bundle-uri.h" #include "bundle.h" +#include "copy.h" #include "environment.h" #include "gettext.h" #include "object-store.h" diff --git a/cache.h b/cache.h index 2eb4546473..2b66176479 100644 --- a/cache.h +++ b/cache.h @@ -593,12 +593,6 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -#define COPY_READ_ERROR (-2) -#define COPY_WRITE_ERROR (-3) -int copy_fd(int ifd, int ofd); -int copy_file(const char *dst, const char *src, int mode); -int copy_file_with_time(const char *dst, const char *src, int mode); - /* base85 */ int decode_85(char *dst, const char *line, int linelen); void encode_85(char *buf, const unsigned char *data, int bytes); diff --git a/convert.c b/convert.c index 5a2ea5308d..7cf7bd0c88 100644 --- a/convert.c +++ b/convert.c @@ -2,6 +2,7 @@ #include "advice.h" #include "config.h" #include "convert.h" +#include "copy.h" #include "gettext.h" #include "hex.h" #include "object-store.h" diff --git a/copy.c b/copy.c index c3250f0822..db6b615c18 100644 --- a/copy.c +++ b/copy.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "copy.h" #include "wrapper.h" int copy_fd(int ifd, int ofd) diff --git a/copy.h b/copy.h new file mode 100644 index 0000000000..2af77cba86 --- /dev/null +++ b/copy.h @@ -0,0 +1,10 @@ +#ifndef COPY_H +#define COPY_H + +#define COPY_READ_ERROR (-2) +#define COPY_WRITE_ERROR (-3) +int copy_fd(int ifd, int ofd); +int copy_file(const char *dst, const char *src, int mode); +int copy_file_with_time(const char *dst, const char *src, int mode); + +#endif /* COPY_H */ diff --git a/pkt-line.c b/pkt-line.c index 3561d85358..8b5fa78851 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "copy.h" #include "pkt-line.h" #include "gettext.h" #include "hex.h" diff --git a/refs/files-backend.c b/refs/files-backend.c index d0581ee41a..1128a9af29 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1,5 +1,6 @@ #include "../cache.h" #include "../config.h" +#include "../copy.h" #include "../environment.h" #include "../gettext.h" #include "../hex.h" diff --git a/rerere.c b/rerere.c index 7abc94bf44..e968d413d6 100644 --- a/rerere.c +++ b/rerere.c @@ -2,6 +2,7 @@ #include "abspath.h" #include "alloc.h" #include "config.h" +#include "copy.h" #include "gettext.h" #include "hex.h" #include "lockfile.h" diff --git a/sequencer.c b/sequencer.c index fcca3b8144..c16df51443 100644 --- a/sequencer.c +++ b/sequencer.c @@ -3,6 +3,7 @@ #include "advice.h" #include "alloc.h" #include "config.h" +#include "copy.h" #include "environment.h" #include "gettext.h" #include "hex.h" From 9b5041f647fa5d9921b9b4f8be6b36cb39591166 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:13 +0000 Subject: [PATCH 06/22] base85.h: move declarations for base85.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- apply.c | 1 + base85.c | 3 ++- base85.h | 7 +++++++ cache.h | 4 ---- diff.c | 1 + 5 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 base85.h diff --git a/apply.c b/apply.c index efe2dcb0e6..a65a354eef 100644 --- a/apply.c +++ b/apply.c @@ -10,6 +10,7 @@ #include "cache.h" #include "abspath.h" #include "alloc.h" +#include "base85.h" #include "config.h" #include "object-store.h" #include "blob.h" diff --git a/base85.c b/base85.c index 5ca601ee14..bbacdca31b 100644 --- a/base85.c +++ b/base85.c @@ -1,4 +1,5 @@ -#include "cache.h" +#include "git-compat-util.h" +#include "base85.h" #undef DEBUG_85 diff --git a/base85.h b/base85.h new file mode 100644 index 0000000000..c835086e09 --- /dev/null +++ b/base85.h @@ -0,0 +1,7 @@ +#ifndef BASE85_H +#define BASE85_H + +int decode_85(char *dst, const char *line, int linelen); +void encode_85(char *buf, const unsigned char *data, int bytes); + +#endif /* BASE85_H */ diff --git a/cache.h b/cache.h index 2b66176479..b89f4c5980 100644 --- a/cache.h +++ b/cache.h @@ -593,10 +593,6 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -/* base85 */ -int decode_85(char *dst, const char *line, int linelen); -void encode_85(char *buf, const unsigned char *data, int bytes); - /* pkt-line.c */ void packet_trace_identity(const char *prog); diff --git a/diff.c b/diff.c index fa86d02319..e697f78a64 100644 --- a/diff.c +++ b/diff.c @@ -4,6 +4,7 @@ #include "cache.h" #include "abspath.h" #include "alloc.h" +#include "base85.h" #include "config.h" #include "convert.h" #include "environment.h" From b388633c5c47bf4fc12560d8b237ec0bd319ba4a Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:14 +0000 Subject: [PATCH 07/22] pkt-line.h: move declarations for pkt-line.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- builtin/bundle.c | 1 + builtin/clone.c | 1 + builtin/fetch.c | 1 + builtin/ls-remote.c | 1 + builtin/push.c | 1 + cache.h | 3 --- pkt-line.h | 2 ++ 7 files changed, 7 insertions(+), 3 deletions(-) diff --git a/builtin/bundle.c b/builtin/bundle.c index e68fc83d94..584d905d96 100644 --- a/builtin/bundle.c +++ b/builtin/bundle.c @@ -4,6 +4,7 @@ #include "setup.h" #include "strvec.h" #include "parse-options.h" +#include "pkt-line.h" #include "cache.h" #include "bundle.h" diff --git a/builtin/clone.c b/builtin/clone.c index 017ebc3faa..fa300f483e 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -39,6 +39,7 @@ #include "setup.h" #include "connected.h" #include "packfile.h" +#include "pkt-line.h" #include "list-objects-filter-options.h" #include "hook.h" #include "bundle.h" diff --git a/builtin/fetch.c b/builtin/fetch.c index 61e8ac113b..4fee2a6237 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -29,6 +29,7 @@ #include "utf8.h" #include "packfile.h" #include "pager.h" +#include "pkt-line.h" #include "list-objects-filter-options.h" #include "commit-reach.h" #include "branch.h" diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c index 11d9424804..7972febf72 100644 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@ -3,6 +3,7 @@ #include "gettext.h" #include "hex.h" #include "transport.h" +#include "pkt-line.h" #include "ref-filter.h" #include "remote.h" #include "refs.h" diff --git a/builtin/push.c b/builtin/push.c index 6001e4ae0a..7d2b0505aa 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -14,6 +14,7 @@ #include "remote.h" #include "transport.h" #include "parse-options.h" +#include "pkt-line.h" #include "submodule.h" #include "submodule-config.h" #include "send-pack.h" diff --git a/cache.h b/cache.h index b89f4c5980..fde782a96f 100644 --- a/cache.h +++ b/cache.h @@ -593,9 +593,6 @@ int df_name_compare(const char *name1, size_t len1, int mode1, int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); -/* pkt-line.c */ -void packet_trace_identity(const char *prog); - /* add */ /* * return 0 if success, 1 - if addition of a file failed and diff --git a/pkt-line.h b/pkt-line.h index 8e9846f315..7c23a4bfaf 100644 --- a/pkt-line.h +++ b/pkt-line.h @@ -246,4 +246,6 @@ void packet_writer_error(struct packet_writer *writer, const char *fmt, ...); void packet_writer_delim(struct packet_writer *writer); void packet_writer_flush(struct packet_writer *writer); +void packet_trace_identity(const char *prog); + #endif From d4ff2072abed071bc9fd291d179162da46d1427f Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:15 +0000 Subject: [PATCH 08/22] match-trees.h: move declarations for match-trees.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 4 ---- match-trees.c | 1 + match-trees.h | 10 ++++++++++ merge-ort.c | 1 + merge-recursive.c | 1 + t/helper/test-match-trees.c | 1 + 6 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 match-trees.h diff --git a/cache.h b/cache.h index fde782a96f..0570f9ad07 100644 --- a/cache.h +++ b/cache.h @@ -603,10 +603,6 @@ int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int /* diff.c */ extern int diff_auto_refresh_index; -/* match-trees.c */ -void shift_tree(struct repository *, const struct object_id *, const struct object_id *, struct object_id *, int); -void shift_tree_by(struct repository *, const struct object_id *, const struct object_id *, struct object_id *, const char *); - /* * whitespace rules. * used by both diff and apply diff --git a/match-trees.c b/match-trees.c index 5877fc64a8..9b78d99507 100644 --- a/match-trees.c +++ b/match-trees.c @@ -1,5 +1,6 @@ #include "cache.h" #include "hex.h" +#include "match-trees.h" #include "tree.h" #include "tree-walk.h" #include "object-store.h" diff --git a/match-trees.h b/match-trees.h new file mode 100644 index 0000000000..e3877acd58 --- /dev/null +++ b/match-trees.h @@ -0,0 +1,10 @@ +#ifndef MATCH_TREES_H +#define MATCH_TREES_H + +struct object_id; +struct repository; + +void shift_tree(struct repository *, const struct object_id *, const struct object_id *, struct object_id *, int); +void shift_tree_by(struct repository *, const struct object_id *, const struct object_id *, struct object_id *, const char *); + +#endif /* MATCH_TREES_H */ diff --git a/merge-ort.c b/merge-ort.c index 2c6a9ed9a4..65837db77f 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -31,6 +31,7 @@ #include "hex.h" #include "entry.h" #include "ll-merge.h" +#include "match-trees.h" #include "mem-pool.h" #include "object-name.h" #include "object-store.h" diff --git a/merge-recursive.c b/merge-recursive.c index d4d2ab05b2..8e87b6386d 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -22,6 +22,7 @@ #include "hex.h" #include "ll-merge.h" #include "lockfile.h" +#include "match-trees.h" #include "object-file.h" #include "object-name.h" #include "object-store.h" diff --git a/t/helper/test-match-trees.c b/t/helper/test-match-trees.c index 3808e1ac38..a498fece7a 100644 --- a/t/helper/test-match-trees.c +++ b/t/helper/test-match-trees.c @@ -1,6 +1,7 @@ #include "test-tool.h" #include "cache.h" #include "hex.h" +#include "match-trees.h" #include "object-name.h" #include "setup.h" #include "tree.h" From 641223137b6d78fa78946f09b472093a117dc04c Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:16 +0000 Subject: [PATCH 09/22] ws.h: move declarations for ws.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- apply.c | 1 + cache.h | 26 -------------------------- config.c | 1 + diff.c | 1 + environment.c | 1 - ws.c | 5 ++++- ws.h | 33 +++++++++++++++++++++++++++++++++ 7 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 ws.h diff --git a/apply.c b/apply.c index a65a354eef..2de8bb203d 100644 --- a/apply.c +++ b/apply.c @@ -32,6 +32,7 @@ #include "entry.h" #include "setup.h" #include "symlinks.h" +#include "ws.h" #include "wrapper.h" struct gitdiff_data { diff --git a/cache.h b/cache.h index 0570f9ad07..dde275c930 100644 --- a/cache.h +++ b/cache.h @@ -603,32 +603,6 @@ int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int /* diff.c */ extern int diff_auto_refresh_index; -/* - * whitespace rules. - * used by both diff and apply - * last two digits are tab width - */ -#define WS_BLANK_AT_EOL 0100 -#define WS_SPACE_BEFORE_TAB 0200 -#define WS_INDENT_WITH_NON_TAB 0400 -#define WS_CR_AT_EOL 01000 -#define WS_BLANK_AT_EOF 02000 -#define WS_TAB_IN_INDENT 04000 -#define WS_TRAILING_SPACE (WS_BLANK_AT_EOL|WS_BLANK_AT_EOF) -#define WS_DEFAULT_RULE (WS_TRAILING_SPACE|WS_SPACE_BEFORE_TAB|8) -#define WS_TAB_WIDTH_MASK 077 -/* All WS_* -- when extended, adapt diff.c emit_symbol */ -#define WS_RULE_MASK 07777 -extern unsigned whitespace_rule_cfg; -unsigned whitespace_rule(struct index_state *, const char *); -unsigned parse_whitespace_rule(const char *); -unsigned ws_check(const char *line, int len, unsigned ws_rule); -void ws_check_emit(const char *line, int len, unsigned ws_rule, FILE *stream, const char *set, const char *reset, const char *ws); -char *whitespace_error_string(unsigned ws); -void ws_fix_copy(struct strbuf *, const char *, int, unsigned, int *); -int ws_blank_line(const char *line, int len); -#define ws_tab_width(rule) ((rule) & WS_TAB_WIDTH_MASK) - /* ls-files */ void overlay_tree_on_index(struct index_state *istate, const char *tree_name, const char *prefix); diff --git a/config.c b/config.c index 9beba19b41..97063a0743 100644 --- a/config.c +++ b/config.c @@ -35,6 +35,7 @@ #include "setup.h" #include "trace2.h" #include "worktree.h" +#include "ws.h" #include "wrapper.h" #include "write-or-die.h" diff --git a/diff.c b/diff.c index e697f78a64..73d2ac0367 100644 --- a/diff.c +++ b/diff.c @@ -41,6 +41,7 @@ #include "object-name.h" #include "setup.h" #include "strmap.h" +#include "ws.h" #include "wrapper.h" #ifdef NO_FAST_WORKING_DIRECTORY diff --git a/environment.c b/environment.c index 8a96997539..541f0b19ac 100644 --- a/environment.c +++ b/environment.c @@ -67,7 +67,6 @@ int read_replace_refs = 1; enum eol core_eol = EOL_UNSET; int global_conv_flags_eol = CONV_EOL_RNDTRP_WARN; char *check_roundtrip_encoding = "SHIFT-JIS"; -unsigned whitespace_rule_cfg = WS_DEFAULT_RULE; enum branch_track git_branch_track = BRANCH_TRACK_REMOTE; enum rebase_setup_type autorebase = AUTOREBASE_NEVER; enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED; diff --git a/ws.c b/ws.c index 036ccb8ee9..d356d4ec9e 100644 --- a/ws.c +++ b/ws.c @@ -3,9 +3,12 @@ * * Copyright (c) 2007 Junio C Hamano */ -#include "cache.h" +#include "git-compat-util.h" #include "attr.h" #include "strbuf.h" +#include "ws.h" + +unsigned whitespace_rule_cfg = WS_DEFAULT_RULE; static struct whitespace_rule { const char *rule_name; diff --git a/ws.h b/ws.h new file mode 100644 index 0000000000..5ba676c559 --- /dev/null +++ b/ws.h @@ -0,0 +1,33 @@ +#ifndef WS_H +#define WS_H + +struct index_state; +struct strbuf; + +/* + * whitespace rules. + * used by both diff and apply + * last two digits are tab width + */ +#define WS_BLANK_AT_EOL 0100 +#define WS_SPACE_BEFORE_TAB 0200 +#define WS_INDENT_WITH_NON_TAB 0400 +#define WS_CR_AT_EOL 01000 +#define WS_BLANK_AT_EOF 02000 +#define WS_TAB_IN_INDENT 04000 +#define WS_TRAILING_SPACE (WS_BLANK_AT_EOL|WS_BLANK_AT_EOF) +#define WS_DEFAULT_RULE (WS_TRAILING_SPACE|WS_SPACE_BEFORE_TAB|8) +#define WS_TAB_WIDTH_MASK 077 +/* All WS_* -- when extended, adapt diff.c emit_symbol */ +#define WS_RULE_MASK 07777 +extern unsigned whitespace_rule_cfg; +unsigned whitespace_rule(struct index_state *, const char *); +unsigned parse_whitespace_rule(const char *); +unsigned ws_check(const char *line, int len, unsigned ws_rule); +void ws_check_emit(const char *line, int len, unsigned ws_rule, FILE *stream, const char *set, const char *reset, const char *ws); +char *whitespace_error_string(unsigned ws); +void ws_fix_copy(struct strbuf *, const char *, int, unsigned, int *); +int ws_blank_line(const char *line, int len); +#define ws_tab_width(rule) ((rule) & WS_TAB_WIDTH_MASK) + +#endif /* WS_H */ From 3467663d47a56f9debd86cae75963eee023b3b89 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:17 +0000 Subject: [PATCH 10/22] versioncmp.h: move declarations for versioncmp.c functions from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 2 -- ref-filter.c | 1 + versioncmp.c | 3 ++- versioncmp.h | 6 ++++++ 4 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 versioncmp.h diff --git a/cache.h b/cache.h index dde275c930..6955745ccc 100644 --- a/cache.h +++ b/cache.h @@ -648,6 +648,4 @@ int stat_validity_check(struct stat_validity *sv, const char *path); */ void stat_validity_update(struct stat_validity *sv, int fd); -int versioncmp(const char *s1, const char *s2); - #endif /* CACHE_H */ diff --git a/ref-filter.c b/ref-filter.c index 57a5884aec..5387f79be6 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -19,6 +19,7 @@ #include "revision.h" #include "utf8.h" #include "version.h" +#include "versioncmp.h" #include "trailer.h" #include "wt-status.h" #include "commit-slab.h" diff --git a/versioncmp.c b/versioncmp.c index 069ee94a4d..9b21ec142d 100644 --- a/versioncmp.c +++ b/versioncmp.c @@ -1,6 +1,7 @@ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "string-list.h" +#include "versioncmp.h" /* * versioncmp(): copied from string/strverscmp.c in glibc commit diff --git a/versioncmp.h b/versioncmp.h new file mode 100644 index 0000000000..879b510e82 --- /dev/null +++ b/versioncmp.h @@ -0,0 +1,6 @@ +#ifndef VERSIONCMP_H +#define VERSIONCMP_H + +int versioncmp(const char *s1, const char *s2); + +#endif /* VERSIONCMP_H */ From 592fc5b3495bf4ff17252d31109f1d9c0134684b Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:18 +0000 Subject: [PATCH 11/22] dir.h: move DTYPE defines from cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 14 -------------- dir.h | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/cache.h b/cache.h index 6955745ccc..ad741e70bc 100644 --- a/cache.h +++ b/cache.h @@ -10,20 +10,6 @@ #include "object.h" #include "statinfo.h" -#if defined(DT_UNKNOWN) && !defined(NO_D_TYPE_IN_DIRENT) -#define DTYPE(de) ((de)->d_type) -#else -#undef DT_UNKNOWN -#undef DT_DIR -#undef DT_REG -#undef DT_LNK -#define DT_UNKNOWN 0 -#define DT_DIR 1 -#define DT_REG 2 -#define DT_LNK 3 -#define DTYPE(de) DT_UNKNOWN -#endif - /* * Some mode bits are also used internally for computations. * diff --git a/dir.h b/dir.h index 3d6c87387e..79b85a01ee 100644 --- a/dir.h +++ b/dir.h @@ -640,4 +640,19 @@ static inline int starts_with_dot_dot_slash_native(const char *const path) return path_match_flags(path, what | PATH_MATCH_NATIVE); } + +#if defined(DT_UNKNOWN) && !defined(NO_D_TYPE_IN_DIRENT) +#define DTYPE(de) ((de)->d_type) +#else +#undef DT_UNKNOWN +#undef DT_DIR +#undef DT_REG +#undef DT_LNK +#define DT_UNKNOWN 0 +#define DT_DIR 1 +#define DT_REG 2 +#define DT_LNK 3 +#define DTYPE(de) DT_UNKNOWN +#endif + #endif From 23a517e4156714c3f8c8a4e36beccfee1d76ff1f Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:19 +0000 Subject: [PATCH 12/22] tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define from cache.h S_DIFFTREE_IFXMIN_NEQ is *only* used in tree-diff.c, so there is no point exposing it in cache.h. Move it to tree-diff.c. Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 15 --------------- tree-diff.c | 13 +++++++++++++ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/cache.h b/cache.h index ad741e70bc..7a46f300d9 100644 --- a/cache.h +++ b/cache.h @@ -10,21 +10,6 @@ #include "object.h" #include "statinfo.h" -/* - * Some mode bits are also used internally for computations. - * - * They *must* not overlap with any valid modes, and they *must* not be emitted - * to outside world - i.e. appear on disk or network. In other words, it's just - * temporary fields, which we internally use, but they have to stay in-house. - * - * ( such approach is valid, as standard S_IF* fits into 16 bits, and in Git - * codebase mode is `unsigned int` which is assumed to be at least 32 bits ) - */ - -/* used internally in tree-diff */ -#define S_DIFFTREE_IFXMIN_NEQ 0x80000000 - - /* * Basic data structures for the directory cache */ diff --git a/tree-diff.c b/tree-diff.c index 69031d7cba..a76e6dae61 100644 --- a/tree-diff.c +++ b/tree-diff.c @@ -6,6 +6,19 @@ #include "diffcore.h" #include "tree.h" +/* + * Some mode bits are also used internally for computations. + * + * They *must* not overlap with any valid modes, and they *must* not be emitted + * to outside world - i.e. appear on disk or network. In other words, it's just + * temporary fields, which we internally use, but they have to stay in-house. + * + * ( such approach is valid, as standard S_IF* fits into 16 bits, and in Git + * codebase mode is `unsigned int` which is assumed to be at least 32 bits ) + */ + +#define S_DIFFTREE_IFXMIN_NEQ 0x80000000 + /* * internal mode marker, saying a tree entry != entry of tp[imin] * (see ll_diff_tree_paths for what it means there) From d1cbe1e6d8a9cab2b4ffe8a17d34db214dce1e49 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:20 +0000 Subject: [PATCH 13/22] hash-ll.h: split out of hash.h to remove dependency on repository.h hash.h depends upon and includes repository.h, due to the definition and use of the_hash_algo (defined as the_repository->hash_algo). However, most headers trying to include hash.h are only interested in the layout of the structs like object_id. Move the parts of hash.h that do not depend upon repository.h into a new file hash-ll.h (the "low level" parts of hash.h), and adjust other files to use this new header where the convenience inline functions aren't needed. This allows hash.h and object.h to be fairly small, minimal headers. It also exposes a lot of hidden dependencies on both path.h (which was brought in by repository.h) and repository.h (which was previously implicitly brought in by object.h), so also adjust other files to be more explicit about what they depend upon. Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- alloc.c | 1 + apply.h | 2 +- branch.c | 1 + builtin/apply.c | 1 + builtin/archive.c | 1 + builtin/bundle.c | 1 + builtin/check-attr.c | 1 + builtin/check-ignore.c | 1 + builtin/checkout-index.c | 1 + builtin/clean.c | 1 + builtin/config.c | 1 + builtin/credential-cache.c | 1 + builtin/credential-store.c | 1 + builtin/for-each-repo.c | 2 + builtin/help.c | 1 + builtin/init-db.c | 1 + builtin/merge-index.c | 1 + builtin/merge-recursive.c | 2 + builtin/mv.c | 1 + builtin/push.c | 1 + builtin/read-tree.c | 1 + builtin/rerere.c | 1 + builtin/rm.c | 2 + builtin/show-branch.c | 2 + builtin/show-index.c | 2 + builtin/update-index.c | 2 + builtin/update-ref.c | 2 + builtin/upload-archive.c | 1 + builtin/worktree.c | 1 + checkout.c | 1 + checkout.h | 2 +- chunk-format.c | 1 + chunk-format.h | 2 +- common-main.c | 1 + compat/fsmonitor/fsm-ipc-darwin.c | 1 + compat/fsmonitor/fsm-ipc-win32.c | 1 + compat/precompose_utf8.c | 1 + compat/win32/trace2_win32_process_info.c | 1 + convert.h | 2 +- copy.c | 1 + csum-file.c | 1 + csum-file.h | 2 +- daemon.c | 1 + diffcore.h | 2 +- editor.c | 1 + exec-cmd.c | 1 + fsmonitor-ipc.c | 1 + gpg-interface.c | 1 + hash-ll.h | 276 +++++++++++++++++++ hash-lookup.c | 1 + hash.h | 273 +----------------- hashmap.h | 2 +- hex.c | 1 + hex.h | 2 +- hook.c | 1 + khash.h | 1 + ls-refs.c | 1 + merge-ort-wrappers.c | 1 + merge-ort.h | 2 +- negotiator/default.c | 1 + negotiator/skipping.c | 1 + object-file.h | 2 + object.h | 3 +- oidmap.c | 1 + oidtree.h | 2 +- parallel-checkout.c | 1 + pathspec.c | 1 + progress.c | 1 + protocol-caps.c | 2 +- rebase-interactive.c | 1 + refs/files-backend.c | 1 + refs/packed-backend.c | 1 + refs/ref-cache.c | 2 + refs/ref-cache.h | 3 +- refspec.c | 1 + reftable/dump.c | 2 +- reftable/system.h | 2 +- reset.h | 2 +- resolve-undo.c | 1 + resolve-undo.h | 2 +- split-index.c | 1 + split-index.h | 2 +- strbuf.c | 1 + t/helper/test-bloom.c | 1 + t/helper/test-cache-tree.c | 1 + t/helper/test-dump-cache-tree.c | 2 + t/helper/test-dump-fsmonitor.c | 1 + t/helper/test-dump-untracked-cache.c | 1 + t/helper/test-example-decorate.c | 1 + t/helper/test-fsmonitor-client.c | 1 + t/helper/test-lazy-init-name-hash.c | 1 + t/helper/test-match-trees.c | 1 + t/helper/test-oidmap.c | 1 + t/helper/test-path-utils.c | 1 + t/helper/test-read-cache.c | 1 + t/helper/test-scrap-cache-tree.c | 1 + t/helper/test-submodule-config.c | 2 + t/helper/test-submodule-nested-repo-config.c | 1 + t/helper/test-submodule.c | 1 + t/helper/test-trace2.c | 1 + t/helper/test-write-cache.c | 1 + trace2.c | 1 + trace2/tr2_tgt_event.c | 1 + trace2/tr2_tgt_normal.c | 1 + trace2/tr2_tgt_perf.c | 1 + tree-walk.h | 3 +- tree.h | 1 + wrapper.c | 1 + xdiff-interface.h | 2 +- 109 files changed, 398 insertions(+), 292 deletions(-) create mode 100644 hash-ll.h diff --git a/alloc.c b/alloc.c index 2886aa9354..377e80f5dd 100644 --- a/alloc.c +++ b/alloc.c @@ -13,6 +13,7 @@ #include "blob.h" #include "tree.h" #include "commit.h" +#include "repository.h" #include "tag.h" #include "alloc.h" diff --git a/apply.h b/apply.h index b9f18ce87d..7cd38b1443 100644 --- a/apply.h +++ b/apply.h @@ -1,7 +1,7 @@ #ifndef APPLY_H #define APPLY_H -#include "hash.h" +#include "hash-ll.h" #include "lockfile.h" #include "string-list.h" #include "strmap.h" diff --git a/branch.c b/branch.c index 7df982693a..9415ee3f34 100644 --- a/branch.c +++ b/branch.c @@ -9,6 +9,7 @@ #include "refs.h" #include "refspec.h" #include "remote.h" +#include "repository.h" #include "sequencer.h" #include "commit.h" #include "worktree.h" diff --git a/builtin/apply.c b/builtin/apply.c index fe72c0ec3e..e3ff02a09e 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -2,6 +2,7 @@ #include "builtin.h" #include "gettext.h" #include "parse-options.h" +#include "repository.h" #include "apply.h" static const char * const apply_usage[] = { diff --git a/builtin/archive.c b/builtin/archive.c index d13934f1a8..b0eaa3c14a 100644 --- a/builtin/archive.c +++ b/builtin/archive.c @@ -9,6 +9,7 @@ #include "transport.h" #include "parse-options.h" #include "pkt-line.h" +#include "repository.h" #include "sideband.h" static void create_output_file(const char *output_file) diff --git a/builtin/bundle.c b/builtin/bundle.c index 584d905d96..44113389d7 100644 --- a/builtin/bundle.c +++ b/builtin/bundle.c @@ -5,6 +5,7 @@ #include "strvec.h" #include "parse-options.h" #include "pkt-line.h" +#include "repository.h" #include "cache.h" #include "bundle.h" diff --git a/builtin/check-attr.c b/builtin/check-attr.c index 037bf1aaa2..b2b678847f 100644 --- a/builtin/check-attr.c +++ b/builtin/check-attr.c @@ -7,6 +7,7 @@ #include "gettext.h" #include "object-name.h" #include "quote.h" +#include "repository.h" #include "setup.h" #include "parse-options.h" #include "write-or-die.h" diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c index 9401dad007..e4b78782a3 100644 --- a/builtin/check-ignore.c +++ b/builtin/check-ignore.c @@ -7,6 +7,7 @@ #include "quote.h" #include "pathspec.h" #include "parse-options.h" +#include "repository.h" #include "submodule.h" #include "write-or-die.h" diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index 7df673e3e7..9375a05539 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -11,6 +11,7 @@ #include "gettext.h" #include "lockfile.h" #include "quote.h" +#include "repository.h" #include "cache-tree.h" #include "parse-options.h" #include "entry.h" diff --git a/builtin/clean.c b/builtin/clean.c index 14c0d555ea..78852d28ce 100644 --- a/builtin/clean.c +++ b/builtin/clean.c @@ -14,6 +14,7 @@ #include "dir.h" #include "gettext.h" #include "parse-options.h" +#include "repository.h" #include "setup.h" #include "string-list.h" #include "quote.h" diff --git a/builtin/config.c b/builtin/config.c index 9401f1e5e3..ff2fe8ef12 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -9,6 +9,7 @@ #include "ident.h" #include "parse-options.h" #include "urlmatch.h" +#include "path.h" #include "quote.h" #include "setup.h" #include "worktree.h" diff --git a/builtin/credential-cache.c b/builtin/credential-cache.c index 508da4c6e4..0ffacfdd83 100644 --- a/builtin/credential-cache.c +++ b/builtin/credential-cache.c @@ -1,6 +1,7 @@ #include "builtin.h" #include "gettext.h" #include "parse-options.h" +#include "path.h" #include "wrapper.h" #include "write-or-die.h" diff --git a/builtin/credential-store.c b/builtin/credential-store.c index 8977604eb9..30c6ccf56c 100644 --- a/builtin/credential-store.c +++ b/builtin/credential-store.c @@ -3,6 +3,7 @@ #include "gettext.h" #include "lockfile.h" #include "credential.h" +#include "path.h" #include "string-list.h" #include "parse-options.h" #include "write-or-die.h" diff --git a/builtin/for-each-repo.c b/builtin/for-each-repo.c index 27425c2fc9..c28b0b3543 100644 --- a/builtin/for-each-repo.c +++ b/builtin/for-each-repo.c @@ -3,6 +3,8 @@ #include "builtin.h" #include "gettext.h" #include "parse-options.h" +#include "path.h" +#include "repository.h" #include "run-command.h" #include "string-list.h" diff --git a/builtin/help.c b/builtin/help.c index 128aa83099..d3cf4af3f6 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -8,6 +8,7 @@ #include "gettext.h" #include "pager.h" #include "parse-options.h" +#include "path.h" #include "run-command.h" #include "config-list.h" #include "help.h" diff --git a/builtin/init-db.c b/builtin/init-db.c index cda6ee75eb..aef4036105 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -14,6 +14,7 @@ #include "exec-cmd.h" #include "object-file.h" #include "parse-options.h" +#include "path.h" #include "setup.h" #include "worktree.h" #include "wrapper.h" diff --git a/builtin/merge-index.c b/builtin/merge-index.c index c875f5d37e..f044382ed8 100644 --- a/builtin/merge-index.c +++ b/builtin/merge-index.c @@ -1,6 +1,7 @@ #define USE_THE_INDEX_VARIABLE #include "builtin.h" #include "hex.h" +#include "repository.h" #include "run-command.h" static const char *pgm; diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c index fa1035405c..90da9d0774 100644 --- a/builtin/merge-recursive.c +++ b/builtin/merge-recursive.c @@ -3,9 +3,11 @@ #include "advice.h" #include "commit.h" #include "gettext.h" +#include "hash.h" #include "tag.h" #include "merge-recursive.h" #include "object-name.h" +#include "repository.h" #include "xdiff-interface.h" static const char builtin_merge_recursive_usage[] = diff --git a/builtin/mv.c b/builtin/mv.c index 32935af48e..665bd27448 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -18,6 +18,7 @@ #include "cache-tree.h" #include "string-list.h" #include "parse-options.h" +#include "repository.h" #include "setup.h" #include "submodule.h" #include "entry.h" diff --git a/builtin/push.c b/builtin/push.c index 7d2b0505aa..4e5780dd50 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -15,6 +15,7 @@ #include "transport.h" #include "parse-options.h" #include "pkt-line.h" +#include "repository.h" #include "submodule.h" #include "submodule-config.h" #include "send-pack.h" diff --git a/builtin/read-tree.c b/builtin/read-tree.c index d61cbad96d..440f19b1b8 100644 --- a/builtin/read-tree.c +++ b/builtin/read-tree.c @@ -19,6 +19,7 @@ #include "dir.h" #include "builtin.h" #include "parse-options.h" +#include "repository.h" #include "resolve-undo.h" #include "setup.h" #include "submodule.h" diff --git a/builtin/rerere.c b/builtin/rerere.c index d4a03707b1..d4bd52797f 100644 --- a/builtin/rerere.c +++ b/builtin/rerere.c @@ -4,6 +4,7 @@ #include "dir.h" #include "gettext.h" #include "parse-options.h" +#include "repository.h" #include "string-list.h" #include "rerere.h" #include "wrapper.h" diff --git a/builtin/rm.c b/builtin/rm.c index d36072252e..b4589c824c 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -12,9 +12,11 @@ #include "dir.h" #include "cache-tree.h" #include "gettext.h" +#include "hash.h" #include "tree-walk.h" #include "object-name.h" #include "parse-options.h" +#include "repository.h" #include "string-list.h" #include "setup.h" #include "submodule.h" diff --git a/builtin/show-branch.c b/builtin/show-branch.c index 20030b75e3..7ef4a642c1 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -2,6 +2,7 @@ #include "config.h" #include "environment.h" #include "gettext.h" +#include "hash.h" #include "hex.h" #include "pretty.h" #include "refs.h" @@ -10,6 +11,7 @@ #include "strvec.h" #include "object-name.h" #include "parse-options.h" +#include "repository.h" #include "dir.h" #include "commit-slab.h" #include "date.h" diff --git a/builtin/show-index.c b/builtin/show-index.c index d4bbbbcd6c..d839e55335 100644 --- a/builtin/show-index.c +++ b/builtin/show-index.c @@ -1,9 +1,11 @@ #include "builtin.h" #include "cache.h" #include "gettext.h" +#include "hash.h" #include "hex.h" #include "pack.h" #include "parse-options.h" +#include "repository.h" static const char *const show_index_usage[] = { "git show-index [--object-format=]", diff --git a/builtin/update-index.c b/builtin/update-index.c index 58bbc80db7..5fab9ad2ec 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -9,6 +9,7 @@ #include "config.h" #include "environment.h" #include "gettext.h" +#include "hash.h" #include "hex.h" #include "lockfile.h" #include "quote.h" @@ -21,6 +22,7 @@ #include "parse-options.h" #include "pathspec.h" #include "dir.h" +#include "repository.h" #include "setup.h" #include "split-index.h" #include "symlinks.h" diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 6ca85420c3..0c59b1c9ef 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -1,11 +1,13 @@ #include "cache.h" #include "config.h" #include "gettext.h" +#include "hash.h" #include "refs.h" #include "builtin.h" #include "object-name.h" #include "parse-options.h" #include "quote.h" +#include "repository.h" #include "strvec.h" static const char * const git_update_ref_usage[] = { diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c index 945ee2b412..5be97ca1af 100644 --- a/builtin/upload-archive.c +++ b/builtin/upload-archive.c @@ -6,6 +6,7 @@ #include "archive.h" #include "pkt-line.h" #include "sideband.h" +#include "repository.h" #include "run-command.h" #include "strvec.h" diff --git a/builtin/worktree.c b/builtin/worktree.c index 0b411e9dee..5d3ca819e7 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -14,6 +14,7 @@ #include "strvec.h" #include "branch.h" #include "refs.h" +#include "repository.h" #include "run-command.h" #include "hook.h" #include "sigchain.h" diff --git a/checkout.c b/checkout.c index 04238b2713..4256e71a7c 100644 --- a/checkout.c +++ b/checkout.c @@ -2,6 +2,7 @@ #include "object-name.h" #include "remote.h" #include "refspec.h" +#include "repository.h" #include "checkout.h" #include "config.h" #include "strbuf.h" diff --git a/checkout.h b/checkout.h index 1917f3b323..3c514a5ab4 100644 --- a/checkout.h +++ b/checkout.h @@ -1,7 +1,7 @@ #ifndef CHECKOUT_H #define CHECKOUT_H -#include "hash.h" +#include "hash-ll.h" /* * Check if the branch name uniquely matches a branch name on a remote diff --git a/chunk-format.c b/chunk-format.c index 60a73c1b14..e7d613c907 100644 --- a/chunk-format.c +++ b/chunk-format.c @@ -3,6 +3,7 @@ #include "chunk-format.h" #include "csum-file.h" #include "gettext.h" +#include "hash.h" #include "trace2.h" /* diff --git a/chunk-format.h b/chunk-format.h index 025c38f938..c7794e84ad 100644 --- a/chunk-format.h +++ b/chunk-format.h @@ -1,7 +1,7 @@ #ifndef CHUNK_FORMAT_H #define CHUNK_FORMAT_H -#include "hash.h" +#include "hash-ll.h" struct hashfile; struct chunkfile; diff --git a/common-main.c b/common-main.c index 601a875e2f..8ab50fa37a 100644 --- a/common-main.c +++ b/common-main.c @@ -2,6 +2,7 @@ #include "exec-cmd.h" #include "gettext.h" #include "attr.h" +#include "repository.h" #include "setup.h" #include "strbuf.h" #include "trace2.h" diff --git a/compat/fsmonitor/fsm-ipc-darwin.c b/compat/fsmonitor/fsm-ipc-darwin.c index eb25123fa1..e62f093cc1 100644 --- a/compat/fsmonitor/fsm-ipc-darwin.c +++ b/compat/fsmonitor/fsm-ipc-darwin.c @@ -1,6 +1,7 @@ #include "cache.h" #include "config.h" #include "hex.h" +#include "repository.h" #include "strbuf.h" #include "fsmonitor.h" #include "fsmonitor-ipc.h" diff --git a/compat/fsmonitor/fsm-ipc-win32.c b/compat/fsmonitor/fsm-ipc-win32.c index c9536dfb66..8928fa93ce 100644 --- a/compat/fsmonitor/fsm-ipc-win32.c +++ b/compat/fsmonitor/fsm-ipc-win32.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "config.h" #include "fsmonitor-ipc.h" +#include "path.h" const char *fsmonitor_ipc__get_path(struct repository *r) { static char *ret; diff --git a/compat/precompose_utf8.c b/compat/precompose_utf8.c index 8a9881db07..a4d11376ba 100644 --- a/compat/precompose_utf8.c +++ b/compat/precompose_utf8.c @@ -9,6 +9,7 @@ #include "config.h" #include "environment.h" #include "gettext.h" +#include "path.h" #include "utf8.h" #include "precompose_utf8.h" diff --git a/compat/win32/trace2_win32_process_info.c b/compat/win32/trace2_win32_process_info.c index e3e895c78a..a4e33768f4 100644 --- a/compat/win32/trace2_win32_process_info.c +++ b/compat/win32/trace2_win32_process_info.c @@ -1,5 +1,6 @@ #include "../../cache.h" #include "../../json-writer.h" +#include "../../repository.h" #include "../../trace2.h" #include "lazyload.h" #include diff --git a/convert.h b/convert.h index 0a6e4086b8..d925589444 100644 --- a/convert.h +++ b/convert.h @@ -4,7 +4,7 @@ #ifndef CONVERT_H #define CONVERT_H -#include "hash.h" +#include "hash-ll.h" #include "string-list.h" struct index_state; diff --git a/copy.c b/copy.c index db6b615c18..923d8a6dc6 100644 --- a/copy.c +++ b/copy.c @@ -1,5 +1,6 @@ #include "cache.h" #include "copy.h" +#include "path.h" #include "wrapper.h" int copy_fd(int ifd, int ofd) diff --git a/csum-file.c b/csum-file.c index 82ae2973d3..daf9b06dff 100644 --- a/csum-file.c +++ b/csum-file.c @@ -10,6 +10,7 @@ #include "git-compat-util.h" #include "progress.h" #include "csum-file.h" +#include "hash.h" #include "wrapper.h" static void verify_buffer_or_die(struct hashfile *f, diff --git a/csum-file.h b/csum-file.h index 566e05cbd2..bc5bec27ac 100644 --- a/csum-file.h +++ b/csum-file.h @@ -1,7 +1,7 @@ #ifndef CSUM_FILE_H #define CSUM_FILE_H -#include "hash.h" +#include "hash-ll.h" #include "write-or-die.h" struct progress; diff --git a/daemon.c b/daemon.c index 75c3c06457..f89f99d7ef 100644 --- a/daemon.c +++ b/daemon.c @@ -3,6 +3,7 @@ #include "alloc.h" #include "config.h" #include "environment.h" +#include "path.h" #include "pkt-line.h" #include "protocol.h" #include "run-command.h" diff --git a/diffcore.h b/diffcore.h index 1701ed50b9..5ffe4ec788 100644 --- a/diffcore.h +++ b/diffcore.h @@ -4,7 +4,7 @@ #ifndef DIFFCORE_H #define DIFFCORE_H -#include "hash.h" +#include "hash-ll.h" struct diff_options; struct mem_pool; diff --git a/editor.c b/editor.c index b34e10606d..38c5dbbb79 100644 --- a/editor.c +++ b/editor.c @@ -6,6 +6,7 @@ #include "environment.h" #include "gettext.h" #include "pager.h" +#include "path.h" #include "strbuf.h" #include "strvec.h" #include "run-command.h" diff --git a/exec-cmd.c b/exec-cmd.c index 6f61846389..1e34e48c0e 100644 --- a/exec-cmd.c +++ b/exec-cmd.c @@ -3,6 +3,7 @@ #include "environment.h" #include "exec-cmd.h" #include "gettext.h" +#include "path.h" #include "quote.h" #include "strvec.h" #include "trace.h" diff --git a/fsmonitor-ipc.c b/fsmonitor-ipc.c index 866828e299..6a6a89764a 100644 --- a/fsmonitor-ipc.c +++ b/fsmonitor-ipc.c @@ -3,6 +3,7 @@ #include "gettext.h" #include "simple-ipc.h" #include "fsmonitor-ipc.h" +#include "repository.h" #include "run-command.h" #include "strbuf.h" #include "trace2.h" diff --git a/gpg-interface.c b/gpg-interface.c index aceeb08336..8615dcd4b4 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -7,6 +7,7 @@ #include "dir.h" #include "ident.h" #include "gpg-interface.h" +#include "path.h" #include "sigchain.h" #include "tempfile.h" #include "alias.h" diff --git a/hash-ll.h b/hash-ll.h new file mode 100644 index 0000000000..8050925137 --- /dev/null +++ b/hash-ll.h @@ -0,0 +1,276 @@ +#ifndef HASH_LL_H +#define HASH_LL_H + +#if defined(SHA1_APPLE) +#include +#elif defined(SHA1_OPENSSL) +#include +#elif defined(SHA1_DC) +#include "sha1dc_git.h" +#else /* SHA1_BLK */ +#include "block-sha1/sha1.h" +#endif + +#if defined(SHA256_NETTLE) +#include "sha256/nettle.h" +#elif defined(SHA256_GCRYPT) +#define SHA256_NEEDS_CLONE_HELPER +#include "sha256/gcrypt.h" +#elif defined(SHA256_OPENSSL) +#include +#else +#include "sha256/block/sha256.h" +#endif + +#ifndef platform_SHA_CTX +/* + * platform's underlying implementation of SHA-1; could be OpenSSL, + * blk_SHA, Apple CommonCrypto, etc... Note that the relevant + * SHA-1 header may have already defined platform_SHA_CTX for our + * own implementations like block-sha1, so we list + * the default for OpenSSL compatible SHA-1 implementations here. + */ +#define platform_SHA_CTX SHA_CTX +#define platform_SHA1_Init SHA1_Init +#define platform_SHA1_Update SHA1_Update +#define platform_SHA1_Final SHA1_Final +#endif + +#define git_SHA_CTX platform_SHA_CTX +#define git_SHA1_Init platform_SHA1_Init +#define git_SHA1_Update platform_SHA1_Update +#define git_SHA1_Final platform_SHA1_Final + +#ifndef platform_SHA256_CTX +#define platform_SHA256_CTX SHA256_CTX +#define platform_SHA256_Init SHA256_Init +#define platform_SHA256_Update SHA256_Update +#define platform_SHA256_Final SHA256_Final +#endif + +#define git_SHA256_CTX platform_SHA256_CTX +#define git_SHA256_Init platform_SHA256_Init +#define git_SHA256_Update platform_SHA256_Update +#define git_SHA256_Final platform_SHA256_Final + +#ifdef platform_SHA256_Clone +#define git_SHA256_Clone platform_SHA256_Clone +#endif + +#ifdef SHA1_MAX_BLOCK_SIZE +#include "compat/sha1-chunked.h" +#undef git_SHA1_Update +#define git_SHA1_Update git_SHA1_Update_Chunked +#endif + +static inline void git_SHA1_Clone(git_SHA_CTX *dst, const git_SHA_CTX *src) +{ + memcpy(dst, src, sizeof(*dst)); +} + +#ifndef SHA256_NEEDS_CLONE_HELPER +static inline void git_SHA256_Clone(git_SHA256_CTX *dst, const git_SHA256_CTX *src) +{ + memcpy(dst, src, sizeof(*dst)); +} +#endif + +/* + * Note that these constants are suitable for indexing the hash_algos array and + * comparing against each other, but are otherwise arbitrary, so they should not + * be exposed to the user or serialized to disk. To know whether a + * git_hash_algo struct points to some usable hash function, test the format_id + * field for being non-zero. Use the name field for user-visible situations and + * the format_id field for fixed-length fields on disk. + */ +/* An unknown hash function. */ +#define GIT_HASH_UNKNOWN 0 +/* SHA-1 */ +#define GIT_HASH_SHA1 1 +/* SHA-256 */ +#define GIT_HASH_SHA256 2 +/* Number of algorithms supported (including unknown). */ +#define GIT_HASH_NALGOS (GIT_HASH_SHA256 + 1) + +/* "sha1", big-endian */ +#define GIT_SHA1_FORMAT_ID 0x73686131 + +/* The length in bytes and in hex digits of an object name (SHA-1 value). */ +#define GIT_SHA1_RAWSZ 20 +#define GIT_SHA1_HEXSZ (2 * GIT_SHA1_RAWSZ) +/* The block size of SHA-1. */ +#define GIT_SHA1_BLKSZ 64 + +/* "s256", big-endian */ +#define GIT_SHA256_FORMAT_ID 0x73323536 + +/* The length in bytes and in hex digits of an object name (SHA-256 value). */ +#define GIT_SHA256_RAWSZ 32 +#define GIT_SHA256_HEXSZ (2 * GIT_SHA256_RAWSZ) +/* The block size of SHA-256. */ +#define GIT_SHA256_BLKSZ 64 + +/* The length in byte and in hex digits of the largest possible hash value. */ +#define GIT_MAX_RAWSZ GIT_SHA256_RAWSZ +#define GIT_MAX_HEXSZ GIT_SHA256_HEXSZ +/* The largest possible block size for any supported hash. */ +#define GIT_MAX_BLKSZ GIT_SHA256_BLKSZ + +struct object_id { + unsigned char hash[GIT_MAX_RAWSZ]; + int algo; /* XXX requires 4-byte alignment */ +}; + +#define GET_OID_QUIETLY 01 +#define GET_OID_COMMIT 02 +#define GET_OID_COMMITTISH 04 +#define GET_OID_TREE 010 +#define GET_OID_TREEISH 020 +#define GET_OID_BLOB 040 +#define GET_OID_FOLLOW_SYMLINKS 0100 +#define GET_OID_RECORD_PATH 0200 +#define GET_OID_ONLY_TO_DIE 04000 +#define GET_OID_REQUIRE_PATH 010000 + +#define GET_OID_DISAMBIGUATORS \ + (GET_OID_COMMIT | GET_OID_COMMITTISH | \ + GET_OID_TREE | GET_OID_TREEISH | \ + GET_OID_BLOB) + +enum get_oid_result { + FOUND = 0, + MISSING_OBJECT = -1, /* The requested object is missing */ + SHORT_NAME_AMBIGUOUS = -2, + /* The following only apply when symlinks are followed */ + DANGLING_SYMLINK = -4, /* + * The initial symlink is there, but + * (transitively) points to a missing + * in-tree file + */ + SYMLINK_LOOP = -5, + NOT_DIR = -6, /* + * Somewhere along the symlink chain, a path is + * requested which contains a file as a + * non-final element. + */ +}; + +/* A suitably aligned type for stack allocations of hash contexts. */ +union git_hash_ctx { + git_SHA_CTX sha1; + git_SHA256_CTX sha256; +}; +typedef union git_hash_ctx git_hash_ctx; + +typedef void (*git_hash_init_fn)(git_hash_ctx *ctx); +typedef void (*git_hash_clone_fn)(git_hash_ctx *dst, const git_hash_ctx *src); +typedef void (*git_hash_update_fn)(git_hash_ctx *ctx, const void *in, size_t len); +typedef void (*git_hash_final_fn)(unsigned char *hash, git_hash_ctx *ctx); +typedef void (*git_hash_final_oid_fn)(struct object_id *oid, git_hash_ctx *ctx); + +struct git_hash_algo { + /* + * The name of the algorithm, as appears in the config file and in + * messages. + */ + const char *name; + + /* A four-byte version identifier, used in pack indices. */ + uint32_t format_id; + + /* The length of the hash in binary. */ + size_t rawsz; + + /* The length of the hash in hex characters. */ + size_t hexsz; + + /* The block size of the hash. */ + size_t blksz; + + /* The hash initialization function. */ + git_hash_init_fn init_fn; + + /* The hash context cloning function. */ + git_hash_clone_fn clone_fn; + + /* The hash update function. */ + git_hash_update_fn update_fn; + + /* The hash finalization function. */ + git_hash_final_fn final_fn; + + /* The hash finalization function for object IDs. */ + git_hash_final_oid_fn final_oid_fn; + + /* The OID of the empty tree. */ + const struct object_id *empty_tree; + + /* The OID of the empty blob. */ + const struct object_id *empty_blob; + + /* The all-zeros OID. */ + const struct object_id *null_oid; +}; +extern const struct git_hash_algo hash_algos[GIT_HASH_NALGOS]; + +/* + * Return a GIT_HASH_* constant based on the name. Returns GIT_HASH_UNKNOWN if + * the name doesn't match a known algorithm. + */ +int hash_algo_by_name(const char *name); +/* Identical, except based on the format ID. */ +int hash_algo_by_id(uint32_t format_id); +/* Identical, except based on the length. */ +int hash_algo_by_length(int len); +/* Identical, except for a pointer to struct git_hash_algo. */ +static inline int hash_algo_by_ptr(const struct git_hash_algo *p) +{ + return p - hash_algos; +} + +const struct object_id *null_oid(void); + +static inline int hashcmp_algop(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop) +{ + /* + * Teach the compiler that there are only two possibilities of hash size + * here, so that it can optimize for this case as much as possible. + */ + if (algop->rawsz == GIT_MAX_RAWSZ) + return memcmp(sha1, sha2, GIT_MAX_RAWSZ); + return memcmp(sha1, sha2, GIT_SHA1_RAWSZ); +} + +static inline int hasheq_algop(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop) +{ + /* + * We write this here instead of deferring to hashcmp so that the + * compiler can properly inline it and avoid calling memcmp. + */ + if (algop->rawsz == GIT_MAX_RAWSZ) + return !memcmp(sha1, sha2, GIT_MAX_RAWSZ); + return !memcmp(sha1, sha2, GIT_SHA1_RAWSZ); +} + +static inline void oidcpy(struct object_id *dst, const struct object_id *src) +{ + memcpy(dst->hash, src->hash, GIT_MAX_RAWSZ); + dst->algo = src->algo; +} + +static inline struct object_id *oiddup(const struct object_id *src) +{ + struct object_id *dst = xmalloc(sizeof(struct object_id)); + oidcpy(dst, src); + return dst; +} + +static inline void oid_set_algo(struct object_id *oid, const struct git_hash_algo *algop) +{ + oid->algo = hash_algo_by_ptr(algop); +} + +const char *empty_tree_oid_hex(void); +const char *empty_blob_oid_hex(void); + +#endif diff --git a/hash-lookup.c b/hash-lookup.c index b98ed5e11e..bb54dfde9c 100644 --- a/hash-lookup.c +++ b/hash-lookup.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "hash.h" #include "hash-lookup.h" static uint32_t take2(const struct object_id *oid, size_t ofs) diff --git a/hash.h b/hash.h index d39f73618c..615ae0691d 100644 --- a/hash.h +++ b/hash.h @@ -1,250 +1,11 @@ #ifndef HASH_H #define HASH_H +#include "hash-ll.h" #include "repository.h" -#if defined(SHA1_APPLE) -#include -#elif defined(SHA1_OPENSSL) -#include -#elif defined(SHA1_DC) -#include "sha1dc_git.h" -#else /* SHA1_BLK */ -#include "block-sha1/sha1.h" -#endif - -#if defined(SHA256_NETTLE) -#include "sha256/nettle.h" -#elif defined(SHA256_GCRYPT) -#define SHA256_NEEDS_CLONE_HELPER -#include "sha256/gcrypt.h" -#elif defined(SHA256_OPENSSL) -#include -#else -#include "sha256/block/sha256.h" -#endif - -#ifndef platform_SHA_CTX -/* - * platform's underlying implementation of SHA-1; could be OpenSSL, - * blk_SHA, Apple CommonCrypto, etc... Note that the relevant - * SHA-1 header may have already defined platform_SHA_CTX for our - * own implementations like block-sha1, so we list - * the default for OpenSSL compatible SHA-1 implementations here. - */ -#define platform_SHA_CTX SHA_CTX -#define platform_SHA1_Init SHA1_Init -#define platform_SHA1_Update SHA1_Update -#define platform_SHA1_Final SHA1_Final -#endif - -#define git_SHA_CTX platform_SHA_CTX -#define git_SHA1_Init platform_SHA1_Init -#define git_SHA1_Update platform_SHA1_Update -#define git_SHA1_Final platform_SHA1_Final - -#ifndef platform_SHA256_CTX -#define platform_SHA256_CTX SHA256_CTX -#define platform_SHA256_Init SHA256_Init -#define platform_SHA256_Update SHA256_Update -#define platform_SHA256_Final SHA256_Final -#endif - -#define git_SHA256_CTX platform_SHA256_CTX -#define git_SHA256_Init platform_SHA256_Init -#define git_SHA256_Update platform_SHA256_Update -#define git_SHA256_Final platform_SHA256_Final - -#ifdef platform_SHA256_Clone -#define git_SHA256_Clone platform_SHA256_Clone -#endif - -#ifdef SHA1_MAX_BLOCK_SIZE -#include "compat/sha1-chunked.h" -#undef git_SHA1_Update -#define git_SHA1_Update git_SHA1_Update_Chunked -#endif - -static inline void git_SHA1_Clone(git_SHA_CTX *dst, const git_SHA_CTX *src) -{ - memcpy(dst, src, sizeof(*dst)); -} - -#ifndef SHA256_NEEDS_CLONE_HELPER -static inline void git_SHA256_Clone(git_SHA256_CTX *dst, const git_SHA256_CTX *src) -{ - memcpy(dst, src, sizeof(*dst)); -} -#endif - -/* - * Note that these constants are suitable for indexing the hash_algos array and - * comparing against each other, but are otherwise arbitrary, so they should not - * be exposed to the user or serialized to disk. To know whether a - * git_hash_algo struct points to some usable hash function, test the format_id - * field for being non-zero. Use the name field for user-visible situations and - * the format_id field for fixed-length fields on disk. - */ -/* An unknown hash function. */ -#define GIT_HASH_UNKNOWN 0 -/* SHA-1 */ -#define GIT_HASH_SHA1 1 -/* SHA-256 */ -#define GIT_HASH_SHA256 2 -/* Number of algorithms supported (including unknown). */ -#define GIT_HASH_NALGOS (GIT_HASH_SHA256 + 1) - -/* "sha1", big-endian */ -#define GIT_SHA1_FORMAT_ID 0x73686131 - -/* The length in bytes and in hex digits of an object name (SHA-1 value). */ -#define GIT_SHA1_RAWSZ 20 -#define GIT_SHA1_HEXSZ (2 * GIT_SHA1_RAWSZ) -/* The block size of SHA-1. */ -#define GIT_SHA1_BLKSZ 64 - -/* "s256", big-endian */ -#define GIT_SHA256_FORMAT_ID 0x73323536 - -/* The length in bytes and in hex digits of an object name (SHA-256 value). */ -#define GIT_SHA256_RAWSZ 32 -#define GIT_SHA256_HEXSZ (2 * GIT_SHA256_RAWSZ) -/* The block size of SHA-256. */ -#define GIT_SHA256_BLKSZ 64 - -/* The length in byte and in hex digits of the largest possible hash value. */ -#define GIT_MAX_RAWSZ GIT_SHA256_RAWSZ -#define GIT_MAX_HEXSZ GIT_SHA256_HEXSZ -/* The largest possible block size for any supported hash. */ -#define GIT_MAX_BLKSZ GIT_SHA256_BLKSZ - -struct object_id { - unsigned char hash[GIT_MAX_RAWSZ]; - int algo; /* XXX requires 4-byte alignment */ -}; - -#define GET_OID_QUIETLY 01 -#define GET_OID_COMMIT 02 -#define GET_OID_COMMITTISH 04 -#define GET_OID_TREE 010 -#define GET_OID_TREEISH 020 -#define GET_OID_BLOB 040 -#define GET_OID_FOLLOW_SYMLINKS 0100 -#define GET_OID_RECORD_PATH 0200 -#define GET_OID_ONLY_TO_DIE 04000 -#define GET_OID_REQUIRE_PATH 010000 - -#define GET_OID_DISAMBIGUATORS \ - (GET_OID_COMMIT | GET_OID_COMMITTISH | \ - GET_OID_TREE | GET_OID_TREEISH | \ - GET_OID_BLOB) - -enum get_oid_result { - FOUND = 0, - MISSING_OBJECT = -1, /* The requested object is missing */ - SHORT_NAME_AMBIGUOUS = -2, - /* The following only apply when symlinks are followed */ - DANGLING_SYMLINK = -4, /* - * The initial symlink is there, but - * (transitively) points to a missing - * in-tree file - */ - SYMLINK_LOOP = -5, - NOT_DIR = -6, /* - * Somewhere along the symlink chain, a path is - * requested which contains a file as a - * non-final element. - */ -}; - -/* A suitably aligned type for stack allocations of hash contexts. */ -union git_hash_ctx { - git_SHA_CTX sha1; - git_SHA256_CTX sha256; -}; -typedef union git_hash_ctx git_hash_ctx; - -typedef void (*git_hash_init_fn)(git_hash_ctx *ctx); -typedef void (*git_hash_clone_fn)(git_hash_ctx *dst, const git_hash_ctx *src); -typedef void (*git_hash_update_fn)(git_hash_ctx *ctx, const void *in, size_t len); -typedef void (*git_hash_final_fn)(unsigned char *hash, git_hash_ctx *ctx); -typedef void (*git_hash_final_oid_fn)(struct object_id *oid, git_hash_ctx *ctx); - -struct git_hash_algo { - /* - * The name of the algorithm, as appears in the config file and in - * messages. - */ - const char *name; - - /* A four-byte version identifier, used in pack indices. */ - uint32_t format_id; - - /* The length of the hash in binary. */ - size_t rawsz; - - /* The length of the hash in hex characters. */ - size_t hexsz; - - /* The block size of the hash. */ - size_t blksz; - - /* The hash initialization function. */ - git_hash_init_fn init_fn; - - /* The hash context cloning function. */ - git_hash_clone_fn clone_fn; - - /* The hash update function. */ - git_hash_update_fn update_fn; - - /* The hash finalization function. */ - git_hash_final_fn final_fn; - - /* The hash finalization function for object IDs. */ - git_hash_final_oid_fn final_oid_fn; - - /* The OID of the empty tree. */ - const struct object_id *empty_tree; - - /* The OID of the empty blob. */ - const struct object_id *empty_blob; - - /* The all-zeros OID. */ - const struct object_id *null_oid; -}; -extern const struct git_hash_algo hash_algos[GIT_HASH_NALGOS]; - -/* - * Return a GIT_HASH_* constant based on the name. Returns GIT_HASH_UNKNOWN if - * the name doesn't match a known algorithm. - */ -int hash_algo_by_name(const char *name); -/* Identical, except based on the format ID. */ -int hash_algo_by_id(uint32_t format_id); -/* Identical, except based on the length. */ -int hash_algo_by_length(int len); -/* Identical, except for a pointer to struct git_hash_algo. */ -static inline int hash_algo_by_ptr(const struct git_hash_algo *p) -{ - return p - hash_algos; -} - #define the_hash_algo the_repository->hash_algo -const struct object_id *null_oid(void); - -static inline int hashcmp_algop(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop) -{ - /* - * Teach the compiler that there are only two possibilities of hash size - * here, so that it can optimize for this case as much as possible. - */ - if (algop->rawsz == GIT_MAX_RAWSZ) - return memcmp(sha1, sha2, GIT_MAX_RAWSZ); - return memcmp(sha1, sha2, GIT_SHA1_RAWSZ); -} - static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2) { return hashcmp_algop(sha1, sha2, the_hash_algo); @@ -260,17 +21,6 @@ static inline int oidcmp(const struct object_id *oid1, const struct object_id *o return hashcmp_algop(oid1->hash, oid2->hash, algop); } -static inline int hasheq_algop(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop) -{ - /* - * We write this here instead of deferring to hashcmp so that the - * compiler can properly inline it and avoid calling memcmp. - */ - if (algop->rawsz == GIT_MAX_RAWSZ) - return !memcmp(sha1, sha2, GIT_MAX_RAWSZ); - return !memcmp(sha1, sha2, GIT_SHA1_RAWSZ); -} - static inline int hasheq(const unsigned char *sha1, const unsigned char *sha2) { return hasheq_algop(sha1, sha2, the_hash_algo); @@ -296,12 +46,6 @@ static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src) memcpy(sha_dst, sha_src, the_hash_algo->rawsz); } -static inline void oidcpy(struct object_id *dst, const struct object_id *src) -{ - memcpy(dst->hash, src->hash, GIT_MAX_RAWSZ); - dst->algo = src->algo; -} - /* Like oidcpy() but zero-pads the unused bytes in dst's hash array. */ static inline void oidcpy_with_padding(struct object_id *dst, const struct object_id *src) @@ -318,13 +62,6 @@ static inline void oidcpy_with_padding(struct object_id *dst, dst->algo = src->algo; } -static inline struct object_id *oiddup(const struct object_id *src) -{ - struct object_id *dst = xmalloc(sizeof(struct object_id)); - oidcpy(dst, src); - return dst; -} - static inline void hashclr(unsigned char *hash) { memset(hash, 0, the_hash_algo->rawsz); @@ -362,12 +99,4 @@ static inline int is_empty_tree_oid(const struct object_id *oid) return oideq(oid, the_hash_algo->empty_tree); } -static inline void oid_set_algo(struct object_id *oid, const struct git_hash_algo *algop) -{ - oid->algo = hash_algo_by_ptr(algop); -} - -const char *empty_tree_oid_hex(void); -const char *empty_blob_oid_hex(void); - #endif diff --git a/hashmap.h b/hashmap.h index 7251687d73..9234b94477 100644 --- a/hashmap.h +++ b/hashmap.h @@ -1,7 +1,7 @@ #ifndef HASHMAP_H #define HASHMAP_H -#include "hash.h" +#include "hash-ll.h" /* * Generic implementation of hash-based key-value mappings. diff --git a/hex.c b/hex.c index 0a1bddc128..7bb440e794 100644 --- a/hex.c +++ b/hex.c @@ -1,4 +1,5 @@ #include "git-compat-util.h" +#include "hash.h" #include "hex.h" const signed char hexval_table[256] = { diff --git a/hex.h b/hex.h index e2abfc56fa..7df4b3c460 100644 --- a/hex.h +++ b/hex.h @@ -1,7 +1,7 @@ #ifndef HEX_H #define HEX_H -#include "hash.h" +#include "hash-ll.h" extern const signed char hexval_table[256]; static inline unsigned int hexval(unsigned char c) diff --git a/hook.c b/hook.c index 76e322f580..3ca5e60895 100644 --- a/hook.c +++ b/hook.c @@ -2,6 +2,7 @@ #include "advice.h" #include "gettext.h" #include "hook.h" +#include "path.h" #include "run-command.h" #include "config.h" #include "strbuf.h" diff --git a/khash.h b/khash.h index 85362718c5..56241e6a5c 100644 --- a/khash.h +++ b/khash.h @@ -27,6 +27,7 @@ #define __AC_KHASH_H #include "hashmap.h" +#include "hash.h" #define AC_VERSION_KHASH_H "0.2.8" diff --git a/ls-refs.c b/ls-refs.c index b9f3e08ec3..f385938b64 100644 --- a/ls-refs.c +++ b/ls-refs.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "environment.h" #include "gettext.h" +#include "hash.h" #include "hex.h" #include "repository.h" #include "refs.h" diff --git a/merge-ort-wrappers.c b/merge-ort-wrappers.c index c00dfbab1c..2c47c5a623 100644 --- a/merge-ort-wrappers.c +++ b/merge-ort-wrappers.c @@ -1,5 +1,6 @@ #include "cache.h" #include "gettext.h" +#include "hash.h" #include "merge-ort.h" #include "merge-ort-wrappers.h" diff --git a/merge-ort.h b/merge-ort.h index a994c9a5fc..ce56ec1a78 100644 --- a/merge-ort.h +++ b/merge-ort.h @@ -2,7 +2,7 @@ #define MERGE_ORT_H #include "merge-recursive.h" -#include "hash.h" +#include "hash-ll.h" struct commit; struct tree; diff --git a/negotiator/default.c b/negotiator/default.c index f4b78eb47d..5cb2b1d204 100644 --- a/negotiator/default.c +++ b/negotiator/default.c @@ -4,6 +4,7 @@ #include "../fetch-negotiator.h" #include "../prio-queue.h" #include "../refs.h" +#include "../repository.h" #include "../tag.h" /* Remember to update object flag allocation in object.h */ diff --git a/negotiator/skipping.c b/negotiator/skipping.c index c7d6ab39bc..97e7e1ae72 100644 --- a/negotiator/skipping.c +++ b/negotiator/skipping.c @@ -5,6 +5,7 @@ #include "../hex.h" #include "../prio-queue.h" #include "../refs.h" +#include "../repository.h" #include "../tag.h" /* Remember to update object flag allocation in object.h */ diff --git a/object-file.h b/object-file.h index e0cfc3a5db..d6414610f8 100644 --- a/object-file.h +++ b/object-file.h @@ -4,6 +4,8 @@ #include "git-zlib.h" #include "object.h" +struct index_state; + /* * Set this to 0 to prevent oid_object_info_extended() from fetching missing * blobs. This has a difference only if extensions.partialClone is set. diff --git a/object.h b/object.h index 96e52e24fb..5871615fee 100644 --- a/object.h +++ b/object.h @@ -1,9 +1,10 @@ #ifndef OBJECT_H #define OBJECT_H -#include "hash.h" +#include "hash-ll.h" struct buffer_slab; +struct repository; struct parsed_object_pool { struct object **obj_hash; diff --git a/oidmap.c b/oidmap.c index 8c1a139c97..8b1bc4dec9 100644 --- a/oidmap.c +++ b/oidmap.c @@ -1,4 +1,5 @@ #include "git-compat-util.h" +#include "hash.h" #include "oidmap.h" static int oidmap_neq(const void *hashmap_cmp_fn_data UNUSED, diff --git a/oidtree.h b/oidtree.h index 77898f510a..55c83513fd 100644 --- a/oidtree.h +++ b/oidtree.h @@ -2,7 +2,7 @@ #define OIDTREE_H #include "cbtree.h" -#include "hash.h" +#include "hash-ll.h" #include "mem-pool.h" struct oidtree { diff --git a/parallel-checkout.c b/parallel-checkout.c index 7f0569cc93..69d569f352 100644 --- a/parallel-checkout.c +++ b/parallel-checkout.c @@ -3,6 +3,7 @@ #include "config.h" #include "entry.h" #include "gettext.h" +#include "hash.h" #include "hex.h" #include "parallel-checkout.h" #include "pkt-line.h" diff --git a/pathspec.c b/pathspec.c index ec335a214e..1e57b6c667 100644 --- a/pathspec.c +++ b/pathspec.c @@ -6,6 +6,7 @@ #include "gettext.h" #include "pathspec.h" #include "attr.h" +#include "repository.h" #include "setup.h" #include "strvec.h" #include "symlinks.h" diff --git a/progress.c b/progress.c index 72d5e0c73c..f695798aca 100644 --- a/progress.c +++ b/progress.c @@ -12,6 +12,7 @@ #include "git-compat-util.h" #include "pager.h" #include "progress.h" +#include "repository.h" #include "strbuf.h" #include "trace.h" #include "trace2.h" diff --git a/protocol-caps.c b/protocol-caps.c index 874bc815b4..3fe0bc61c3 100644 --- a/protocol-caps.c +++ b/protocol-caps.c @@ -4,7 +4,7 @@ #include "hex.h" #include "pkt-line.h" #include "strvec.h" -#include "hash.h" +#include "hash-ll.h" #include "hex.h" #include "object.h" #include "object-store.h" diff --git a/rebase-interactive.c b/rebase-interactive.c index 789f407361..852a331318 100644 --- a/rebase-interactive.c +++ b/rebase-interactive.c @@ -5,6 +5,7 @@ #include "gettext.h" #include "sequencer.h" #include "rebase-interactive.h" +#include "repository.h" #include "strbuf.h" #include "commit-slab.h" #include "config.h" diff --git a/refs/files-backend.c b/refs/files-backend.c index 1128a9af29..bca7b851c5 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -3,6 +3,7 @@ #include "../copy.h" #include "../environment.h" #include "../gettext.h" +#include "../hash.h" #include "../hex.h" #include "../refs.h" #include "refs-internal.h" diff --git a/refs/packed-backend.c b/refs/packed-backend.c index 2333ed5a1f..704424f55c 100644 --- a/refs/packed-backend.c +++ b/refs/packed-backend.c @@ -2,6 +2,7 @@ #include "../alloc.h" #include "../config.h" #include "../gettext.h" +#include "../hash.h" #include "../hex.h" #include "../refs.h" #include "refs-internal.h" diff --git a/refs/ref-cache.c b/refs/ref-cache.c index dc1ca49c85..2294c4564f 100644 --- a/refs/ref-cache.c +++ b/refs/ref-cache.c @@ -1,6 +1,8 @@ #include "../git-compat-util.h" #include "../alloc.h" +#include "../hash.h" #include "../refs.h" +#include "../repository.h" #include "refs-internal.h" #include "ref-cache.h" #include "../iterator.h" diff --git a/refs/ref-cache.h b/refs/ref-cache.h index cf4ad9070b..95c76e27c8 100644 --- a/refs/ref-cache.h +++ b/refs/ref-cache.h @@ -1,10 +1,11 @@ #ifndef REFS_REF_CACHE_H #define REFS_REF_CACHE_H -#include "hash.h" +#include "hash-ll.h" struct ref_dir; struct ref_store; +struct repository; /* * If this ref_cache is filled lazily, this function is used to load diff --git a/refspec.c b/refspec.c index 7b5c305514..31b61d782c 100644 --- a/refspec.c +++ b/refspec.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "alloc.h" #include "gettext.h" +#include "hash.h" #include "hex.h" #include "strvec.h" #include "refs.h" diff --git a/reftable/dump.c b/reftable/dump.c index 155953d1b8..ce936b4e18 100644 --- a/reftable/dump.c +++ b/reftable/dump.c @@ -7,7 +7,7 @@ https://developers.google.com/open-source/licenses/bsd */ #include "git-compat-util.h" -#include "hash.h" +#include "hash-ll.h" #include "reftable-blocksource.h" #include "reftable-error.h" diff --git a/reftable/system.h b/reftable/system.h index 18f9207dfe..6b74a81514 100644 --- a/reftable/system.h +++ b/reftable/system.h @@ -13,7 +13,7 @@ https://developers.google.com/open-source/licenses/bsd #include "git-compat-util.h" #include "strbuf.h" -#include "hash.h" /* hash ID, sizes.*/ +#include "hash-ll.h" /* hash ID, sizes.*/ #include "dir.h" /* remove_dir_recursively, for tests.*/ int hash_size(uint32_t id); diff --git a/reset.h b/reset.h index a28f81829d..10708d8ddc 100644 --- a/reset.h +++ b/reset.h @@ -1,7 +1,7 @@ #ifndef RESET_H #define RESET_H -#include "hash.h" +#include "hash-ll.h" #include "repository.h" #define GIT_REFLOG_ACTION_ENVIRONMENT "GIT_REFLOG_ACTION" diff --git a/resolve-undo.c b/resolve-undo.c index e81096e2d4..70a6db526d 100644 --- a/resolve-undo.c +++ b/resolve-undo.c @@ -1,5 +1,6 @@ #include "cache.h" #include "dir.h" +#include "hash.h" #include "resolve-undo.h" #include "string-list.h" diff --git a/resolve-undo.h b/resolve-undo.h index d1ea972771..c5deafc92f 100644 --- a/resolve-undo.h +++ b/resolve-undo.h @@ -6,7 +6,7 @@ struct index_state; struct pathspec; struct string_list; -#include "hash.h" +#include "hash-ll.h" struct resolve_undo_info { unsigned int mode[3]; diff --git a/split-index.c b/split-index.c index 3fc4e91485..40e54760b3 100644 --- a/split-index.c +++ b/split-index.c @@ -1,6 +1,7 @@ #include "cache.h" #include "alloc.h" #include "gettext.h" +#include "hash.h" #include "mem-pool.h" #include "split-index.h" #include "strbuf.h" diff --git a/split-index.h b/split-index.h index 1a153f47ba..15a29cd08c 100644 --- a/split-index.h +++ b/split-index.h @@ -1,7 +1,7 @@ #ifndef SPLIT_INDEX_H #define SPLIT_INDEX_H -#include "hash.h" +#include "hash-ll.h" struct index_state; struct strbuf; diff --git a/strbuf.c b/strbuf.c index 729378ec82..08eec8f1d8 100644 --- a/strbuf.c +++ b/strbuf.c @@ -6,6 +6,7 @@ #include "hex.h" #include "object-name.h" #include "refs.h" +#include "repository.h" #include "string-list.h" #include "utf8.h" #include "date.h" diff --git a/t/helper/test-bloom.c b/t/helper/test-bloom.c index d2b30d644d..aabe31d724 100644 --- a/t/helper/test-bloom.c +++ b/t/helper/test-bloom.c @@ -2,6 +2,7 @@ #include "bloom.h" #include "hex.h" #include "commit.h" +#include "repository.h" #include "setup.h" static struct bloom_filter_settings settings = DEFAULT_BLOOM_FILTER_SETTINGS; diff --git a/t/helper/test-cache-tree.c b/t/helper/test-cache-tree.c index cdaf5046f5..9507b356e2 100644 --- a/t/helper/test-cache-tree.c +++ b/t/helper/test-cache-tree.c @@ -6,6 +6,7 @@ #include "tree.h" #include "cache-tree.h" #include "parse-options.h" +#include "repository.h" #include "setup.h" static char const * const test_cache_tree_usage[] = { diff --git a/t/helper/test-dump-cache-tree.c b/t/helper/test-dump-cache-tree.c index 715aabfbae..4caf13c663 100644 --- a/t/helper/test-dump-cache-tree.c +++ b/t/helper/test-dump-cache-tree.c @@ -1,9 +1,11 @@ #define USE_THE_INDEX_VARIABLE #include "test-tool.h" #include "cache.h" +#include "hash.h" #include "hex.h" #include "tree.h" #include "cache-tree.h" +#include "repository.h" #include "setup.h" static void dump_one(struct cache_tree *it, const char *pfx, const char *x) diff --git a/t/helper/test-dump-fsmonitor.c b/t/helper/test-dump-fsmonitor.c index 7e9de296db..6dc4958337 100644 --- a/t/helper/test-dump-fsmonitor.c +++ b/t/helper/test-dump-fsmonitor.c @@ -1,5 +1,6 @@ #include "test-tool.h" #include "cache.h" +#include "repository.h" #include "setup.h" int cmd__dump_fsmonitor(int ac, const char **av) diff --git a/t/helper/test-dump-untracked-cache.c b/t/helper/test-dump-untracked-cache.c index 415f55f31d..d1b99d21dc 100644 --- a/t/helper/test-dump-untracked-cache.c +++ b/t/helper/test-dump-untracked-cache.c @@ -3,6 +3,7 @@ #include "cache.h" #include "dir.h" #include "hex.h" +#include "repository.h" #include "setup.h" static int compare_untracked(const void *a_, const void *b_) diff --git a/t/helper/test-example-decorate.c b/t/helper/test-example-decorate.c index 7c7fc8efc1..43707486dd 100644 --- a/t/helper/test-example-decorate.c +++ b/t/helper/test-example-decorate.c @@ -2,6 +2,7 @@ #include "git-compat-util.h" #include "object.h" #include "decorate.h" +#include "repository.h" int cmd__example_decorate(int argc, const char **argv) { diff --git a/t/helper/test-fsmonitor-client.c b/t/helper/test-fsmonitor-client.c index a37236cd0a..bb00e1e5d1 100644 --- a/t/helper/test-fsmonitor-client.c +++ b/t/helper/test-fsmonitor-client.c @@ -7,6 +7,7 @@ #include "cache.h" #include "parse-options.h" #include "fsmonitor-ipc.h" +#include "repository.h" #include "setup.h" #include "thread-utils.h" #include "trace2.h" diff --git a/t/helper/test-lazy-init-name-hash.c b/t/helper/test-lazy-init-name-hash.c index f23d983c11..b83a75d19f 100644 --- a/t/helper/test-lazy-init-name-hash.c +++ b/t/helper/test-lazy-init-name-hash.c @@ -3,6 +3,7 @@ #include "cache.h" #include "environment.h" #include "parse-options.h" +#include "repository.h" #include "setup.h" #include "trace.h" diff --git a/t/helper/test-match-trees.c b/t/helper/test-match-trees.c index a498fece7a..3c62e33ccd 100644 --- a/t/helper/test-match-trees.c +++ b/t/helper/test-match-trees.c @@ -3,6 +3,7 @@ #include "hex.h" #include "match-trees.h" #include "object-name.h" +#include "repository.h" #include "setup.h" #include "tree.h" diff --git a/t/helper/test-oidmap.c b/t/helper/test-oidmap.c index de6ab77fda..bba4099f65 100644 --- a/t/helper/test-oidmap.c +++ b/t/helper/test-oidmap.c @@ -2,6 +2,7 @@ #include "hex.h" #include "object-name.h" #include "oidmap.h" +#include "repository.h" #include "setup.h" #include "strbuf.h" diff --git a/t/helper/test-path-utils.c b/t/helper/test-path-utils.c index 6355c9e4b6..2ef53d5f7a 100644 --- a/t/helper/test-path-utils.c +++ b/t/helper/test-path-utils.c @@ -2,6 +2,7 @@ #include "cache.h" #include "abspath.h" #include "environment.h" +#include "path.h" #include "setup.h" #include "string-list.h" #include "trace.h" diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c index a4c24d0e42..c1ae276395 100644 --- a/t/helper/test-read-cache.c +++ b/t/helper/test-read-cache.c @@ -2,6 +2,7 @@ #include "test-tool.h" #include "cache.h" #include "config.h" +#include "repository.h" #include "setup.h" #include "wrapper.h" diff --git a/t/helper/test-scrap-cache-tree.c b/t/helper/test-scrap-cache-tree.c index 15b7688774..444a4c02c8 100644 --- a/t/helper/test-scrap-cache-tree.c +++ b/t/helper/test-scrap-cache-tree.c @@ -2,6 +2,7 @@ #include "test-tool.h" #include "cache.h" #include "lockfile.h" +#include "repository.h" #include "setup.h" #include "tree.h" #include "cache-tree.h" diff --git a/t/helper/test-submodule-config.c b/t/helper/test-submodule-config.c index c7c7fdbea9..1bacd35a53 100644 --- a/t/helper/test-submodule-config.c +++ b/t/helper/test-submodule-config.c @@ -1,6 +1,8 @@ #include "test-tool.h" #include "config.h" +#include "hash.h" #include "object-name.h" +#include "repository.h" #include "setup.h" #include "submodule-config.h" #include "submodule.h" diff --git a/t/helper/test-submodule-nested-repo-config.c b/t/helper/test-submodule-nested-repo-config.c index d31f5e48ab..ecd40ded99 100644 --- a/t/helper/test-submodule-nested-repo-config.c +++ b/t/helper/test-submodule-nested-repo-config.c @@ -1,4 +1,5 @@ #include "test-tool.h" +#include "repository.h" #include "setup.h" #include "submodule-config.h" diff --git a/t/helper/test-submodule.c b/t/helper/test-submodule.c index 0e34581b20..cad8b0ca68 100644 --- a/t/helper/test-submodule.c +++ b/t/helper/test-submodule.c @@ -2,6 +2,7 @@ #include "test-tool-utils.h" #include "parse-options.h" #include "remote.h" +#include "repository.h" #include "setup.h" #include "submodule-config.h" #include "submodule.h" diff --git a/t/helper/test-trace2.c b/t/helper/test-trace2.c index a476df6c6c..ab084d6034 100644 --- a/t/helper/test-trace2.c +++ b/t/helper/test-trace2.c @@ -3,6 +3,7 @@ #include "run-command.h" #include "exec-cmd.h" #include "config.h" +#include "repository.h" #include "trace2.h" typedef int(fn_unit_test)(int argc, const char **argv); diff --git a/t/helper/test-write-cache.c b/t/helper/test-write-cache.c index a93417ed3a..eace08072d 100644 --- a/t/helper/test-write-cache.c +++ b/t/helper/test-write-cache.c @@ -2,6 +2,7 @@ #include "test-tool.h" #include "cache.h" #include "lockfile.h" +#include "repository.h" #include "setup.h" int cmd__write_cache(int argc, const char **argv) diff --git a/trace2.c b/trace2.c index 21264df71b..0efc4e7b95 100644 --- a/trace2.c +++ b/trace2.c @@ -2,6 +2,7 @@ #include "config.h" #include "json-writer.h" #include "quote.h" +#include "repository.h" #include "run-command.h" #include "sigchain.h" #include "thread-utils.h" diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c index 9e7aab6d51..2af53e5d4d 100644 --- a/trace2/tr2_tgt_event.c +++ b/trace2/tr2_tgt_event.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "config.h" #include "json-writer.h" +#include "repository.h" #include "run-command.h" #include "version.h" #include "trace2/tr2_dst.h" diff --git a/trace2/tr2_tgt_normal.c b/trace2/tr2_tgt_normal.c index 8672c2c2d0..1ebfb464d5 100644 --- a/trace2/tr2_tgt_normal.c +++ b/trace2/tr2_tgt_normal.c @@ -1,5 +1,6 @@ #include "git-compat-util.h" #include "config.h" +#include "repository.h" #include "run-command.h" #include "quote.h" #include "version.h" diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c index 3f2b2d5311..328e483a05 100644 --- a/trace2/tr2_tgt_perf.c +++ b/trace2/tr2_tgt_perf.c @@ -1,5 +1,6 @@ #include "git-compat-util.h" #include "config.h" +#include "repository.h" #include "run-command.h" #include "quote.h" #include "version.h" diff --git a/tree-walk.h b/tree-walk.h index 25fe27e352..01a9d8eb44 100644 --- a/tree-walk.h +++ b/tree-walk.h @@ -1,9 +1,10 @@ #ifndef TREE_WALK_H #define TREE_WALK_H -#include "hash.h" +#include "hash-ll.h" struct index_state; +struct repository; #define MAX_TRAVERSE_TREES 8 diff --git a/tree.h b/tree.h index 6efff003e2..0499ad01aa 100644 --- a/tree.h +++ b/tree.h @@ -3,6 +3,7 @@ #include "object.h" +struct pathspec; struct repository; struct strbuf; diff --git a/wrapper.c b/wrapper.c index e80f83498d..5ab0460de5 100644 --- a/wrapper.c +++ b/wrapper.c @@ -5,6 +5,7 @@ #include "abspath.h" #include "config.h" #include "gettext.h" +#include "repository.h" #include "strbuf.h" #include "trace2.h" #include "wrapper.h" diff --git a/xdiff-interface.h b/xdiff-interface.h index 3750794afe..733c364d26 100644 --- a/xdiff-interface.h +++ b/xdiff-interface.h @@ -1,7 +1,7 @@ #ifndef XDIFF_INTERFACE_H #define XDIFF_INTERFACE_H -#include "hash.h" +#include "hash-ll.h" #include "xdiff/xdiff.h" /* From aabc5617cdfb29ccf98048b0d99cae2a811df51f Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:21 +0000 Subject: [PATCH 14/22] cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c Since cmp_cache_name_compare() was comparing cache_entry structs, it was associated with the cache rather than with trees. Move the function. As a side effect, we can make cache_name_stage_compare() static as well. Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 2 +- read-cache.c | 13 ++++++++++++- tree.c | 10 ---------- tree.h | 1 - 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cache.h b/cache.h index 7a46f300d9..502e4c0b11 100644 --- a/cache.h +++ b/cache.h @@ -562,7 +562,7 @@ int base_name_compare(const char *name1, size_t len1, int mode1, int df_name_compare(const char *name1, size_t len1, int mode1, const char *name2, size_t len2, int mode2); int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); -int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2); +int cmp_cache_name_compare(const void *a_, const void *b_); /* add */ /* diff --git a/read-cache.c b/read-cache.c index 206c003e55..8f00da4bf7 100644 --- a/read-cache.c +++ b/read-cache.c @@ -567,7 +567,8 @@ int name_compare(const char *name1, size_t len1, const char *name2, size_t len2) return 0; } -int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2) +static int cache_name_stage_compare(const char *name1, int len1, int stage1, + const char *name2, int len2, int stage2) { int cmp; @@ -582,6 +583,16 @@ int cache_name_stage_compare(const char *name1, int len1, int stage1, const char return 0; } +int cmp_cache_name_compare(const void *a_, const void *b_) +{ + const struct cache_entry *ce1, *ce2; + + ce1 = *((const struct cache_entry **)a_); + ce2 = *((const struct cache_entry **)b_); + return cache_name_stage_compare(ce1->name, ce1->ce_namelen, ce_stage(ce1), + ce2->name, ce2->ce_namelen, ce_stage(ce2)); +} + static int index_name_stage_pos(struct index_state *istate, const char *name, int namelen, int stage, diff --git a/tree.c b/tree.c index e9d51ce2e0..896b7f4776 100644 --- a/tree.c +++ b/tree.c @@ -94,16 +94,6 @@ int read_tree(struct repository *r, return ret; } -int cmp_cache_name_compare(const void *a_, const void *b_) -{ - const struct cache_entry *ce1, *ce2; - - ce1 = *((const struct cache_entry **)a_); - ce2 = *((const struct cache_entry **)b_); - return cache_name_stage_compare(ce1->name, ce1->ce_namelen, ce_stage(ce1), - ce2->name, ce2->ce_namelen, ce_stage(ce2)); -} - struct tree *lookup_tree(struct repository *r, const struct object_id *oid) { struct object *obj = lookup_object(r, oid); diff --git a/tree.h b/tree.h index 0499ad01aa..8e3c6d441c 100644 --- a/tree.h +++ b/tree.h @@ -29,7 +29,6 @@ void free_tree_buffer(struct tree *tree); /* Parses and returns the tree in the given ent, chasing tags and commits. */ struct tree *parse_tree_indirect(const struct object_id *oid); -int cmp_cache_name_compare(const void *a_, const void *b_); #define READ_TREE_RECURSIVE 1 typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, void *); From 53dca334d6c56488994c0c80a247707419cddbfc Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:22 +0000 Subject: [PATCH 15/22] cache,tree: move basic name compare functions from read-cache to tree None of base_name_compare(), df_name_compare(), or name_compare() depended upon a cache_entry or index_state in any way. By moving these functions to tree.h, half a dozen other files can stop depending upon cache.h (though that change will be made in a later commit). Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 5 ---- read-cache.c | 68 ---------------------------------------------------- tree.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tree.h | 9 +++++++ 4 files changed, 77 insertions(+), 73 deletions(-) diff --git a/cache.h b/cache.h index 502e4c0b11..591c67b059 100644 --- a/cache.h +++ b/cache.h @@ -557,11 +557,6 @@ extern int verify_ce_order; #define DATA_CHANGED 0x0020 #define TYPE_CHANGED 0x0040 -int base_name_compare(const char *name1, size_t len1, int mode1, - const char *name2, size_t len2, int mode2); -int df_name_compare(const char *name1, size_t len1, int mode1, - const char *name2, size_t len2, int mode2); -int name_compare(const char *name1, size_t len1, const char *name2, size_t len2); int cmp_cache_name_compare(const void *a_, const void *b_); /* add */ diff --git a/read-cache.c b/read-cache.c index 8f00da4bf7..b3e2917ddc 100644 --- a/read-cache.c +++ b/read-cache.c @@ -499,74 +499,6 @@ int ie_modified(struct index_state *istate, return 0; } -int base_name_compare(const char *name1, size_t len1, int mode1, - const char *name2, size_t len2, int mode2) -{ - unsigned char c1, c2; - size_t len = len1 < len2 ? len1 : len2; - int cmp; - - cmp = memcmp(name1, name2, len); - if (cmp) - return cmp; - c1 = name1[len]; - c2 = name2[len]; - if (!c1 && S_ISDIR(mode1)) - c1 = '/'; - if (!c2 && S_ISDIR(mode2)) - c2 = '/'; - return (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0; -} - -/* - * df_name_compare() is identical to base_name_compare(), except it - * compares conflicting directory/file entries as equal. Note that - * while a directory name compares as equal to a regular file, they - * then individually compare _differently_ to a filename that has - * a dot after the basename (because '\0' < '.' < '/'). - * - * This is used by routines that want to traverse the git namespace - * but then handle conflicting entries together when possible. - */ -int df_name_compare(const char *name1, size_t len1, int mode1, - const char *name2, size_t len2, int mode2) -{ - unsigned char c1, c2; - size_t len = len1 < len2 ? len1 : len2; - int cmp; - - cmp = memcmp(name1, name2, len); - if (cmp) - return cmp; - /* Directories and files compare equal (same length, same name) */ - if (len1 == len2) - return 0; - c1 = name1[len]; - if (!c1 && S_ISDIR(mode1)) - c1 = '/'; - c2 = name2[len]; - if (!c2 && S_ISDIR(mode2)) - c2 = '/'; - if (c1 == '/' && !c2) - return 0; - if (c2 == '/' && !c1) - return 0; - return c1 - c2; -} - -int name_compare(const char *name1, size_t len1, const char *name2, size_t len2) -{ - size_t min_len = (len1 < len2) ? len1 : len2; - int cmp = memcmp(name1, name2, min_len); - if (cmp) - return cmp; - if (len1 < len2) - return -1; - if (len1 > len2) - return 1; - return 0; -} - static int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2) { diff --git a/tree.c b/tree.c index 896b7f4776..f242a7ab69 100644 --- a/tree.c +++ b/tree.c @@ -94,6 +94,74 @@ int read_tree(struct repository *r, return ret; } +int base_name_compare(const char *name1, size_t len1, int mode1, + const char *name2, size_t len2, int mode2) +{ + unsigned char c1, c2; + size_t len = len1 < len2 ? len1 : len2; + int cmp; + + cmp = memcmp(name1, name2, len); + if (cmp) + return cmp; + c1 = name1[len]; + c2 = name2[len]; + if (!c1 && S_ISDIR(mode1)) + c1 = '/'; + if (!c2 && S_ISDIR(mode2)) + c2 = '/'; + return (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0; +} + +/* + * df_name_compare() is identical to base_name_compare(), except it + * compares conflicting directory/file entries as equal. Note that + * while a directory name compares as equal to a regular file, they + * then individually compare _differently_ to a filename that has + * a dot after the basename (because '\0' < '.' < '/'). + * + * This is used by routines that want to traverse the git namespace + * but then handle conflicting entries together when possible. + */ +int df_name_compare(const char *name1, size_t len1, int mode1, + const char *name2, size_t len2, int mode2) +{ + unsigned char c1, c2; + size_t len = len1 < len2 ? len1 : len2; + int cmp; + + cmp = memcmp(name1, name2, len); + if (cmp) + return cmp; + /* Directories and files compare equal (same length, same name) */ + if (len1 == len2) + return 0; + c1 = name1[len]; + if (!c1 && S_ISDIR(mode1)) + c1 = '/'; + c2 = name2[len]; + if (!c2 && S_ISDIR(mode2)) + c2 = '/'; + if (c1 == '/' && !c2) + return 0; + if (c2 == '/' && !c1) + return 0; + return c1 - c2; +} + +int name_compare(const char *name1, size_t len1, const char *name2, size_t len2) +{ + size_t min_len = (len1 < len2) ? len1 : len2; + int cmp = memcmp(name1, name2, min_len); + if (cmp) + return cmp; + if (len1 < len2) + return -1; + if (len1 > len2) + return 1; + return 0; +} + struct tree *lookup_tree(struct repository *r, const struct object_id *oid) { struct object *obj = lookup_object(r, oid); diff --git a/tree.h b/tree.h index 8e3c6d441c..1b5ecbda6b 100644 --- a/tree.h +++ b/tree.h @@ -29,6 +29,15 @@ void free_tree_buffer(struct tree *tree); /* Parses and returns the tree in the given ent, chasing tags and commits. */ struct tree *parse_tree_indirect(const struct object_id *oid); +/* + * Functions for comparing pathnames + */ +int base_name_compare(const char *name1, size_t len1, int mode1, + const char *name2, size_t len2, int mode2); +int df_name_compare(const char *name1, size_t len1, int mode1, + const char *name2, size_t len2, int mode2); +int name_compare(const char *name1, size_t len1, + const char *name2, size_t len2); #define READ_TREE_RECURSIVE 1 typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, void *); From 5e3f94dfe3c69bc2a711a9dc3b1635e7ff91ab54 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:23 +0000 Subject: [PATCH 16/22] treewide: remove cache.h inclusion due to previous changes Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- archive-zip.c | 2 +- bundle-uri.c | 2 +- color.c | 2 +- combine-diff.c | 2 +- common-main.c | 2 +- config.c | 2 +- copy.c | 2 +- credential.c | 2 +- daemon.c | 2 +- date.c | 2 +- diagnose.c | 2 +- environment.c | 2 +- ll-merge.c | 2 +- match-trees.c | 2 +- midx.c | 2 +- object-file.c | 2 +- packfile.c | 2 +- pkt-line.c | 2 +- range-diff.c | 2 +- ref-filter.c | 2 +- t/helper/test-match-trees.c | 1 - t/helper/test-mergesort.c | 1 - t/helper/test-oid-array.c | 1 - t/helper/test-oidtree.c | 1 - t/helper/test-parse-options.c | 1 - t/helper/test-read-midx.c | 1 - t/helper/test-string-list.c | 1 - tree-diff.c | 2 +- tree-walk.c | 2 +- tree.c | 2 +- wrapper.c | 3 ++- 31 files changed, 25 insertions(+), 31 deletions(-) diff --git a/archive-zip.c b/archive-zip.c index ef538a90df..d0d065a312 100644 --- a/archive-zip.c +++ b/archive-zip.c @@ -1,7 +1,7 @@ /* * Copyright (c) 2006 Rene Scharfe */ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "archive.h" #include "gettext.h" diff --git a/bundle-uri.c b/bundle-uri.c index 6d44662ee1..ec1552bbca 100644 --- a/bundle-uri.c +++ b/bundle-uri.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "bundle-uri.h" #include "bundle.h" #include "copy.h" diff --git a/color.c b/color.c index f8a25ca807..83abb11eda 100644 --- a/color.c +++ b/color.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "color.h" #include "editor.h" diff --git a/combine-diff.c b/combine-diff.c index f7e9fb5747..f8d6196577 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "object-store.h" #include "commit.h" #include "convert.h" diff --git a/common-main.c b/common-main.c index 8ab50fa37a..033778b3c5 100644 --- a/common-main.c +++ b/common-main.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "exec-cmd.h" #include "gettext.h" #include "attr.h" diff --git a/config.c b/config.c index 97063a0743..2a9ed27efe 100644 --- a/config.c +++ b/config.c @@ -5,7 +5,7 @@ * Copyright (C) Johannes Schindelin, 2005 * */ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "advice.h" #include "alloc.h" diff --git a/copy.c b/copy.c index 923d8a6dc6..882c79cffb 100644 --- a/copy.c +++ b/copy.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "copy.h" #include "path.h" #include "wrapper.h" diff --git a/credential.c b/credential.c index 42194efc9e..a600d0c1ac 100644 --- a/credential.c +++ b/credential.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "config.h" #include "credential.h" diff --git a/daemon.c b/daemon.c index f89f99d7ef..7139cc201d 100644 --- a/daemon.c +++ b/daemon.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "alloc.h" #include "config.h" diff --git a/date.c b/date.c index bc030da012..a6ca6b318b 100644 --- a/date.c +++ b/date.c @@ -4,7 +4,7 @@ * Copyright (C) Linus Torvalds, 2005 */ -#include "cache.h" +#include "git-compat-util.h" #include "date.h" #include "gettext.h" #include "pager.h" diff --git a/diagnose.c b/diagnose.c index f9a2496c7f..58f49f76c7 100644 --- a/diagnose.c +++ b/diagnose.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "diagnose.h" #include "compat/disk.h" #include "archive.h" diff --git a/environment.c b/environment.c index 541f0b19ac..28d18eaca8 100644 --- a/environment.c +++ b/environment.c @@ -7,7 +7,7 @@ * even if you might want to know where the git directory etc * are. */ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "branch.h" #include "convert.h" diff --git a/ll-merge.c b/ll-merge.c index 85517e668e..1993530688 100644 --- a/ll-merge.c +++ b/ll-merge.c @@ -4,7 +4,7 @@ * Copyright (c) 2007 Junio C Hamano */ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "convert.h" #include "attr.h" diff --git a/match-trees.c b/match-trees.c index 9b78d99507..6bc8eb7647 100644 --- a/match-trees.c +++ b/match-trees.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "hex.h" #include "match-trees.h" #include "tree.h" diff --git a/midx.c b/midx.c index 2d0da57328..c7679c3c4f 100644 --- a/midx.c +++ b/midx.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "alloc.h" #include "config.h" diff --git a/object-file.c b/object-file.c index 8163ddbadd..8e0df7360a 100644 --- a/object-file.c +++ b/object-file.c @@ -6,7 +6,7 @@ * This handles basic git object files - packing, unpacking, * creation etc. */ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "alloc.h" #include "config.h" diff --git a/packfile.c b/packfile.c index 9ae2278c22..1ee9f65242 100644 --- a/packfile.c +++ b/packfile.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "alloc.h" #include "environment.h" #include "gettext.h" diff --git a/pkt-line.c b/pkt-line.c index 8b5fa78851..62b4208b66 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "copy.h" #include "pkt-line.h" #include "gettext.h" diff --git a/range-diff.c b/range-diff.c index a1e0cffb9f..6a704e6f47 100644 --- a/range-diff.c +++ b/range-diff.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "environment.h" #include "gettext.h" #include "range-diff.h" diff --git a/ref-filter.c b/ref-filter.c index 5387f79be6..594e66ad36 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "alloc.h" #include "environment.h" #include "gettext.h" diff --git a/t/helper/test-match-trees.c b/t/helper/test-match-trees.c index 3c62e33ccd..a0afc1b4bc 100644 --- a/t/helper/test-match-trees.c +++ b/t/helper/test-match-trees.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "hex.h" #include "match-trees.h" #include "object-name.h" diff --git a/t/helper/test-mergesort.c b/t/helper/test-mergesort.c index 3aabae6c1c..42ccc87051 100644 --- a/t/helper/test-mergesort.c +++ b/t/helper/test-mergesort.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "mem-pool.h" #include "mergesort.h" #include "strbuf.h" diff --git a/t/helper/test-oid-array.c b/t/helper/test-oid-array.c index ea3bf27898..241e5da315 100644 --- a/t/helper/test-oid-array.c +++ b/t/helper/test-oid-array.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "hex.h" #include "oid-array.h" #include "setup.h" diff --git a/t/helper/test-oidtree.c b/t/helper/test-oidtree.c index 796c9811e0..dc509fb806 100644 --- a/t/helper/test-oidtree.c +++ b/t/helper/test-oidtree.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "hex.h" #include "oidtree.h" #include "setup.h" diff --git a/t/helper/test-parse-options.c b/t/helper/test-parse-options.c index 20a81a1eb2..3003987ec1 100644 --- a/t/helper/test-parse-options.c +++ b/t/helper/test-parse-options.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "parse-options.h" #include "strbuf.h" #include "string-list.h" diff --git a/t/helper/test-read-midx.c b/t/helper/test-read-midx.c index b32abff7f1..211addaa00 100644 --- a/t/helper/test-read-midx.c +++ b/t/helper/test-read-midx.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "hex.h" #include "midx.h" #include "repository.h" diff --git a/t/helper/test-string-list.c b/t/helper/test-string-list.c index 959f27c74c..042c6ff005 100644 --- a/t/helper/test-string-list.c +++ b/t/helper/test-string-list.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "cache.h" #include "strbuf.h" #include "string-list.h" diff --git a/tree-diff.c b/tree-diff.c index a76e6dae61..9ea2dd7a6c 100644 --- a/tree-diff.c +++ b/tree-diff.c @@ -1,7 +1,7 @@ /* * Helper functions for tree diff generation */ -#include "cache.h" +#include "git-compat-util.h" #include "diff.h" #include "diffcore.h" #include "tree.h" diff --git a/tree-walk.c b/tree-walk.c index 2993c48c2f..d3c48e06df 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "tree-walk.h" #include "alloc.h" #include "dir.h" diff --git a/tree.c b/tree.c index f242a7ab69..0dd2029a8a 100644 --- a/tree.c +++ b/tree.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "cache-tree.h" #include "hex.h" #include "tree.h" diff --git a/wrapper.c b/wrapper.c index 5ab0460de5..67f5f5dbe1 100644 --- a/wrapper.c +++ b/wrapper.c @@ -1,10 +1,11 @@ /* * Various trivial helper wrappers around standard functions */ -#include "cache.h" +#include "git-compat-util.h" #include "abspath.h" #include "config.h" #include "gettext.h" +#include "object.h" #include "repository.h" #include "strbuf.h" #include "trace2.h" From 4c98cb8e355d51520cb56ef8bdcbe9f23c55a114 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:24 +0000 Subject: [PATCH 17/22] cache.h: remove unnecessary headers Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- cache.h | 2 -- compat/fsmonitor/fsm-ipc-darwin.c | 1 + compat/fsmonitor/fsm-listen-darwin.c | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cache.h b/cache.h index 591c67b059..bdedb87e83 100644 --- a/cache.h +++ b/cache.h @@ -4,8 +4,6 @@ #include "git-compat-util.h" #include "strbuf.h" #include "hashmap.h" -#include "gettext.h" -#include "string-list.h" #include "pathspec.h" #include "object.h" #include "statinfo.h" diff --git a/compat/fsmonitor/fsm-ipc-darwin.c b/compat/fsmonitor/fsm-ipc-darwin.c index e62f093cc1..bc68dca0ca 100644 --- a/compat/fsmonitor/fsm-ipc-darwin.c +++ b/compat/fsmonitor/fsm-ipc-darwin.c @@ -1,5 +1,6 @@ #include "cache.h" #include "config.h" +#include "gettext.h" #include "hex.h" #include "repository.h" #include "strbuf.h" diff --git a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c index 5eb6402ab8..18c0e3913d 100644 --- a/compat/fsmonitor/fsm-listen-darwin.c +++ b/compat/fsmonitor/fsm-listen-darwin.c @@ -29,6 +29,7 @@ #include "fsmonitor--daemon.h" #include "fsmonitor-path-utils.h" #include "gettext.h" +#include "string-list.h" struct fsm_listen_data { From e1c382141d8072b8c8c07c0bd8265b2b3d01ae2b Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:25 +0000 Subject: [PATCH 18/22] fsmonitor: reduce includes of cache.h Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- compat/fsmonitor/fsm-health-darwin.c | 2 +- compat/fsmonitor/fsm-ipc-darwin.c | 2 +- compat/fsmonitor/fsm-listen-darwin.c | 2 +- fsmonitor--daemon.h | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/compat/fsmonitor/fsm-health-darwin.c b/compat/fsmonitor/fsm-health-darwin.c index b9f709e854..4c291f8a06 100644 --- a/compat/fsmonitor/fsm-health-darwin.c +++ b/compat/fsmonitor/fsm-health-darwin.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "fsmonitor.h" #include "fsm-health.h" diff --git a/compat/fsmonitor/fsm-ipc-darwin.c b/compat/fsmonitor/fsm-ipc-darwin.c index bc68dca0ca..793073aaa7 100644 --- a/compat/fsmonitor/fsm-ipc-darwin.c +++ b/compat/fsmonitor/fsm-ipc-darwin.c @@ -1,4 +1,4 @@ -#include "cache.h" +#include "git-compat-util.h" #include "config.h" #include "gettext.h" #include "hex.h" diff --git a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c index 18c0e3913d..23e24b4b37 100644 --- a/compat/fsmonitor/fsm-listen-darwin.c +++ b/compat/fsmonitor/fsm-listen-darwin.c @@ -23,7 +23,7 @@ #endif #endif -#include "cache.h" +#include "git-compat-util.h" #include "fsmonitor.h" #include "fsm-listen.h" #include "fsmonitor--daemon.h" diff --git a/fsmonitor--daemon.h b/fsmonitor--daemon.h index e24838f9a8..70d776c54f 100644 --- a/fsmonitor--daemon.h +++ b/fsmonitor--daemon.h @@ -3,7 +3,6 @@ #ifdef HAVE_FSMONITOR_DAEMON_BACKEND -#include "cache.h" #include "dir.h" #include "run-command.h" #include "simple-ipc.h" From d4a4f9291d63b48b368f79bce3151bee9ca28009 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:26 +0000 Subject: [PATCH 19/22] commit.h: reduce unnecessary includes Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- add-interactive.c | 1 + archive.c | 2 ++ bloom.c | 1 + builtin/diff-tree.c | 1 + builtin/diff.c | 1 + builtin/gc.c | 1 + builtin/log.c | 1 + builtin/merge-tree.c | 1 + combine-diff.c | 1 + commit-graph.c | 1 + commit.c | 1 + commit.h | 11 ++++------- dir.c | 1 + fetch-pack.c | 1 + fsck.c | 1 + gpg-interface.c | 1 + grep.c | 1 + http-push.c | 1 + log-tree.c | 1 + merge-ort-wrappers.c | 1 + merge.c | 1 + notes-cache.c | 1 + notes-utils.c | 1 + object-name.c | 1 + pack-bitmap-write.c | 1 + parse-options-cb.c | 1 + parse-options.c | 1 + read-cache.c | 1 + ref-filter.c | 1 + reflog.c | 1 + refs/debug.c | 1 + refspec.c | 1 + revision.h | 1 + send-pack.c | 1 + wt-status.c | 1 + 35 files changed, 39 insertions(+), 7 deletions(-) diff --git a/add-interactive.c b/add-interactive.c index 757a9929d4..de877ca052 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -12,6 +12,7 @@ #include "dir.h" #include "run-command.h" #include "prompt.h" +#include "tree.h" static void init_color(struct repository *r, struct add_i_state *s, const char *section_and_slot, char *dst, diff --git a/archive.c b/archive.c index ab8966d73a..6226e16b25 100644 --- a/archive.c +++ b/archive.c @@ -6,10 +6,12 @@ #include "environment.h" #include "gettext.h" #include "hex.h" +#include "pretty.h" #include "setup.h" #include "refs.h" #include "object-store.h" #include "commit.h" +#include "tree.h" #include "tree-walk.h" #include "attr.h" #include "archive.h" diff --git a/bloom.c b/bloom.c index d0730525da..aef6b5fea2 100644 --- a/bloom.c +++ b/bloom.c @@ -6,6 +6,7 @@ #include "hashmap.h" #include "commit-graph.h" #include "commit.h" +#include "commit-slab.h" define_commit_slab(bloom_filter_slab, struct bloom_filter); diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c index 385c2d0230..0b02c62b85 100644 --- a/builtin/diff-tree.c +++ b/builtin/diff-tree.c @@ -9,6 +9,7 @@ #include "builtin.h" #include "submodule.h" #include "repository.h" +#include "tree.h" static struct rev_info log_tree_opt; diff --git a/builtin/diff.c b/builtin/diff.c index 8f386535d6..457dee1445 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -22,6 +22,7 @@ #include "setup.h" #include "submodule.h" #include "oid-array.h" +#include "tree.h" #define DIFF_NO_INDEX_EXPLICIT 1 #define DIFF_NO_INDEX_IMPLICIT 2 diff --git a/builtin/gc.c b/builtin/gc.c index b95154fba1..d11712b144 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -12,6 +12,7 @@ #include "builtin.h" #include "abspath.h" +#include "date.h" #include "environment.h" #include "hex.h" #include "repository.h" diff --git a/builtin/log.c b/builtin/log.c index 95de51921f..137b84b31e 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -44,6 +44,7 @@ #include "commit-reach.h" #include "range-diff.h" #include "tmp-objdir.h" +#include "tree.h" #include "write-or-die.h" #define MAIL_DEFAULT_WRAP 72 diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c index 6b9f006ec1..aa8040c2a6 100644 --- a/builtin/merge-tree.c +++ b/builtin/merge-tree.c @@ -16,6 +16,7 @@ #include "exec-cmd.h" #include "merge-blobs.h" #include "quote.h" +#include "tree.h" static int line_termination = '\n'; diff --git a/combine-diff.c b/combine-diff.c index f8d6196577..1e3cd7fb17 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -13,6 +13,7 @@ #include "xdiff/xmacros.h" #include "log-tree.h" #include "refs.h" +#include "tree.h" #include "userdiff.h" #include "oid-array.h" #include "revision.h" diff --git a/commit-graph.c b/commit-graph.c index 0c4f226644..6f612f368b 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -23,6 +23,7 @@ #include "shallow.h" #include "json-writer.h" #include "trace2.h" +#include "tree.h" #include "chunk-format.h" #include "wrapper.h" diff --git a/commit.c b/commit.c index 878b4473e4..10676165a1 100644 --- a/commit.c +++ b/commit.c @@ -26,6 +26,7 @@ #include "run-command.h" #include "setup.h" #include "shallow.h" +#include "tree.h" #include "hook.h" static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **); diff --git a/commit.h b/commit.h index 69b2f376e9..28928833c5 100644 --- a/commit.h +++ b/commit.h @@ -2,13 +2,10 @@ #define COMMIT_H #include "object.h" -#include "tree.h" -#include "strbuf.h" -#include "decorate.h" -#include "gpg-interface.h" -#include "string-list.h" -#include "pretty.h" -#include "commit-slab.h" + +struct signature_check; +struct strbuf; +struct tree; #define COMMIT_NOT_FROM_GRAPH 0xFFFFFFFF #define GENERATION_NUMBER_INFINITY ((1ULL << 63) - 1) diff --git a/dir.c b/dir.c index ed262fa6e4..a7469df3ac 100644 --- a/dir.c +++ b/dir.c @@ -27,6 +27,7 @@ #include "submodule-config.h" #include "symlinks.h" #include "trace2.h" +#include "tree.h" #include "wrapper.h" /* diff --git a/fetch-pack.c b/fetch-pack.c index 677102465a..a9745bd9fa 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -2,6 +2,7 @@ #include "alloc.h" #include "repository.h" #include "config.h" +#include "date.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/fsck.c b/fsck.c index adbe8bf59e..3261ef9ec2 100644 --- a/fsck.c +++ b/fsck.c @@ -1,5 +1,6 @@ #include "git-compat-util.h" #include "alloc.h" +#include "date.h" #include "hex.h" #include "object-store.h" #include "repository.h" diff --git a/gpg-interface.c b/gpg-interface.c index 8615dcd4b4..49d72c2066 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "commit.h" #include "config.h" +#include "date.h" #include "gettext.h" #include "run-command.h" #include "strbuf.h" diff --git a/grep.c b/grep.c index d144b37489..e620e375b1 100644 --- a/grep.c +++ b/grep.c @@ -4,6 +4,7 @@ #include "grep.h" #include "hex.h" #include "object-store.h" +#include "pretty.h" #include "userdiff.h" #include "xdiff-interface.h" #include "diff.h" diff --git a/http-push.c b/http-push.c index 637a4e91f7..3f18498636 100644 --- a/http-push.c +++ b/http-push.c @@ -15,6 +15,7 @@ #include "setup.h" #include "sigchain.h" #include "strvec.h" +#include "tree.h" #include "packfile.h" #include "object-store.h" #include "commit-reach.h" diff --git a/log-tree.c b/log-tree.c index b5cf3d8439..8861900b59 100644 --- a/log-tree.c +++ b/log-tree.c @@ -24,6 +24,7 @@ #include "help.h" #include "range-diff.h" #include "strmap.h" +#include "tree.h" #include "write-or-die.h" static struct decoration name_decoration = { "object names" }; diff --git a/merge-ort-wrappers.c b/merge-ort-wrappers.c index 2c47c5a623..a550753300 100644 --- a/merge-ort-wrappers.c +++ b/merge-ort-wrappers.c @@ -3,6 +3,7 @@ #include "hash.h" #include "merge-ort.h" #include "merge-ort-wrappers.h" +#include "tree.h" #include "commit.h" diff --git a/merge.c b/merge.c index da7fa652c2..10aaec3a6c 100644 --- a/merge.c +++ b/merge.c @@ -7,6 +7,7 @@ #include "commit.h" #include "run-command.h" #include "resolve-undo.h" +#include "tree.h" #include "tree-walk.h" #include "unpack-trees.h" #include "dir.h" diff --git a/notes-cache.c b/notes-cache.c index fbcdfd0dfe..14288caf98 100644 --- a/notes-cache.c +++ b/notes-cache.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "notes-cache.h" #include "object-store.h" +#include "pretty.h" #include "repository.h" #include "commit.h" #include "refs.h" diff --git a/notes-utils.c b/notes-utils.c index cb88171b7b..4a793eb347 100644 --- a/notes-utils.c +++ b/notes-utils.c @@ -6,6 +6,7 @@ #include "refs.h" #include "notes-utils.h" #include "repository.h" +#include "strbuf.h" void create_notes_commit(struct repository *r, struct notes_tree *t, diff --git a/object-name.c b/object-name.c index 3cd5b32729..5ccbe854b6 100644 --- a/object-name.c +++ b/object-name.c @@ -15,6 +15,7 @@ #include "dir.h" #include "oid-array.h" #include "packfile.h" +#include "pretty.h" #include "object-store.h" #include "repository.h" #include "setup.h" diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index faf67c94d3..3d3fd38065 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -18,6 +18,7 @@ #include "commit-reach.h" #include "prio-queue.h" #include "trace2.h" +#include "tree.h" struct bitmapped_commit { struct commit *commit; diff --git a/parse-options-cb.c b/parse-options-cb.c index 26a4c7d08a..be81158f86 100644 --- a/parse-options-cb.c +++ b/parse-options-cb.c @@ -3,6 +3,7 @@ #include "branch.h" #include "commit.h" #include "color.h" +#include "date.h" #include "environment.h" #include "gettext.h" #include "object-name.h" diff --git a/parse-options.c b/parse-options.c index b6803647d0..f8a155ee13 100644 --- a/parse-options.c +++ b/parse-options.c @@ -5,6 +5,7 @@ #include "commit.h" #include "color.h" #include "gettext.h" +#include "strbuf.h" #include "utf8.h" static int disallow_abbreviated_options; diff --git a/read-cache.c b/read-cache.c index b3e2917ddc..d64d93bc36 100644 --- a/read-cache.c +++ b/read-cache.c @@ -6,6 +6,7 @@ #include "cache.h" #include "alloc.h" #include "config.h" +#include "date.h" #include "diff.h" #include "diffcore.h" #include "hex.h" diff --git a/ref-filter.c b/ref-filter.c index 594e66ad36..84eee904ba 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -2,6 +2,7 @@ #include "alloc.h" #include "environment.h" #include "gettext.h" +#include "gpg-interface.h" #include "hex.h" #include "parse-options.h" #include "refs.h" diff --git a/reflog.c b/reflog.c index 9c09443088..57dc7c0d05 100644 --- a/reflog.c +++ b/reflog.c @@ -4,6 +4,7 @@ #include "reflog.h" #include "refs.h" #include "revision.h" +#include "tree.h" #include "worktree.h" /* Remember to update object flag allocation in object.h */ diff --git a/refs/debug.c b/refs/debug.c index adc34c836f..6f11e6de46 100644 --- a/refs/debug.c +++ b/refs/debug.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "hex.h" #include "refs-internal.h" +#include "string-list.h" #include "trace.h" static struct trace_key trace_refs = TRACE_KEY_INIT(REFS); diff --git a/refspec.c b/refspec.c index 31b61d782c..57f6c2aaf9 100644 --- a/refspec.c +++ b/refspec.c @@ -6,6 +6,7 @@ #include "strvec.h" #include "refs.h" #include "refspec.h" +#include "strbuf.h" static struct refspec_item s_tag_refspec = { .force = 0, diff --git a/revision.h b/revision.h index 742700504a..6630bb2eae 100644 --- a/revision.h +++ b/revision.h @@ -8,6 +8,7 @@ #include "pretty.h" #include "diff.h" #include "commit-slab-decl.h" +#include "decorate.h" #include "ident.h" #include "list-objects-filter-options.h" diff --git a/send-pack.c b/send-pack.c index 351037b07b..e68da24cc5 100644 --- a/send-pack.c +++ b/send-pack.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "config.h" #include "commit.h" +#include "date.h" #include "gettext.h" #include "hex.h" #include "refs.h" diff --git a/wt-status.c b/wt-status.c index 97b9c1c035..068b76ef6d 100644 --- a/wt-status.c +++ b/wt-status.c @@ -22,6 +22,7 @@ #include "strbuf.h" #include "trace.h" #include "trace2.h" +#include "tree.h" #include "utf8.h" #include "worktree.h" #include "lockfile.h" From e3d2f20e6f14d3cba641a365a733a615278e9e5e Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:27 +0000 Subject: [PATCH 20/22] object-store.h: reduce unnecessary includes Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- object-file.c | 1 + object-name.c | 1 + object-store.h | 8 ++++---- submodule-config.c | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/object-file.c b/object-file.c index 8e0df7360a..921a717d8a 100644 --- a/object-file.c +++ b/object-file.c @@ -38,6 +38,7 @@ #include "packfile.h" #include "object-file.h" #include "object-store.h" +#include "oidtree.h" #include "promisor-remote.h" #include "setup.h" #include "submodule.h" diff --git a/object-name.c b/object-name.c index 5ccbe854b6..88d839f70b 100644 --- a/object-name.c +++ b/object-name.c @@ -14,6 +14,7 @@ #include "remote.h" #include "dir.h" #include "oid-array.h" +#include "oidtree.h" #include "packfile.h" #include "pretty.h" #include "object-store.h" diff --git a/object-store.h b/object-store.h index f9d225783a..23ea86d370 100644 --- a/object-store.h +++ b/object-store.h @@ -2,16 +2,16 @@ #define OBJECT_STORE_H #include "object.h" -#include "oidmap.h" #include "list.h" -#include "oid-array.h" -#include "strbuf.h" #include "thread-utils.h" #include "khash.h" #include "dir.h" -#include "oidtree.h" #include "oidset.h" +struct oidmap; +struct oidtree; +struct strbuf; + struct object_directory { struct object_directory *next; diff --git a/submodule-config.c b/submodule-config.c index 7fc0812b64..58dfbde9ae 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -12,6 +12,7 @@ #include "object-name.h" #include "object-store.h" #include "parse-options.h" +#include "thread-utils.h" #include "tree-walk.h" /* From 0e312eaa12c03043b0ef23021a5a820567ee0efd Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:28 +0000 Subject: [PATCH 21/22] diff.h: reduce unnecessary includes Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- attr.c | 1 + diff.h | 1 - http-push.c | 1 + line-log.c | 1 + pack-bitmap-write.c | 1 + reflog.c | 1 + tree-diff.c | 1 + 7 files changed, 6 insertions(+), 1 deletion(-) diff --git a/attr.c b/attr.c index 2d8aeb8b58..ddf2b0cbc2 100644 --- a/attr.c +++ b/attr.c @@ -20,6 +20,7 @@ #include "object-store.h" #include "setup.h" #include "thread-utils.h" +#include "tree-walk.h" const char git_attr__true[] = "(builtin)true"; const char git_attr__false[] = "\0(builtin)false"; diff --git a/diff.h b/diff.h index 53aeb02a54..69e574f431 100644 --- a/diff.h +++ b/diff.h @@ -4,7 +4,6 @@ #ifndef DIFF_H #define DIFF_H -#include "tree-walk.h" #include "pathspec.h" #include "oidset.h" #include "strbuf.h" diff --git a/http-push.c b/http-push.c index 3f18498636..866ba243a8 100644 --- a/http-push.c +++ b/http-push.c @@ -16,6 +16,7 @@ #include "sigchain.h" #include "strvec.h" #include "tree.h" +#include "tree-walk.h" #include "packfile.h" #include "object-store.h" #include "commit-reach.h" diff --git a/line-log.c b/line-log.c index 10c19daec4..6a7ac312a4 100644 --- a/line-log.c +++ b/line-log.c @@ -18,6 +18,7 @@ #include "setup.h" #include "strvec.h" #include "bloom.h" +#include "tree-walk.h" static void range_set_grow(struct range_set *rs, size_t extra) { diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index 3d3fd38065..cdffe2ce47 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -19,6 +19,7 @@ #include "prio-queue.h" #include "trace2.h" #include "tree.h" +#include "tree-walk.h" struct bitmapped_commit { struct commit *commit; diff --git a/reflog.c b/reflog.c index 57dc7c0d05..ee1bf5d032 100644 --- a/reflog.c +++ b/reflog.c @@ -5,6 +5,7 @@ #include "refs.h" #include "revision.h" #include "tree.h" +#include "tree-walk.h" #include "worktree.h" /* Remember to update object flag allocation in object.h */ diff --git a/tree-diff.c b/tree-diff.c index 9ea2dd7a6c..20bb15f38d 100644 --- a/tree-diff.c +++ b/tree-diff.c @@ -5,6 +5,7 @@ #include "diff.h" #include "diffcore.h" #include "tree.h" +#include "tree-walk.h" /* * Some mode bits are also used internally for computations. From e3a3f5edf52c7f6161b167058b4d7c3a31dc0c3b Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 22 Apr 2023 20:17:29 +0000 Subject: [PATCH 22/22] reftable: ensure git-compat-util.h is the first (indirect) include Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- reftable/error.c | 1 + reftable/publicbasics.c | 2 +- reftable/tree.c | 2 +- reftable/tree_test.c | 1 + t/helper/test-reftable.c | 1 + 5 files changed, 5 insertions(+), 2 deletions(-) diff --git a/reftable/error.c b/reftable/error.c index 93941f2145..0d1766735e 100644 --- a/reftable/error.c +++ b/reftable/error.c @@ -6,6 +6,7 @@ license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd */ +#include "system.h" #include "reftable-error.h" #include diff --git a/reftable/publicbasics.c b/reftable/publicbasics.c index 0ad7d5c0ff..bcb82530d6 100644 --- a/reftable/publicbasics.c +++ b/reftable/publicbasics.c @@ -6,10 +6,10 @@ license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd */ +#include "system.h" #include "reftable-malloc.h" #include "basics.h" -#include "system.h" static void *(*reftable_malloc_ptr)(size_t sz); static void *(*reftable_realloc_ptr)(void *, size_t); diff --git a/reftable/tree.c b/reftable/tree.c index b8899e060a..a5bf880985 100644 --- a/reftable/tree.c +++ b/reftable/tree.c @@ -6,10 +6,10 @@ license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd */ +#include "system.h" #include "tree.h" #include "basics.h" -#include "system.h" struct tree_node *tree_search(void *key, struct tree_node **rootp, int (*compare)(const void *, const void *), diff --git a/reftable/tree_test.c b/reftable/tree_test.c index cbff125588..ac3a045ad4 100644 --- a/reftable/tree_test.c +++ b/reftable/tree_test.c @@ -6,6 +6,7 @@ license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd */ +#include "system.h" #include "tree.h" #include "basics.h" diff --git a/t/helper/test-reftable.c b/t/helper/test-reftable.c index 1f0a28cbb6..00237ef0d9 100644 --- a/t/helper/test-reftable.c +++ b/t/helper/test-reftable.c @@ -1,3 +1,4 @@ +#include "reftable/system.h" #include "reftable/reftable-tests.h" #include "test-tool.h"