blob: 2d4fbb88c8ffabbd36faec0247d5a39a30f99c4f [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;
Ævar Arnfjörð Bjarmason4002ec32022-12-20 13:39:56 +010011 const char *super_prefix;
Matheus Tavaresd052cc02021-03-23 11:19:32 -030012 struct delayed_checkout *delayed_checkout;
13 struct checkout_metadata meta;
14 unsigned force:1,
15 quiet:1,
16 not_new:1,
17 clone:1,
18 refresh_cache:1;
19};
Ævar Arnfjörð Bjarmasonf69a6e42021-09-27 14:54:27 +020020#define CHECKOUT_INIT { .base_dir = "" }
Matheus Tavaresd052cc02021-03-23 11:19:32 -030021
22#define TEMPORARY_FILENAME_LENGTH 25
23/*
24 * Write the contents from ce out to the working tree.
25 *
26 * When topath[] is not NULL, instead of writing to the working tree
27 * file named by ce, a temporary file is created by this function and
28 * its name is returned in topath[], which must be able to hold at
29 * least TEMPORARY_FILENAME_LENGTH bytes long.
Matheus Tavaresae227512021-03-23 11:19:36 -030030 *
31 * With checkout_entry_ca(), callers can optionally pass a preloaded
32 * conv_attrs struct (to avoid reloading it), when ce refers to a
33 * regular file. If ca is NULL, the attributes will be loaded
34 * internally when (and if) needed.
Matheus Tavaresd052cc02021-03-23 11:19:32 -030035 */
Matheus Tavaresae227512021-03-23 11:19:36 -030036int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
37 const struct checkout *state, char *topath,
38 int *nr_checkouts);
39static inline int checkout_entry(struct cache_entry *ce,
40 const struct checkout *state, char *topath,
41 int *nr_checkouts)
42{
43 return checkout_entry_ca(ce, NULL, state, topath, nr_checkouts);
44}
Matheus Tavaresd052cc02021-03-23 11:19:32 -030045
46void enable_delayed_checkout(struct checkout *state);
Matheus Tavares611c7782022-07-14 08:49:12 -030047int finish_delayed_checkout(struct checkout *state, int show_progress);
Matheus Tavaresd052cc02021-03-23 11:19:32 -030048
49/*
50 * Unlink the last component and schedule the leading directories for
51 * removal, such that empty directories get removed.
Ævar Arnfjörð Bjarmason4002ec32022-12-20 13:39:56 +010052 *
53 * The "super_prefix" is either NULL, or the "--super-prefix" passed
54 * down from "read-tree" et al.
Matheus Tavaresd052cc02021-03-23 11:19:32 -030055 */
Ævar Arnfjörð Bjarmason4002ec32022-12-20 13:39:56 +010056void unlink_entry(const struct cache_entry *ce, const char *super_prefix);
Matheus Tavaresd052cc02021-03-23 11:19:32 -030057
Matt Coopere9aa7622021-11-02 15:46:08 +000058void *read_blob_entry(const struct cache_entry *ce, size_t *size);
Matheus Tavares49cfd902021-03-23 11:19:33 -030059int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st);
Matheus Tavares584a0d12021-03-23 11:19:34 -030060void update_ce_after_write(const struct checkout *state, struct cache_entry *ce,
61 struct stat *st);
Matheus Tavares49cfd902021-03-23 11:19:33 -030062
Matheus Tavaresd052cc02021-03-23 11:19:32 -030063#endif /* ENTRY_H */