5 const struct object_id
*oid
;
12 struct name_entry entry
;
16 static inline const struct object_id
*tree_entry_extract(struct tree_desc
*desc
, const char **pathp
, unsigned int *modep
)
18 *pathp
= desc
->entry
.path
;
19 *modep
= desc
->entry
.mode
;
20 return desc
->entry
.oid
;
23 static inline int tree_entry_len(const struct name_entry
*ne
)
25 return (const char *)ne
->oid
- ne
->path
- 1;
29 * The _gently versions of these functions warn and return false on a
30 * corrupt tree entry rather than dying,
33 void update_tree_entry(struct tree_desc
*);
34 int update_tree_entry_gently(struct tree_desc
*);
35 void init_tree_desc(struct tree_desc
*desc
, const void *buf
, unsigned long size
);
36 int init_tree_desc_gently(struct tree_desc
*desc
, const void *buf
, unsigned long size
);
39 * Helper function that does both tree_entry_extract() and update_tree_entry()
40 * and returns true for success
42 int tree_entry(struct tree_desc
*, struct name_entry
*);
43 int tree_entry_gently(struct tree_desc
*, struct name_entry
*);
45 void *fill_tree_descriptor(struct tree_desc
*desc
, const unsigned char *sha1
);
48 typedef int (*traverse_callback_t
)(int n
, unsigned long mask
, unsigned long dirmask
, struct name_entry
*entry
, struct traverse_info
*);
49 int traverse_trees(int n
, struct tree_desc
*t
, struct traverse_info
*info
);
51 enum follow_symlinks_result
{
52 FOUND
= 0, /* This includes out-of-tree links */
53 MISSING_OBJECT
= -1, /* The initial symlink is missing */
54 DANGLING_SYMLINK
= -2, /*
55 * The initial symlink is there, but
56 * (transitively) points to a missing
61 * Somewhere along the symlink chain, a path is
62 * requested which contains a file as a
67 enum follow_symlinks_result
get_tree_entry_follow_symlinks(unsigned char *tree_sha1
, const char *name
, unsigned char *result
, struct strbuf
*result_path
, unsigned *mode
);
69 struct traverse_info
{
70 const char *traverse_path
;
71 struct traverse_info
*prev
;
72 struct name_entry name
;
74 struct pathspec
*pathspec
;
76 unsigned long df_conflicts
;
77 traverse_callback_t fn
;
82 int get_tree_entry(const unsigned char *, const char *, unsigned char *, unsigned *);
83 extern char *make_traverse_path(char *path
, const struct traverse_info
*info
, const struct name_entry
*n
);
84 extern void setup_traverse_info(struct traverse_info
*info
, const char *base
);
86 static inline int traverse_path_len(const struct traverse_info
*info
, const struct name_entry
*n
)
88 return info
->pathlen
+ tree_entry_len(n
);
91 /* in general, positive means "kind of interesting" */
93 all_entries_not_interesting
= -1, /* no, and no subsequent entries will be either */
94 entry_not_interesting
= 0,
95 entry_interesting
= 1,
96 all_entries_interesting
= 2 /* yes, and all subsequent entries will be */
99 extern enum interesting
tree_entry_interesting(const struct name_entry
*,
100 struct strbuf
*, int,
101 const struct pathspec
*ps
);