blob: b8c0e170dc791a7bebde1e6e71c194f3301a9cff [file] [log] [blame]
Matheus Tavaresd052cc02021-03-23 11:19:32 -03001#ifndef ENTRY_H
2#define ENTRY_H
3
4#include "cache.h"
5#include "convert.h"
6
7struct checkout {
8 struct index_state *istate;
9 const char *base_dir;
10 int base_dir_len;
11 struct delayed_checkout *delayed_checkout;
12 struct checkout_metadata meta;
13 unsigned force:1,
14 quiet:1,
15 not_new:1,
16 clone:1,
17 refresh_cache:1;
18};
19#define CHECKOUT_INIT { NULL, "" }
20
21#define TEMPORARY_FILENAME_LENGTH 25
22/*
23 * Write the contents from ce out to the working tree.
24 *
25 * When topath[] is not NULL, instead of writing to the working tree
26 * file named by ce, a temporary file is created by this function and
27 * its name is returned in topath[], which must be able to hold at
28 * least TEMPORARY_FILENAME_LENGTH bytes long.
Matheus Tavaresae227512021-03-23 11:19:36 -030029 *
30 * With checkout_entry_ca(), callers can optionally pass a preloaded
31 * conv_attrs struct (to avoid reloading it), when ce refers to a
32 * regular file. If ca is NULL, the attributes will be loaded
33 * internally when (and if) needed.
Matheus Tavaresd052cc02021-03-23 11:19:32 -030034 */
Matheus Tavaresae227512021-03-23 11:19:36 -030035int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
36 const struct checkout *state, char *topath,
37 int *nr_checkouts);
38static inline int checkout_entry(struct cache_entry *ce,
39 const struct checkout *state, char *topath,
40 int *nr_checkouts)
41{
42 return checkout_entry_ca(ce, NULL, state, topath, nr_checkouts);
43}
Matheus Tavaresd052cc02021-03-23 11:19:32 -030044
45void enable_delayed_checkout(struct checkout *state);
46int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
47
48/*
49 * Unlink the last component and schedule the leading directories for
50 * removal, such that empty directories get removed.
51 */
52void unlink_entry(const struct cache_entry *ce);
53
Matheus Tavares49cfd902021-03-23 11:19:33 -030054void *read_blob_entry(const struct cache_entry *ce, unsigned long *size);
55int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st);
Matheus Tavares584a0d12021-03-23 11:19:34 -030056void update_ce_after_write(const struct checkout *state, struct cache_entry *ce,
57 struct stat *st);
Matheus Tavares49cfd902021-03-23 11:19:33 -030058
Matheus Tavaresd052cc02021-03-23 11:19:32 -030059#endif /* ENTRY_H */