2005-04-19 02:39:48 +08:00
|
|
|
#ifndef TREE_H
|
|
|
|
#define TREE_H
|
|
|
|
|
|
|
|
#include "object.h"
|
|
|
|
|
2018-11-19 00:47:56 +08:00
|
|
|
struct repository;
|
2014-11-30 17:05:00 +08:00
|
|
|
struct strbuf;
|
2005-04-19 02:39:48 +08:00
|
|
|
|
|
|
|
struct tree {
|
|
|
|
struct object object;
|
2006-05-30 03:16:12 +08:00
|
|
|
void *buffer;
|
|
|
|
unsigned long size;
|
2005-04-19 02:39:48 +08:00
|
|
|
};
|
|
|
|
|
2018-11-19 00:47:56 +08:00
|
|
|
extern const char *tree_type;
|
|
|
|
|
2018-06-29 09:22:09 +08:00
|
|
|
struct tree *lookup_tree(struct repository *r, const struct object_id *oid);
|
2005-04-19 02:39:48 +08:00
|
|
|
|
2005-05-07 01:48:34 +08:00
|
|
|
int parse_tree_buffer(struct tree *item, void *buffer, unsigned long size);
|
|
|
|
|
add quieter versions of parse_{tree,commit}
When we call parse_commit, it will complain to stderr if the
object does not exist or cannot be read. This means that we
may produce useless error messages if this situation is
expected (e.g., because the object is marked UNINTERESTING,
or because revs->ignore_missing_links is set).
We can fix this by adding a new "parse_X_gently" form that
takes a flag to suppress the messages. The existing
"parse_X" form is already gentle in the sense that it
returns an error rather than dying, and we could in theory
just add a "quiet" flag to it (with existing callers passing
"0"). But doing it this way means we do not have to disturb
existing callers.
Note also that the new flag is "quiet_on_missing", and not
just "quiet". We could add a flag to suppress _all_ errors,
but besides being a more invasive change (we would have to
pass the flag down to sub-functions, too), there is a good
reason not to: we would never want to use it. Missing a
linked object is expected in some circumstances, but it is
never expected to have a malformed commit, or to get a tree
when we wanted a commit. We should always complain about
these corruptions.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-06-01 17:56:26 +08:00
|
|
|
int parse_tree_gently(struct tree *tree, int quiet_on_missing);
|
|
|
|
static inline int parse_tree(struct tree *tree)
|
|
|
|
{
|
|
|
|
return parse_tree_gently(tree, 0);
|
|
|
|
}
|
2013-06-06 06:37:39 +08:00
|
|
|
void free_tree_buffer(struct tree *tree);
|
2005-04-19 02:39:48 +08:00
|
|
|
|
2005-09-05 14:03:51 +08:00
|
|
|
/* Parses and returns the tree in the given ent, chasing tags and commits. */
|
2017-05-07 06:10:37 +08:00
|
|
|
struct tree *parse_tree_indirect(const struct object_id *oid);
|
2005-09-05 14:03:51 +08:00
|
|
|
|
2020-12-13 16:04:25 +08:00
|
|
|
int cmp_cache_name_compare(const void *a_, const void *b_);
|
|
|
|
|
2005-11-27 01:38:20 +08:00
|
|
|
#define READ_TREE_RECURSIVE 1
|
2018-03-12 10:27:26 +08:00
|
|
|
typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, int, void *);
|
2005-11-27 01:38:20 +08:00
|
|
|
|
2018-11-19 00:47:56 +08:00
|
|
|
int read_tree_recursive(struct repository *r,
|
|
|
|
struct tree *tree,
|
|
|
|
const char *base, int baselen,
|
|
|
|
int stage, const struct pathspec *pathspec,
|
|
|
|
read_tree_fn_t fn, void *context);
|
2005-11-27 01:38:20 +08:00
|
|
|
|
2018-11-19 00:47:56 +08:00
|
|
|
int read_tree(struct repository *r, struct tree *tree,
|
|
|
|
int stage, struct pathspec *pathspec,
|
|
|
|
struct index_state *istate);
|
2005-11-27 01:38:20 +08:00
|
|
|
|
2005-04-19 02:39:48 +08:00
|
|
|
#endif /* TREE_H */
|