summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/notes.c10
-rw-r--r--src/tree.c42
-rw-r--r--src/tree.h4
3 files changed, 33 insertions, 23 deletions
diff --git a/src/notes.c b/src/notes.c
index 6f9e7779d..b592a2cd3 100644
--- a/src/notes.c
+++ b/src/notes.c
@@ -180,7 +180,7 @@ static int manipulate_note_in_tree_r(
subtree_name[2] = '\0';
error = tree_write(out, repo, parent, git_tree_id(new),
- subtree_name, 0040000);
+ subtree_name, GIT_FILEMODE_TREE);
cleanup:
@@ -252,7 +252,13 @@ static int insert_note_in_tree_enotfound_cb(git_tree **out,
GIT_UNUSED(current_error);
/* No existing fanout at this level, insert in place */
- return tree_write(out, repo, parent, note_oid, annotated_object_sha + fanout, 0100644);
+ return tree_write(
+ out,
+ repo,
+ parent,
+ note_oid,
+ annotated_object_sha + fanout,
+ GIT_FILEMODE_BLOB);
}
static int note_write(git_oid *out,
diff --git a/src/tree.c b/src/tree.c
index 0eee94735..315269d5d 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -14,14 +14,14 @@
#define DEFAULT_TREE_SIZE 16
#define MAX_FILEMODE_BYTES 6
-static bool valid_attributes(const int attributes)
+static bool valid_filemode(const int filemode)
{
- return (attributes == 0040000 /* Directory */
- || attributes == 0100644 /* Non executable file */
- || attributes == 0100664 /* Non executable group writable file */
- || attributes == 0100755 /* Executable file */
- || attributes == 0120000 /* Symbolic link */
- || attributes == 0160000); /* Git link */
+ return (filemode == GIT_FILEMODE_TREE
+ || filemode == GIT_FILEMODE_BLOB
+ || filemode == GIT_FILEMODE_BLOB_GROUP_WRITABLE
+ || filemode == GIT_FILEMODE_BLOB_EXECUTABLE
+ || filemode == GIT_FILEMODE_LINK
+ || filemode == GIT_FILEMODE_COMMIT);
}
static int valid_entry_name(const char *filename)
@@ -308,8 +308,8 @@ static int tree_parse_buffer(git_tree *tree, const char *buffer, const char *buf
int attr;
if (git__strtol32(&attr, buffer, &buffer, 8) < 0 ||
- !buffer || !valid_attributes(attr))
- return tree_error("Failed to parse tree. Can't parse attributes");
+ !buffer || !valid_filemode(attr))
+ return tree_error("Failed to parse tree. Can't parse filemode");
if (*buffer++ != ' ')
return tree_error("Failed to parse tree. Object is corrupted");
@@ -368,7 +368,7 @@ static int append_entry(
git_treebuilder *bld,
const char *filename,
const git_oid *id,
- unsigned int attributes)
+ git_filemode_t filemode)
{
git_tree_entry *entry;
@@ -376,7 +376,7 @@ static int append_entry(
GITERR_CHECK_ALLOC(entry);
git_oid_cpy(&entry->oid, id);
- entry->attr = attributes;
+ entry->attr = (uint16_t)filemode;
if (git_vector_insert(&bld->entries, entry) < 0)
return -1;
@@ -517,17 +517,17 @@ static void sort_entries(git_treebuilder *bld)
git_vector_sort(&bld->entries);
}
-GIT_INLINE(int) normalize_attributes(const int attributes)
+GIT_INLINE(git_filemode_t) normalize_filemode(git_filemode_t filemode)
{
/* 100664 mode is an early design mistake. Tree entries may bear
* this mode in some old git repositories, but it's now deprecated.
* We silently normalize while inserting new entries in a tree
* being built.
*/
- if (attributes == 0100664)
- return 0100644;
+ if (filemode == GIT_FILEMODE_BLOB_GROUP_WRITABLE)
+ return GIT_FILEMODE_BLOB;
- return attributes;
+ return filemode;
}
int git_treebuilder_create(git_treebuilder **builder_p, const git_tree *source)
@@ -553,7 +553,7 @@ int git_treebuilder_create(git_treebuilder **builder_p, const git_tree *source)
if (append_entry(
bld, entry_src->filename,
&entry_src->oid,
- normalize_attributes(entry_src->attr)) < 0)
+ normalize_filemode((git_filemode_t)entry_src->attr)) < 0)
goto on_error;
}
}
@@ -571,17 +571,17 @@ int git_treebuilder_insert(
git_treebuilder *bld,
const char *filename,
const git_oid *id,
- unsigned int attributes)
+ git_filemode_t filemode)
{
git_tree_entry *entry;
int pos;
assert(bld && id && filename);
- if (!valid_attributes(attributes))
- return tree_error("Failed to insert entry. Invalid attributes");
+ if (!valid_filemode(filemode))
+ return tree_error("Failed to insert entry. Invalid filemode");
- attributes = normalize_attributes(attributes);
+ filemode = normalize_filemode(filemode);
if (!valid_entry_name(filename))
return tree_error("Failed to insert entry. Invalid name for a tree entry");
@@ -598,7 +598,7 @@ int git_treebuilder_insert(
}
git_oid_cpy(&entry->oid, id);
- entry->attr = attributes;
+ entry->attr = filemode;
if (pos < 0) {
if (git_vector_insert(&bld->entries, entry) < 0)
diff --git a/src/tree.h b/src/tree.h
index c49309cbc..24b517ce3 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -47,5 +47,9 @@ int git_tree__parse(git_tree *tree, git_odb_object *obj);
*/
int git_tree__prefix_position(git_tree *tree, const char *prefix);
+/**
+ * Obsolete mode kept for compatibility reasons
+ */
+#define GIT_FILEMODE_BLOB_GROUP_WRITABLE 0100664
#endif