summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
authorDavid Turner <novalis@novalis.org>2019-01-18 04:19:43 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-01-18 23:22:02 (GMT)
commitd1dd94b308607d0a37aa8a013fd20678956d3531 (patch)
tree76941b07caff798b7e8b45c05d7c88075b087f63 /cache.h
parent16a465bc018d09e9d7bbbdc5f40a7fb99c21f8ef (diff)
downloadgit-d1dd94b308607d0a37aa8a013fd20678956d3531.zip
git-d1dd94b308607d0a37aa8a013fd20678956d3531.tar.gz
git-d1dd94b308607d0a37aa8a013fd20678956d3531.tar.bz2
Do not print 'dangling' for cat-file in case of ambiguity
The return values -1 and -2 from get_oid could mean two different things, depending on whether they were from an enum returned by get_tree_entry_follow_symlinks, or from a different code path. This caused 'dangling' to be printed from a git cat-file in the case of an ambiguous (-2) result. Unify the results of get_oid* and get_tree_entry_follow_symlinks to be one common type, with unambiguous values. Signed-off-by: David Turner <novalis@novalis.org> Reported-by: Eric Wong <e@80x24.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/cache.h b/cache.h
index 49713cc..70652e9 100644
--- a/cache.h
+++ b/cache.h
@@ -1332,6 +1332,24 @@ struct object_context {
GET_OID_TREE | GET_OID_TREEISH | \
GET_OID_BLOB)
+enum get_oid_result {
+ FOUND = 0,
+ MISSING_OBJECT = -1, /* The requested object is missing */
+ SHORT_NAME_AMBIGUOUS = -2,
+ /* The following only apply when symlinks are followed */
+ DANGLING_SYMLINK = -4, /*
+ * The initial symlink is there, but
+ * (transitively) points to a missing
+ * in-tree file
+ */
+ SYMLINK_LOOP = -5,
+ NOT_DIR = -6, /*
+ * Somewhere along the symlink chain, a path is
+ * requested which contains a file as a
+ * non-final element.
+ */
+};
+
extern int get_oid(const char *str, struct object_id *oid);
extern int get_oid_commit(const char *str, struct object_id *oid);
extern int get_oid_committish(const char *str, struct object_id *oid);
@@ -1339,7 +1357,7 @@ extern int get_oid_tree(const char *str, struct object_id *oid);
extern int get_oid_treeish(const char *str, struct object_id *oid);
extern int get_oid_blob(const char *str, struct object_id *oid);
extern void maybe_die_on_misspelt_object_name(const char *name, const char *prefix);
-extern int get_oid_with_context(const char *str, unsigned flags, struct object_id *oid, struct object_context *oc);
+extern enum get_oid_result get_oid_with_context(const char *str, unsigned flags, struct object_id *oid, struct object_context *oc);
typedef int each_abbrev_fn(const struct object_id *oid, void *);