64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
| #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;
 | |
| 	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 */
 |