summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/git2/tree.h8
-rw-r--r--include/git2/types.h10
-rw-r--r--src/checkout.c4
-rw-r--r--src/notes.c12
-rw-r--r--src/tree.c46
-rw-r--r--src/tree.h4
-rw-r--r--tests-clar/index/filemodes.c40
-rw-r--r--tests-clar/object/tree/attributes.c31
-rw-r--r--tests-clar/object/tree/write.c53
9 files changed, 116 insertions, 92 deletions
diff --git a/include/git2/tree.h b/include/git2/tree.h
index 29aedacc6..e5261417c 100644
--- a/include/git2/tree.h
+++ b/include/git2/tree.h
@@ -143,9 +143,9 @@ GIT_EXTERN(const git_tree_entry *) git_tree_entry_byoid(git_tree *tree, const gi
* Get the UNIX file attributes of a tree entry
*
* @param entry a tree entry
- * @return attributes as an integer
+ * @return filemode as an integer
*/
-GIT_EXTERN(unsigned int) git_tree_entry_attributes(const git_tree_entry *entry);
+GIT_EXTERN(git_filemode_t) git_tree_entry_filemode(const git_tree_entry *entry);
/**
* Get the filename of a tree entry
@@ -271,7 +271,7 @@ GIT_EXTERN(const git_tree_entry *) git_treebuilder_get(git_treebuilder *bld, con
* @param bld Tree builder
* @param filename Filename of the entry
* @param id SHA1 oid of the entry
- * @param attributes Folder attributes of the entry. This parameter must
+ * @param filemode Folder attributes of the entry. This parameter must
* be valued with one of the following entries: 0040000, 0100644,
* 0100755, 0120000 or 0160000.
* @return 0 or an error code
@@ -281,7 +281,7 @@ GIT_EXTERN(int) git_treebuilder_insert(
git_treebuilder *bld,
const char *filename,
const git_oid *id,
- unsigned int attributes);
+ git_filemode_t filemode);
/**
* Remove an entry from the builder by its filename
diff --git a/include/git2/types.h b/include/git2/types.h
index acd5a73bc..d3a905372 100644
--- a/include/git2/types.h
+++ b/include/git2/types.h
@@ -175,6 +175,16 @@ typedef enum {
GIT_RESET_MIXED = 2,
} git_reset_type;
+/** Valid modes for index and tree entries. */
+typedef enum {
+ GIT_FILEMODE_NEW = 0000000,
+ GIT_FILEMODE_TREE = 0040000,
+ GIT_FILEMODE_BLOB = 0100644,
+ GIT_FILEMODE_BLOB_EXECUTABLE = 0100755,
+ GIT_FILEMODE_LINK = 0120000,
+ GIT_FILEMODE_COMMIT = 0160000,
+} git_filemode_t;
+
typedef struct git_refspec git_refspec;
typedef struct git_remote git_remote;
diff --git a/src/checkout.c b/src/checkout.c
index 252d9c4ae..ac540391e 100644
--- a/src/checkout.c
+++ b/src/checkout.c
@@ -88,7 +88,7 @@ static int blob_contents_to_file(git_repository *repo, git_buf *fnbuf,
/* Allow overriding of file mode */
if (!file_mode)
- file_mode = git_tree_entry_attributes(entry);
+ file_mode = git_tree_entry_filemode(entry);
if ((retcode = git_futils_mkpath2file(git_buf_cstr(fnbuf), data->opts->dir_mode)) < 0)
goto bctf_cleanup;
@@ -111,7 +111,7 @@ static int checkout_walker(const char *path, const git_tree_entry *entry, void *
{
int retcode = 0;
tree_walk_data *data = (tree_walk_data*)payload;
- int attr = git_tree_entry_attributes(entry);
+ int attr = git_tree_entry_filemode(entry);
git_buf fnbuf = GIT_BUF_INIT;
git_buf_join_n(&fnbuf, '/', 3,
git_repository_workdir(data->repo),
diff --git a/src/notes.c b/src/notes.c
index 6f9e7779d..81e4e5073 100644
--- a/src/notes.c
+++ b/src/notes.c
@@ -33,7 +33,7 @@ static int find_subtree_in_current_level(
if (!git__ishex(git_tree_entry_name(entry)))
continue;
- if (S_ISDIR(git_tree_entry_attributes(entry))
+ if (S_ISDIR(git_tree_entry_filemode(entry))
&& strlen(git_tree_entry_name(entry)) == 2
&& !strncmp(git_tree_entry_name(entry), annotated_object_sha + fanout, 2))
return git_tree_lookup(out, repo, git_tree_entry_id(entry));
@@ -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..83aa303d4 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)
@@ -185,9 +185,9 @@ const git_oid *git_tree_id(git_tree *c)
return git_object_id((git_object *)c);
}
-unsigned int git_tree_entry_attributes(const git_tree_entry *entry)
+git_filemode_t git_tree_entry_filemode(const git_tree_entry *entry)
{
- return entry->attr;
+ return (git_filemode_t)entry->attr;
}
const char *git_tree_entry_name(const git_tree_entry *entry)
@@ -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
diff --git a/tests-clar/index/filemodes.c b/tests-clar/index/filemodes.c
index 8bd35ddab..75c94e8e7 100644
--- a/tests-clar/index/filemodes.c
+++ b/tests-clar/index/filemodes.c
@@ -100,40 +100,40 @@ void test_index_filemodes__untrusted(void)
/* 1 - add 0644 over existing 0644 -> expect 0644 */
replace_file_with_mode("exec_off", "filemodes/exec_off.0", 0644);
- add_and_check_mode(index, "exec_off", 0100644);
+ add_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB);
/* 2 - add 0644 over existing 0755 -> expect 0755 */
replace_file_with_mode("exec_on", "filemodes/exec_on.0", 0644);
- add_and_check_mode(index, "exec_on", 0100755);
+ add_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 3 - add 0755 over existing 0644 -> expect 0644 */
replace_file_with_mode("exec_off", "filemodes/exec_off.1", 0755);
- add_and_check_mode(index, "exec_off", 0100644);
+ add_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB);
/* 4 - add 0755 over existing 0755 -> expect 0755 */
replace_file_with_mode("exec_on", "filemodes/exec_on.1", 0755);
- add_and_check_mode(index, "exec_on", 0100755);
+ add_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 5 - append 0644 over existing 0644 -> expect 0644 */
replace_file_with_mode("exec_off", "filemodes/exec_off.2", 0644);
- append_and_check_mode(index, "exec_off", 0100644);
+ append_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB);
/* 6 - append 0644 over existing 0755 -> expect 0755 */
replace_file_with_mode("exec_on", "filemodes/exec_on.2", 0644);
- append_and_check_mode(index, "exec_on", 0100755);
+ append_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 7 - append 0755 over existing 0644 -> expect 0644 */
replace_file_with_mode("exec_off", "filemodes/exec_off.3", 0755);
- append_and_check_mode(index, "exec_off", 0100644);
+ append_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB);
/* 8 - append 0755 over existing 0755 -> expect 0755 */
replace_file_with_mode("exec_on", "filemodes/exec_on.3", 0755);
- append_and_check_mode(index, "exec_on", 0100755);
+ append_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 9 - add new 0644 -> expect 0644 */
cl_git_write2file("filemodes/new_off", "blah",
O_WRONLY | O_CREAT | O_TRUNC, 0644);
- add_and_check_mode(index, "new_off", 0100644);
+ add_and_check_mode(index, "new_off", GIT_FILEMODE_BLOB);
/* this test won't give predictable results on a platform
* that doesn't support filemodes correctly, so skip it.
@@ -142,7 +142,7 @@ void test_index_filemodes__untrusted(void)
/* 10 - add 0755 -> expect 0755 */
cl_git_write2file("filemodes/new_on", "blah",
O_WRONLY | O_CREAT | O_TRUNC, 0755);
- add_and_check_mode(index, "new_on", 0100755);
+ add_and_check_mode(index, "new_on", GIT_FILEMODE_BLOB_EXECUTABLE);
}
git_index_free(index);
@@ -168,45 +168,45 @@ void test_index_filemodes__trusted(void)
/* 1 - add 0644 over existing 0644 -> expect 0644 */
replace_file_with_mode("exec_off", "filemodes/exec_off.0", 0644);
- add_and_check_mode(index, "exec_off", 0100644);
+ add_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB);
/* 2 - add 0644 over existing 0755 -> expect 0644 */
replace_file_with_mode("exec_on", "filemodes/exec_on.0", 0644);
- add_and_check_mode(index, "exec_on", 0100644);
+ add_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB);
/* 3 - add 0755 over existing 0644 -> expect 0755 */
replace_file_with_mode("exec_off", "filemodes/exec_off.1", 0755);
- add_and_check_mode(index, "exec_off", 0100755);
+ add_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 4 - add 0755 over existing 0755 -> expect 0755 */
replace_file_with_mode("exec_on", "filemodes/exec_on.1", 0755);
- add_and_check_mode(index, "exec_on", 0100755);
+ add_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 5 - append 0644 over existing 0644 -> expect 0644 */
replace_file_with_mode("exec_off", "filemodes/exec_off.2", 0644);
- append_and_check_mode(index, "exec_off", 0100644);
+ append_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB);
/* 6 - append 0644 over existing 0755 -> expect 0644 */
replace_file_with_mode("exec_on", "filemodes/exec_on.2", 0644);
- append_and_check_mode(index, "exec_on", 0100644);
+ append_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB);
/* 7 - append 0755 over existing 0644 -> expect 0755 */
replace_file_with_mode("exec_off", "filemodes/exec_off.3", 0755);
- append_and_check_mode(index, "exec_off", 0100755);
+ append_and_check_mode(index, "exec_off", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 8 - append 0755 over existing 0755 -> expect 0755 */
replace_file_with_mode("exec_on", "filemodes/exec_on.3", 0755);
- append_and_check_mode(index, "exec_on", 0100755);
+ append_and_check_mode(index, "exec_on", GIT_FILEMODE_BLOB_EXECUTABLE);
/* 9 - add new 0644 -> expect 0644 */
cl_git_write2file("filemodes/new_off", "blah",
O_WRONLY | O_CREAT | O_TRUNC, 0644);
- add_and_check_mode(index, "new_off", 0100644);
+ add_and_check_mode(index, "new_off", GIT_FILEMODE_BLOB);
/* 10 - add 0755 -> expect 0755 */
cl_git_write2file("filemodes/new_on", "blah",
O_WRONLY | O_CREAT | O_TRUNC, 0755);
- add_and_check_mode(index, "new_on", 0100755);
+ add_and_check_mode(index, "new_on", GIT_FILEMODE_BLOB_EXECUTABLE);
git_index_free(index);
}
diff --git a/tests-clar/object/tree/attributes.c b/tests-clar/object/tree/attributes.c
index ed88e7486..054f67137 100644
--- a/tests-clar/object/tree/attributes.c
+++ b/tests-clar/object/tree/attributes.c
@@ -4,9 +4,6 @@
static const char *blob_oid = "3d0970ec547fc41ef8a5882dde99c6adce65b021";
static const char *tree_oid = "1b05fdaa881ee45b48cbaa5e9b037d667a47745e";
-#define GROUP_WRITABLE_FILE 0100664
-#define REGULAR_FILE 0100644
-
void test_object_tree_attributes__ensure_correctness_of_attributes_on_insertion(void)
{
git_treebuilder *builder;
@@ -16,9 +13,9 @@ void test_object_tree_attributes__ensure_correctness_of_attributes_on_insertion(
cl_git_pass(git_treebuilder_create(&builder, NULL));
- cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, 0777777));
- cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, 0100666));
- cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, 0000001));
+ cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, (git_filemode_t)0777777));
+ cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, (git_filemode_t)0100666));
+ cl_git_fail(git_treebuilder_insert(NULL, builder, "one.txt", &oid, (git_filemode_t)0000001));
git_treebuilder_free(builder);
}
@@ -37,8 +34,8 @@ void test_object_tree_attributes__group_writable_tree_entries_created_with_an_an
entry = git_tree_entry_byname(tree, "old_mode.txt");
cl_assert_equal_i(
- GROUP_WRITABLE_FILE,
- git_tree_entry_attributes(entry));
+ GIT_FILEMODE_BLOB_GROUP_WRITABLE,
+ git_tree_entry_filemode(entry));
git_tree_free(tree);
git_repository_free(repo);
@@ -63,11 +60,11 @@ void test_object_tree_attributes__normalize_attributes_when_inserting_in_a_new_t
builder,
"normalized.txt",
&bid,
- GROUP_WRITABLE_FILE));
+ GIT_FILEMODE_BLOB_GROUP_WRITABLE));
cl_assert_equal_i(
- REGULAR_FILE,
- git_tree_entry_attributes(entry));
+ GIT_FILEMODE_BLOB,
+ git_tree_entry_filemode(entry));
cl_git_pass(git_treebuilder_write(&tid, repo, builder));
git_treebuilder_free(builder);
@@ -76,8 +73,8 @@ void test_object_tree_attributes__normalize_attributes_when_inserting_in_a_new_t
entry = git_tree_entry_byname(tree, "normalized.txt");
cl_assert_equal_i(
- REGULAR_FILE,
- git_tree_entry_attributes(entry));
+ GIT_FILEMODE_BLOB,
+ git_tree_entry_filemode(entry));
git_tree_free(tree);
cl_git_sandbox_cleanup();
@@ -100,8 +97,8 @@ void test_object_tree_attributes__normalize_attributes_when_creating_a_tree_from
entry = git_treebuilder_get(builder, "old_mode.txt");
cl_assert_equal_i(
- REGULAR_FILE,
- git_tree_entry_attributes(entry));
+ GIT_FILEMODE_BLOB,
+ git_tree_entry_filemode(entry));
cl_git_pass(git_treebuilder_write(&tid2, repo, builder));
git_treebuilder_free(builder);
@@ -110,8 +107,8 @@ void test_object_tree_attributes__normalize_attributes_when_creating_a_tree_from
cl_git_pass(git_tree_lookup(&tree, repo, &tid2));
entry = git_tree_entry_byname(tree, "old_mode.txt");
cl_assert_equal_i(
- REGULAR_FILE,
- git_tree_entry_attributes(entry));
+ GIT_FILEMODE_BLOB,
+ git_tree_entry_filemode(entry));
git_tree_free(tree);
cl_git_sandbox_cleanup();
diff --git a/tests-clar/object/tree/write.c b/tests-clar/object/tree/write.c
index 8b0f3417f..657bed289 100644
--- a/tests-clar/object/tree/write.c
+++ b/tests-clar/object/tree/write.c
@@ -35,11 +35,16 @@ void test_object_tree_write__from_memory(void)
cl_git_pass(git_tree_lookup(&tree, g_repo, &id));
cl_git_pass(git_treebuilder_create(&builder, tree));
- cl_git_fail(git_treebuilder_insert(NULL, builder, "", &bid, 0100644));
- cl_git_fail(git_treebuilder_insert(NULL, builder, "/", &bid, 0100644));
- cl_git_fail(git_treebuilder_insert(NULL, builder, "folder/new.txt", &bid, 0100644));
+ cl_git_fail(git_treebuilder_insert(NULL, builder, "",
+ &bid, GIT_FILEMODE_BLOB));
+ cl_git_fail(git_treebuilder_insert(NULL, builder, "/",
+ &bid, GIT_FILEMODE_BLOB));
+ cl_git_fail(git_treebuilder_insert(NULL, builder, "folder/new.txt",
+ &bid, GIT_FILEMODE_BLOB));
+
+ cl_git_pass(git_treebuilder_insert(
+ NULL, builder, "new.txt", &bid, GIT_FILEMODE_BLOB));
- cl_git_pass(git_treebuilder_insert(NULL,builder,"new.txt",&bid,0100644));
cl_git_pass(git_treebuilder_write(&rid, g_repo, builder));
cl_assert(git_oid_cmp(&rid, &id2) == 0);
@@ -63,14 +68,16 @@ void test_object_tree_write__subtree(void)
//create subtree
cl_git_pass(git_treebuilder_create(&builder, NULL));
- cl_git_pass(git_treebuilder_insert(NULL,builder,"new.txt",&bid,0100644)); //-V536
+ cl_git_pass(git_treebuilder_insert(
+ NULL, builder, "new.txt", &bid, GIT_FILEMODE_BLOB)); //-V536
cl_git_pass(git_treebuilder_write(&subtree_id, g_repo, builder));
git_treebuilder_free(builder);
// create parent tree
cl_git_pass(git_tree_lookup(&tree, g_repo, &id));
cl_git_pass(git_treebuilder_create(&builder, tree));
- cl_git_pass(git_treebuilder_insert(NULL,builder,"new",&subtree_id,040000)); //-V536
+ cl_git_pass(git_treebuilder_insert(
+ NULL, builder, "new", &subtree_id, GIT_FILEMODE_TREE)); //-V536
cl_git_pass(git_treebuilder_write(&id_hiearar, g_repo, builder));
git_treebuilder_free(builder);
git_tree_free(tree);
@@ -96,23 +103,23 @@ void test_object_tree_write__sorted_subtrees(void)
unsigned int attr;
const char *filename;
} entries[] = {
- { 0100644, ".gitattributes" },
- { 0100644, ".gitignore" },
- { 0100644, ".htaccess" },
- { 0100644, "Capfile" },
- { 0100644, "Makefile"},
- { 0100644, "README"},
- { 0040000, "app"},
- { 0040000, "cake"},
- { 0040000, "config"},
- { 0100644, "c"},
- { 0100644, "git_test.txt"},
- { 0100644, "htaccess.htaccess"},
- { 0100644, "index.php"},
- { 0040000, "plugins"},
- { 0040000, "schemas"},
- { 0040000, "ssl-certs"},
- { 0040000, "vendors"}
+ { GIT_FILEMODE_BLOB, ".gitattributes" },
+ { GIT_FILEMODE_BLOB, ".gitignore" },
+ { GIT_FILEMODE_BLOB, ".htaccess" },
+ { GIT_FILEMODE_BLOB, "Capfile" },
+ { GIT_FILEMODE_BLOB, "Makefile"},
+ { GIT_FILEMODE_BLOB, "README"},
+ { GIT_FILEMODE_TREE, "app"},
+ { GIT_FILEMODE_TREE, "cake"},
+ { GIT_FILEMODE_TREE, "config"},
+ { GIT_FILEMODE_BLOB, "c"},
+ { GIT_FILEMODE_BLOB, "git_test.txt"},
+ { GIT_FILEMODE_BLOB, "htaccess.htaccess"},
+ { GIT_FILEMODE_BLOB, "index.php"},
+ { GIT_FILEMODE_TREE, "plugins"},
+ { GIT_FILEMODE_TREE, "schemas"},
+ { GIT_FILEMODE_TREE, "ssl-certs"},
+ { GIT_FILEMODE_TREE, "vendors"}
};
git_oid blank_oid, tree_oid;