| #ifndef ENTRY_H |
| #define ENTRY_H |
| |
| #include "convert.h" |
| |
| struct cache_entry; |
| struct index_state; |
| |
| struct checkout { |
| struct index_state *istate; |
| const char *base_dir; |
| int base_dir_len; |
| const char *super_prefix; |
| struct delayed_checkout *delayed_checkout; |
| struct checkout_metadata meta; |
| unsigned force:1, |
| quiet:1, |
| not_new:1, |
| clone:1, |
| refresh_cache:1; |
| }; |
| #define CHECKOUT_INIT { .base_dir = "" } |
| |
| #define TEMPORARY_FILENAME_LENGTH 25 |
| /* |
| * Write the contents from ce out to the working tree. |
| * |
| * When topath[] is not NULL, instead of writing to the working tree |
| * file named by ce, a temporary file is created by this function and |
| * its name is returned in topath[], which must be able to hold at |
| * least TEMPORARY_FILENAME_LENGTH bytes long. |
| * |
| * With checkout_entry_ca(), callers can optionally pass a preloaded |
| * conv_attrs struct (to avoid reloading it), when ce refers to a |
| * regular file. If ca is NULL, the attributes will be loaded |
| * internally when (and if) needed. |
| */ |
| int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca, |
| const struct checkout *state, char *topath, |
| int *nr_checkouts); |
| static inline int checkout_entry(struct cache_entry *ce, |
| const struct checkout *state, char *topath, |
| int *nr_checkouts) |
| { |
| return checkout_entry_ca(ce, NULL, state, topath, nr_checkouts); |
| } |
| |
| void enable_delayed_checkout(struct checkout *state); |
| int finish_delayed_checkout(struct checkout *state, int show_progress); |
| |
| /* |
| * Unlink the last component and schedule the leading directories for |
| * removal, such that empty directories get removed. |
| * |
| * The "super_prefix" is either NULL, or the "--super-prefix" passed |
| * down from "read-tree" et al. |
| */ |
| void unlink_entry(const struct cache_entry *ce, const char *super_prefix); |
| |
| void *read_blob_entry(const struct cache_entry *ce, size_t *size); |
| int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st); |
| void update_ce_after_write(const struct checkout *state, struct cache_entry *ce, |
| struct stat *st); |
| |
| #endif /* ENTRY_H */ |