#ifndef ENTRY_H #define ENTRY_H #include "cache.h" #include "convert.h" struct checkout { struct index_state *istate; const char *base_dir; int base_dir_len; 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 { NULL, "" } #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 *nr_checkouts); /* * Unlink the last component and schedule the leading directories for * removal, such that empty directories get removed. */ void unlink_entry(const struct cache_entry *ce); void *read_blob_entry(const struct cache_entry *ce, unsigned long *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 */