Commit ca27ae48 by Vicent Martí

Merge pull request #1894 from libgit2/cmn/tree-raw

tree: allow retrieval of raw attributes
parents 711333ef 13f670a5
...@@ -199,6 +199,17 @@ GIT_EXTERN(git_otype) git_tree_entry_type(const git_tree_entry *entry); ...@@ -199,6 +199,17 @@ GIT_EXTERN(git_otype) git_tree_entry_type(const git_tree_entry *entry);
GIT_EXTERN(git_filemode_t) git_tree_entry_filemode(const git_tree_entry *entry); GIT_EXTERN(git_filemode_t) git_tree_entry_filemode(const git_tree_entry *entry);
/** /**
* Get the raw UNIX file attributes of a tree entry
*
* This function does not perform any normalization and is only useful
* if you need to be able to recreate the original tree object.
*
* @param entry a tree entry
* @return filemode as an integer
*/
GIT_EXTERN(git_filemode_t) git_tree_entry_filemode_raw(const git_tree_entry *entry);
/**
* Compare two tree entries * Compare two tree entries
* *
* @param e1 first tree entry * @param e1 first tree entry
......
...@@ -237,7 +237,12 @@ void git_tree__free(void *_tree) ...@@ -237,7 +237,12 @@ void git_tree__free(void *_tree)
git_filemode_t git_tree_entry_filemode(const git_tree_entry *entry) git_filemode_t git_tree_entry_filemode(const git_tree_entry *entry)
{ {
return (git_filemode_t)entry->attr; return normalize_filemode(entry->attr);
}
git_filemode_t git_tree_entry_filemode_raw(const git_tree_entry *entry)
{
return entry->attr;
} }
const char *git_tree_entry_name(const git_tree_entry *entry) const char *git_tree_entry_name(const git_tree_entry *entry)
...@@ -386,8 +391,6 @@ int git_tree__parse(void *_tree, git_odb_object *odb_obj) ...@@ -386,8 +391,6 @@ int git_tree__parse(void *_tree, git_odb_object *odb_obj)
if (git__strtol32(&attr, buffer, &buffer, 8) < 0 || !buffer) if (git__strtol32(&attr, buffer, &buffer, 8) < 0 || !buffer)
return tree_error("Failed to parse tree. Can't parse filemode", NULL); return tree_error("Failed to parse tree. Can't parse filemode", NULL);
attr = normalize_filemode(attr); /* make sure to normalize the filemode */
if (*buffer++ != ' ') if (*buffer++ != ' ')
return tree_error("Failed to parse tree. Object is corrupted", NULL); return tree_error("Failed to parse tree. Object is corrupted", NULL);
......
...@@ -107,7 +107,8 @@ void test_object_tree_attributes__normalize_600(void) ...@@ -107,7 +107,8 @@ void test_object_tree_attributes__normalize_600(void)
cl_git_pass(git_tree_lookup(&tree, repo, &id)); cl_git_pass(git_tree_lookup(&tree, repo, &id));
entry = git_tree_entry_byname(tree, "ListaTeste.xml"); entry = git_tree_entry_byname(tree, "ListaTeste.xml");
cl_assert_equal_i(entry->attr, GIT_FILEMODE_BLOB); cl_assert_equal_i(git_tree_entry_filemode(entry), GIT_FILEMODE_BLOB);
cl_assert_equal_i(git_tree_entry_filemode_raw(entry), 0100600);
git_tree_free(tree); git_tree_free(tree);
cl_git_sandbox_cleanup(); cl_git_sandbox_cleanup();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment