summaryrefslogtreecommitdiff
path: root/tree.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-06-01 05:56:26 -0400
committerJunio C Hamano <gitster@pobox.com>2015-06-01 09:29:42 -0700
commit9cc2b07a7c95fad0bb5e3a7a8db29bebdb90d92b (patch)
tree36523a5d16a71ba803ce5576b207d2db1542b30e /tree.c
parentfdf96a20acf96a6ac538df8113b2aafd6ed71d50 (diff)
downloadgit-9cc2b07a7c95fad0bb5e3a7a8db29bebdb90d92b.tar.gz
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>
Diffstat (limited to 'tree.c')
-rw-r--r--tree.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/tree.c b/tree.c
index bb02c1caa4..194a84074d 100644
--- a/tree.c
+++ b/tree.c
@@ -198,7 +198,7 @@ int parse_tree_buffer(struct tree *item, void *buffer, unsigned long size)
return 0;
}
-int parse_tree(struct tree *item)
+int parse_tree_gently(struct tree *item, int quiet_on_missing)
{
enum object_type type;
void *buffer;
@@ -208,7 +208,8 @@ int parse_tree(struct tree *item)
return 0;
buffer = read_sha1_file(item->object.sha1, &type, &size);
if (!buffer)
- return error("Could not read %s",
+ return quiet_on_missing ? -1 :
+ error("Could not read %s",
sha1_to_hex(item->object.sha1));
if (type != OBJ_TREE) {
free(buffer);