[PATCH v2 2/3] read-cache: move 'ce_mode_from_stat()' to 'read-cache.c'
- From
Tian Yuchen <cat@malon.dev>
- Date
- Jun 10, 2026, 09:36 UTC
- Message-ID
- <20260610093635.139719-3-cat@malon.dev>
- In-Reply-To
- <20260610093635.139719-1-cat@malon.dev>
The ce_mode_from_stat() function is declared as a static inline function in 'read-cache.h'. As we want to migrate configuration variables, this helper function will need access to corresponding repository-specific configuration logic. Move the implementation to 'read-cache.c' to cleanly encapsulate its dependencies.
Note that the 'extern int trust_executable_bit, has_symlinks;' line is discarded because it's not necessary when the function lives in "read-cache.c".
At present, this change has no visible impact, but it is crucial for our future plans to pass in the repo context. Comment has been added whilst we are at it.
Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Ayush Chandekar <ayu.chandekar@gmail.com> Mentored-by: Olamide Caleb Bello <belkid98@gmail.com> Signed-off-by: Tian Yuchen <cat@malon.dev> --- read-cache.c | 20 ++++++++++++++++++++ read-cache.h | 16 ++-------------- 2 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/read-cache.c b/read-cache.c index c44e4d128f..cb4f4878c8 100644 --- a/read-cache.c +++ b/read-cache.c @@ -202,6 +202,26 @@ void fill_stat_cache_info(struct index_state *istate, struct cache_entry *ce, st } } +/* + * Determine the appropriate index mode for a file based on its stat() + * information and the existing cache entry (if any). + * + * This function handles degradation for filesystems that lack + * symlink support or reliable executable bits. + */ +unsigned int ce_mode_from_stat(const struct cache_entry *ce, unsigned int mode) +{ + if (!has_symlinks && S_ISREG(mode) && + ce && S_ISLNK(ce->ce_mode)) + return ce->ce_mode; + if (!trust_executable_bit && S_ISREG(mode)) { + if (ce && S_ISREG(ce->ce_mode)) + return ce->ce_mode; + return create_ce_mode(0666); + } + return create_ce_mode(mode); +} + static unsigned int st_mode_from_ce(const struct cache_entry *ce) { switch (ce->ce_mode & S_IFMT) { diff --git a/read-cache.h b/read-cache.h index 043da1f1aa..3c4af2faeb 100644 --- a/read-cache.h +++ b/read-cache.h @@ -5,20 +5,8 @@ #include "object.h" #include "pathspec.h" -static inline unsigned int ce_mode_from_stat(const struct cache_entry *ce, - unsigned int mode) -{ - extern int trust_executable_bit, has_symlinks; - if (!has_symlinks && S_ISREG(mode) && - ce && S_ISLNK(ce->ce_mode)) - return ce->ce_mode; - if (!trust_executable_bit && S_ISREG(mode)) { - if (ce && S_ISREG(ce->ce_mode)) - return ce->ce_mode; - return create_ce_mode(0666); - } - return create_ce_mode(mode); -} +unsigned int ce_mode_from_stat(const struct cache_entry *ce, + unsigned int mode); static inline int ce_to_dtype(const struct cache_entry *ce) {
-- 2.43.0