15 struct name_entry entry
;
19 static inline const struct object_id
*tree_entry_extract(struct tree_desc
*desc
, const char **pathp
, unsigned short *modep
)
21 *pathp
= desc
->entry
.path
;
22 *modep
= desc
->entry
.mode
;
23 return &desc
->entry
.oid
;
26 static inline int tree_entry_len(const struct name_entry
*ne
)
32 * The _gently versions of these functions warn and return false on a
33 * corrupt tree entry rather than dying,
36 void update_tree_entry(struct tree_desc
*);
37 int update_tree_entry_gently(struct tree_desc
*);
38 void init_tree_desc(struct tree_desc
*desc
, const void *buf
, unsigned long size
);
39 int init_tree_desc_gently(struct tree_desc
*desc
, const void *buf
, unsigned long size
);
42 * Helper function that does both tree_entry_extract() and update_tree_entry()
43 * and returns true for success
45 int tree_entry(struct tree_desc
*, struct name_entry
*);
46 int tree_entry_gently(struct tree_desc
*, struct name_entry
*);
48 void *fill_tree_descriptor(struct tree_desc
*desc
, const struct object_id
*oid
);
51 typedef int (*traverse_callback_t
)(int n
, unsigned long mask
, unsigned long dirmask
, struct name_entry
*entry
, struct traverse_info
*);
52 int traverse_trees(struct index_state
*istate
, int n
, struct tree_desc
*t
, struct traverse_info
*info
);
54 enum get_oid_result
get_tree_entry_follow_symlinks(struct object_id
*tree_oid
, const char *name
, struct object_id
*result
, struct strbuf
*result_path
, unsigned short *mode
);
56 struct traverse_info
{
57 const char *traverse_path
;
58 struct traverse_info
*prev
;
59 struct name_entry name
;
61 struct pathspec
*pathspec
;
63 unsigned long df_conflicts
;
64 traverse_callback_t fn
;
69 int get_tree_entry(const struct object_id
*, const char *, struct object_id
*, unsigned short *);
70 extern char *make_traverse_path(char *path
, const struct traverse_info
*info
, const struct name_entry
*n
);
71 extern void setup_traverse_info(struct traverse_info
*info
, const char *base
);
73 static inline int traverse_path_len(const struct traverse_info
*info
, const struct name_entry
*n
)
75 return info
->pathlen
+ tree_entry_len(n
);
78 /* in general, positive means "kind of interesting" */
80 all_entries_not_interesting
= -1, /* no, and no subsequent entries will be either */
81 entry_not_interesting
= 0,
82 entry_interesting
= 1,
83 all_entries_interesting
= 2 /* yes, and all subsequent entries will be */
86 enum interesting
tree_entry_interesting(struct index_state
*istate
,
87 const struct name_entry
*,
89 const struct pathspec
*ps
);