diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-06-30 01:43:20 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-06-30 01:43:21 +0200 |
commit | a1264a08a1a6e0cd7e510c899cd0ba42dcf1045d (patch) | |
tree | d6a22be96e39e1284d9838ce5e8ad58941c5099b /statinfo.h | |
parent | Merge branch 'ds/remove-idx-before-pack' (diff) | |
parent | fsmonitor-ll.h: split this header out of fsmonitor.h (diff) | |
download | git-a1264a08a1a6e0cd7e510c899cd0ba42dcf1045d.tar.xz git-a1264a08a1a6e0cd7e510c899cd0ba42dcf1045d.zip |
Merge branch 'en/header-split-cache-h-part-3'
Header files cleanup.
* en/header-split-cache-h-part-3: (28 commits)
fsmonitor-ll.h: split this header out of fsmonitor.h
hash-ll, hashmap: move oidhash() to hash-ll
object-store-ll.h: split this header out of object-store.h
khash: name the structs that khash declares
merge-ll: rename from ll-merge
git-compat-util.h: remove unneccessary include of wildmatch.h
builtin.h: remove unneccessary includes
list-objects-filter-options.h: remove unneccessary include
diff.h: remove unnecessary include of oidset.h
repository: remove unnecessary include of path.h
log-tree: replace include of revision.h with simple forward declaration
cache.h: remove this no-longer-used header
read-cache*.h: move declarations for read-cache.c functions from cache.h
repository.h: move declaration of the_index from cache.h
merge.h: move declarations for merge.c from cache.h
diff.h: move declaration for global in diff.c from cache.h
preload-index.h: move declarations for preload-index.c from elsewhere
sparse-index.h: move declarations for sparse-index.c from cache.h
name-hash.h: move declarations for name-hash.c from cache.h
run-command.h: move declarations for run-command.c from cache.h
...
Diffstat (limited to 'statinfo.h')
-rw-r--r-- | statinfo.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/statinfo.h b/statinfo.h index fe8df633a4..700f502ac0 100644 --- a/statinfo.h +++ b/statinfo.h @@ -1,6 +1,8 @@ #ifndef STATINFO_H #define STATINFO_H +struct index_state; + /* * The "cache_time" is just the low 32 bits of the * time. It doesn't matter if it overflows - we only @@ -21,6 +23,55 @@ struct stat_data { unsigned int sd_size; }; +/* + * A struct to encapsulate the concept of whether a file has changed + * since we last checked it. This uses criteria similar to those used + * for the index. + */ +struct stat_validity { + struct stat_data *sd; +}; + +#define MTIME_CHANGED 0x0001 +#define CTIME_CHANGED 0x0002 +#define OWNER_CHANGED 0x0004 +#define MODE_CHANGED 0x0008 +#define INODE_CHANGED 0x0010 +#define DATA_CHANGED 0x0020 +#define TYPE_CHANGED 0x0040 + +/* + * Record to sd the data from st that we use to check whether a file + * might have changed. + */ +void fill_stat_data(struct stat_data *sd, struct stat *st); + +/* + * Return 0 if st is consistent with a file not having been changed + * since sd was filled. If there are differences, return a + * combination of MTIME_CHANGED, CTIME_CHANGED, OWNER_CHANGED, + * INODE_CHANGED, and DATA_CHANGED. + */ +int match_stat_data(const struct stat_data *sd, struct stat *st); + +void stat_validity_clear(struct stat_validity *sv); + +/* + * Returns 1 if the path is a regular file (or a symlink to a regular + * file) and matches the saved stat_validity, 0 otherwise. A missing + * or inaccessible file is considered a match if the struct was just + * initialized, or if the previous update found an inaccessible file. + */ +int stat_validity_check(struct stat_validity *sv, const char *path); + +/* + * Update the stat_validity from a file opened at descriptor fd. If + * the file is missing, inaccessible, or not a regular file, then + * future calls to stat_validity_check will match iff one of those + * conditions continues to be true. + */ +void stat_validity_update(struct stat_validity *sv, int fd); + #if defined(DT_UNKNOWN) && !defined(NO_D_TYPE_IN_DIRENT) #define DTYPE(de) ((de)->d_type) #else |