diff options
| -rw-r--r-- | include/git2/tree.h | 8 | ||||
| -rw-r--r-- | src/fileops.h | 3 | ||||
| -rw-r--r-- | src/tree.c | 12 |
3 files changed, 23 insertions, 0 deletions
diff --git a/include/git2/tree.h b/include/git2/tree.h index 0caf60a48..7b682b306 100644 --- a/include/git2/tree.h +++ b/include/git2/tree.h @@ -129,6 +129,14 @@ GIT_EXTERN(const char *) git_tree_entry_name(const git_tree_entry *entry); GIT_EXTERN(const git_oid *) git_tree_entry_id(const git_tree_entry *entry); /** + * Get the type of the object pointed by the entry + * + * @param entry a tree entry + * @return the type of the pointed object + */ +GIT_EXTERN(git_otype) git_tree_entry_type(const git_tree_entry *entry); + +/** * Convert a tree entry to the git_object it points too. * * @param object pointer to the converted object diff --git a/src/fileops.h b/src/fileops.h index 4a86e1c63..c114508db 100644 --- a/src/fileops.h +++ b/src/fileops.h @@ -20,6 +20,9 @@ #define GIT_PLATFORM_PATH_SEP '/' #endif +#define S_IFGITLINK 0160000 +#define S_ISGITLINK(m) (((m) & S_IFMT) == S_IFGITLINK) + #ifdef GIT_WIN32 GIT_INLINE(int) link(const char *GIT_UNUSED(old), const char *GIT_UNUSED(new)) { diff --git a/src/tree.c b/src/tree.c index 60413e276..d539f83e2 100644 --- a/src/tree.c +++ b/src/tree.c @@ -100,6 +100,18 @@ const git_oid *git_tree_entry_id(const git_tree_entry *entry) return &entry->oid; } +git_otype git_tree_entry_type(const git_tree_entry *entry) +{ + assert(entry); + + if (S_ISGITLINK(entry->attr)) + return GIT_OBJ_COMMIT; + else if (S_ISDIR(entry->attr)) + return GIT_OBJ_TREE; + else + return GIT_OBJ_BLOB; +} + int git_tree_entry_2object(git_object **object_out, git_repository *repo, const git_tree_entry *entry) { assert(entry && object_out); |
