Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
a7dbac0b
Commit
a7dbac0b
authored
Aug 17, 2012
by
nulltoken
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
filemode: deploy enum usage
parent
d854d59e
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
94 additions
and
80 deletions
+94
-80
include/git2/tree.h
+2
-2
src/notes.c
+8
-2
src/tree.c
+21
-21
src/tree.h
+4
-0
tests-clar/index/filemodes.c
+20
-20
tests-clar/object/tree/attributes.c
+9
-12
tests-clar/object/tree/write.c
+30
-23
No files found.
include/git2/tree.h
View file @
a7dbac0b
...
...
@@ -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
...
...
src/notes.c
View file @
a7dbac0b
...
...
@@ -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
,
...
...
src/tree.c
View file @
a7dbac0b
...
...
@@ -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
)
...
...
src/tree.h
View file @
a7dbac0b
...
...
@@ -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
tests-clar/index/filemodes.c
View file @
a7dbac0b
...
...
@@ -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
);
}
tests-clar/object/tree/attributes.c
View file @
a7dbac0b
...
...
@@ -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,7 +34,7 @@ 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
(
G
ROUP_WRITABLE_FI
LE
,
G
IT_FILEMODE_BLOB_GROUP_WRITAB
LE
,
git_tree_entry_attributes
(
entry
));
git_tree_free
(
tree
);
...
...
@@ -63,10 +60,10 @@ void test_object_tree_attributes__normalize_attributes_when_inserting_in_a_new_t
builder
,
"normalized.txt"
,
&
bid
,
G
ROUP_WRITABLE_FI
LE
));
G
IT_FILEMODE_BLOB_GROUP_WRITAB
LE
));
cl_assert_equal_i
(
REGULAR_FILE
,
GIT_FILEMODE_BLOB
,
git_tree_entry_attributes
(
entry
));
cl_git_pass
(
git_treebuilder_write
(
&
tid
,
repo
,
builder
));
...
...
@@ -76,7 +73,7 @@ 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_FILEMODE_BLOB
,
git_tree_entry_attributes
(
entry
));
git_tree_free
(
tree
);
...
...
@@ -100,7 +97,7 @@ 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_FILEMODE_BLOB
,
git_tree_entry_attributes
(
entry
));
cl_git_pass
(
git_treebuilder_write
(
&
tid2
,
repo
,
builder
));
...
...
@@ -110,7 +107,7 @@ 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_FILEMODE_BLOB
,
git_tree_entry_attributes
(
entry
));
git_tree_free
(
tree
);
...
...
tests-clar/object/tree/write.c
View file @
a7dbac0b
...
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment