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
e120123e
Commit
e120123e
authored
Nov 20, 2012
by
Russell Belfer
Committed by
Ben Straub
Nov 27, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
API review / update for tree.h
parent
824cb2d5
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
142 additions
and
109 deletions
+142
-109
examples/general.c
+2
-2
include/git2/tree.h
+117
-92
src/index.c
+1
-1
src/iterator.c
+1
-1
src/notes.c
+2
-2
src/pack-objects.c
+1
-1
src/tree.c
+12
-4
tests-clar/object/tree/walk.c
+6
-6
No files found.
examples/general.c
View file @
e120123e
...
@@ -261,8 +261,8 @@ int main (int argc, char** argv)
...
@@ -261,8 +261,8 @@ int main (int argc, char** argv)
git_tree_lookup
(
&
tree
,
repo
,
&
oid
);
git_tree_lookup
(
&
tree
,
repo
,
&
oid
);
// Getting the count of entries in the tree so you can iterate over them if you want to.
// Getting the count of entries in the tree so you can iterate over them if you want to.
in
t
cnt
=
git_tree_entrycount
(
tree
);
// 3
size_
t
cnt
=
git_tree_entrycount
(
tree
);
// 3
printf
(
"tree entries: %d
\n
"
,
cnt
);
printf
(
"tree entries: %d
\n
"
,
(
int
)
cnt
);
entry
=
git_tree_entry_byindex
(
tree
,
0
);
entry
=
git_tree_entry_byindex
(
tree
,
0
);
printf
(
"Entry name: %s
\n
"
,
git_tree_entry_name
(
entry
));
// "hello.c"
printf
(
"Entry name: %s
\n
"
,
git_tree_entry_name
(
entry
));
// "hello.c"
...
...
include/git2/tree.h
View file @
e120123e
...
@@ -24,14 +24,15 @@ GIT_BEGIN_DECL
...
@@ -24,14 +24,15 @@ GIT_BEGIN_DECL
/**
/**
* Lookup a tree object from the repository.
* Lookup a tree object from the repository.
*
*
* @param
tree p
ointer to the looked up tree
* @param
out P
ointer to the looked up tree
* @param repo
t
he repo to use when locating the tree.
* @param repo
T
he repo to use when locating the tree.
* @param id
i
dentity of the tree to locate.
* @param id
I
dentity of the tree to locate.
* @return 0 or an error code
* @return 0 or an error code
*/
*/
GIT_INLINE
(
int
)
git_tree_lookup
(
git_tree
**
tree
,
git_repository
*
repo
,
const
git_oid
*
id
)
GIT_INLINE
(
int
)
git_tree_lookup
(
git_tree
**
out
,
git_repository
*
repo
,
const
git_oid
*
id
)
{
{
return
git_object_lookup
((
git_object
**
)
tree
,
repo
,
id
,
GIT_OBJ_TREE
);
return
git_object_lookup
((
git_object
**
)
out
,
repo
,
id
,
GIT_OBJ_TREE
);
}
}
/**
/**
...
@@ -47,54 +48,31 @@ GIT_INLINE(int) git_tree_lookup(git_tree **tree, git_repository *repo, const git
...
@@ -47,54 +48,31 @@ GIT_INLINE(int) git_tree_lookup(git_tree **tree, git_repository *repo, const git
* @return 0 or an error code
* @return 0 or an error code
*/
*/
GIT_INLINE
(
int
)
git_tree_lookup_prefix
(
GIT_INLINE
(
int
)
git_tree_lookup_prefix
(
git_tree
**
tree
,
git_tree
**
out
,
git_repository
*
repo
,
git_repository
*
repo
,
const
git_oid
*
id
,
const
git_oid
*
id
,
size_t
len
)
size_t
len
)
{
{
return
git_object_lookup_prefix
((
git_object
**
)
tree
,
repo
,
id
,
len
,
GIT_OBJ_TREE
);
return
git_object_lookup_prefix
(
(
git_object
**
)
out
,
repo
,
id
,
len
,
GIT_OBJ_TREE
);
}
}
/**
/**
* Close an open tree
* Close an open tree
*
*
*
This is a wrapper around git_object_free()
*
You can no longer use the git_tree pointer after this call.
*
*
* IMPORTANT:
* IMPORTANT: You MUST call this method when you stop using a tree to
* It *is* necessary to call this method when you stop
* release memory. Failure to do so will cause a memory leak.
* using a tree. Failure to do so will cause a memory leak.
*
*
* @param tree
t
he tree to close
* @param tree
T
he tree to close
*/
*/
GIT_INLINE
(
void
)
git_tree_free
(
git_tree
*
tree
)
GIT_INLINE
(
void
)
git_tree_free
(
git_tree
*
tree
)
{
{
git_object_free
((
git_object
*
)
tree
);
git_object_free
((
git_object
*
)
tree
);
}
}
/**
/**
* Free a tree entry
*
* IMPORTANT: This function is only needed for tree
* entries owned by the user, such as the ones returned
* by `git_tree_entry_dup`.
*
* @param entry The entry to free
*/
GIT_EXTERN
(
void
)
git_tree_entry_free
(
git_tree_entry
*
entry
);
/**
* Duplicate a tree entry
*
* Create a copy of a tree entry. The returned copy is owned
* by the user, and must be freed manually with
* `git_tree_entry_free`.
*
* @param entry A tree entry to duplicate
* @return a copy of the original entry
*/
GIT_EXTERN
(
git_tree_entry
*
)
git_tree_entry_dup
(
const
git_tree_entry
*
entry
);
/**
* Get the id of a tree.
* Get the id of a tree.
*
*
* @param tree a previously loaded tree.
* @param tree a previously loaded tree.
...
@@ -108,44 +86,87 @@ GIT_EXTERN(const git_oid *) git_tree_id(const git_tree *tree);
...
@@ -108,44 +86,87 @@ GIT_EXTERN(const git_oid *) git_tree_id(const git_tree *tree);
* @param tree a previously loaded tree.
* @param tree a previously loaded tree.
* @return the number of entries in the tree
* @return the number of entries in the tree
*/
*/
GIT_EXTERN
(
unsigned
in
t
)
git_tree_entrycount
(
const
git_tree
*
tree
);
GIT_EXTERN
(
size_
t
)
git_tree_entrycount
(
const
git_tree
*
tree
);
/**
/**
* Lookup a tree entry by its filename
* Lookup a tree entry by its filename
*
*
* This returns a git_tree_entry that is owned by the git_tree. You don't
* have to free it, but you must not use it after the git_tree is released.
*
* @param tree a previously loaded tree.
* @param tree a previously loaded tree.
* @param filename the filename of the desired entry
* @param filename the filename of the desired entry
* @return the tree entry; NULL if not found
* @return the tree entry; NULL if not found
*/
*/
GIT_EXTERN
(
const
git_tree_entry
*
)
git_tree_entry_byname
(
git_tree
*
tree
,
const
char
*
filename
);
GIT_EXTERN
(
const
git_tree_entry
*
)
git_tree_entry_byname
(
git_tree
*
tree
,
const
char
*
filename
);
/**
/**
* Lookup a tree entry by its position in the tree
* Lookup a tree entry by its position in the tree
*
*
* This returns a git_tree_entry that is owned by the git_tree. You don't
* have to free it, but you must not use it after the git_tree is released.
*
* @param tree a previously loaded tree.
* @param tree a previously loaded tree.
* @param idx the position in the entry list
* @param idx the position in the entry list
* @return the tree entry; NULL if not found
* @return the tree entry; NULL if not found
*/
*/
GIT_EXTERN
(
const
git_tree_entry
*
)
git_tree_entry_byindex
(
git_tree
*
tree
,
size_t
idx
);
GIT_EXTERN
(
const
git_tree_entry
*
)
git_tree_entry_byindex
(
git_tree
*
tree
,
size_t
idx
);
/**
/**
* Lookup a tree entry by SHA value.
* Lookup a tree entry by SHA value.
*
*
* This returns a git_tree_entry that is owned by the git_tree. You don't
* have to free it, but you must not use it after the git_tree is released.
*
* Warning: this must examine every entry in the tree, so it is not fast.
* Warning: this must examine every entry in the tree, so it is not fast.
*
*
* @param tree a previously loaded tree.
* @param tree a previously loaded tree.
* @param oid the sha being looked for
* @param oid the sha being looked for
* @return the tree entry; NULL if not found
* @return the tree entry; NULL if not found
*/
*/
GIT_EXTERN
(
const
git_tree_entry
*
)
git_tree_entry_byoid
(
git_tree
*
tree
,
const
git_oid
*
oid
);
GIT_EXTERN
(
const
git_tree_entry
*
)
git_tree_entry_byoid
(
git_tree
*
tree
,
const
git_oid
*
oid
);
/**
/**
* Get the UNIX file attributes of a tree entry
* Retrieve a tree entry contained in a tree or in any of its subtrees,
* given its relative path.
*
*
* @param entry a tree entry
* Unlike the other lookup functions, the returned tree entry is owned by
* @return filemode as an integer
* the user and must be freed explicitly with `git_tree_entry_free()`.
*
* @param out Pointer where to store the tree entry
* @param root Previously loaded tree which is the root of the relative path
* @param subtree_path Path to the contained entry
* @return 0 on success; GIT_ENOTFOUND if the path does not exist
*/
*/
GIT_EXTERN
(
git_filemode_t
)
git_tree_entry_filemode
(
const
git_tree_entry
*
entry
);
GIT_EXTERN
(
int
)
git_tree_entry_bypath
(
git_tree_entry
**
out
,
git_tree
*
root
,
const
char
*
path
);
/**
* Duplicate a tree entry
*
* Create a copy of a tree entry. The returned copy is owned by the user,
* and must be freed explicitly with `git_tree_entry_free()`.
*
* @param entry A tree entry to duplicate
* @return a copy of the original entry or NULL on error (alloc failure)
*/
GIT_EXTERN
(
git_tree_entry
*
)
git_tree_entry_dup
(
const
git_tree_entry
*
entry
);
/**
* Free a user-owned tree entry
*
* IMPORTANT: This function is only needed for tree entries owned by the
* user, such as the ones returned by `git_tree_entry_dup()` or
* `git_tree_entry_bypath()`.
*
* @param entry The entry to free
*/
GIT_EXTERN
(
void
)
git_tree_entry_free
(
git_tree_entry
*
entry
);
/**
/**
* Get the filename of a tree entry
* Get the filename of a tree entry
...
@@ -172,8 +193,18 @@ GIT_EXTERN(const git_oid *) git_tree_entry_id(const git_tree_entry *entry);
...
@@ -172,8 +193,18 @@ GIT_EXTERN(const git_oid *) git_tree_entry_id(const git_tree_entry *entry);
GIT_EXTERN
(
git_otype
)
git_tree_entry_type
(
const
git_tree_entry
*
entry
);
GIT_EXTERN
(
git_otype
)
git_tree_entry_type
(
const
git_tree_entry
*
entry
);
/**
/**
* Get the UNIX file attributes of a tree entry
*
* @param entry a tree entry
* @return filemode as an integer
*/
GIT_EXTERN
(
git_filemode_t
)
git_tree_entry_filemode
(
const
git_tree_entry
*
entry
);
/**
* Convert a tree entry to the git_object it points too.
* Convert a tree entry to the git_object it points too.
*
*
* You must call `git_object_free()` on the object when you are done with it.
*
* @param object pointer to the converted object
* @param object pointer to the converted object
* @param repo repository where to lookup the pointed object
* @param repo repository where to lookup the pointed object
* @param entry a tree entry
* @param entry a tree entry
...
@@ -187,21 +218,21 @@ GIT_EXTERN(int) git_tree_entry_to_object(
...
@@ -187,21 +218,21 @@ GIT_EXTERN(int) git_tree_entry_to_object(
/**
/**
* Create a new tree builder.
* Create a new tree builder.
*
*
* The tree builder can be used to create or modify
* The tree builder can be used to create or modify trees in memory and
* trees in memory and write them as tree objects to the
* write them as tree objects to the database.
* database.
*
*
* If the `source` parameter is not NULL, the tree builder
* If the `source` parameter is not NULL, the tree builder
will be
*
will be
initialized with the entries of the given tree.
* initialized with the entries of the given tree.
*
*
* If the `source` parameter is NULL, the tree builder will
* If the `source` parameter is NULL, the tree builder will
start with no
*
have no
entries and will have to be filled manually.
* entries and will have to be filled manually.
*
*
* @param
builder_p
Pointer where to store the tree builder
* @param
out
Pointer where to store the tree builder
* @param source Source tree to initialize the builder (optional)
* @param source Source tree to initialize the builder (optional)
* @return 0 on success; error code otherwise
* @return 0 on success; error code otherwise
*/
*/
GIT_EXTERN
(
int
)
git_treebuilder_create
(
git_treebuilder
**
builder_p
,
const
git_tree
*
source
);
GIT_EXTERN
(
int
)
git_treebuilder_create
(
git_treebuilder
**
out
,
const
git_tree
*
source
);
/**
/**
* Clear all the entires in the builder
* Clear all the entires in the builder
...
@@ -231,7 +262,8 @@ GIT_EXTERN(void) git_treebuilder_free(git_treebuilder *bld);
...
@@ -231,7 +262,8 @@ GIT_EXTERN(void) git_treebuilder_free(git_treebuilder *bld);
* @param filename Name of the entry
* @param filename Name of the entry
* @return pointer to the entry; NULL if not found
* @return pointer to the entry; NULL if not found
*/
*/
GIT_EXTERN
(
const
git_tree_entry
*
)
git_treebuilder_get
(
git_treebuilder
*
bld
,
const
char
*
filename
);
GIT_EXTERN
(
const
git_tree_entry
*
)
git_treebuilder_get
(
git_treebuilder
*
bld
,
const
char
*
filename
);
/**
/**
* Add or update an entry to the builder
* Add or update an entry to the builder
...
@@ -239,17 +271,17 @@ GIT_EXTERN(const git_tree_entry *) git_treebuilder_get(git_treebuilder *bld, con
...
@@ -239,17 +271,17 @@ GIT_EXTERN(const git_tree_entry *) git_treebuilder_get(git_treebuilder *bld, con
* Insert a new entry for `filename` in the builder with the
* Insert a new entry for `filename` in the builder with the
* given attributes.
* given attributes.
*
*
*
i
f an entry named `filename` already exists, its attributes
*
I
f an entry named `filename` already exists, its attributes
* will be updated with the given ones.
* will be updated with the given ones.
*
*
* The optional pointer `
entry_out` can be used to retrieve a
* The optional pointer `
out` can be used to retrieve a pointer to
*
pointer to the newly created/updated entry
.
*
the newly created/updated entry. Pass NULL if you do not need it
.
*
*
* No attempt is being made to ensure that the provided oid points
* No attempt is being made to ensure that the provided oid points
* to an existing git object in the object database, nor that the
* to an existing git object in the object database, nor that the
* attributes make sense regarding the type of the pointed at object.
* attributes make sense regarding the type of the pointed at object.
*
*
* @param
entry_
out Pointer to store the entry (optional)
* @param out Pointer to store the entry (optional)
* @param bld Tree builder
* @param bld Tree builder
* @param filename Filename of the entry
* @param filename Filename of the entry
* @param id SHA1 oid of the entry
* @param id SHA1 oid of the entry
...
@@ -259,7 +291,7 @@ GIT_EXTERN(const git_tree_entry *) git_treebuilder_get(git_treebuilder *bld, con
...
@@ -259,7 +291,7 @@ GIT_EXTERN(const git_tree_entry *) git_treebuilder_get(git_treebuilder *bld, con
* @return 0 or an error code
* @return 0 or an error code
*/
*/
GIT_EXTERN
(
int
)
git_treebuilder_insert
(
GIT_EXTERN
(
int
)
git_treebuilder_insert
(
const
git_tree_entry
**
entry_
out
,
const
git_tree_entry
**
out
,
git_treebuilder
*
bld
,
git_treebuilder
*
bld
,
const
char
*
filename
,
const
char
*
filename
,
const
git_oid
*
id
,
const
git_oid
*
id
,
...
@@ -271,63 +303,52 @@ GIT_EXTERN(int) git_treebuilder_insert(
...
@@ -271,63 +303,52 @@ GIT_EXTERN(int) git_treebuilder_insert(
* @param bld Tree builder
* @param bld Tree builder
* @param filename Filename of the entry to remove
* @param filename Filename of the entry to remove
*/
*/
GIT_EXTERN
(
int
)
git_treebuilder_remove
(
git_treebuilder
*
bld
,
const
char
*
filename
);
GIT_EXTERN
(
int
)
git_treebuilder_remove
(
git_treebuilder
*
bld
,
const
char
*
filename
);
typedef
int
(
*
git_treebuilder_filter_cb
)(
const
git_tree_entry
*
entry
,
void
*
payload
);
/**
/**
* Filter the entries in the tree
* Filter the entries in the tree
*
*
* The `filter` callback will be called for each entry
* The `filter` callback will be called for each entry in the tree with a
* in the tree with a pointer to the entry and the
* pointer to the entry and the provided `payload`; if the callback returns
* provided `payload`: if the callback returns 1, the
* non-zero, the entry will be filtered (removed from the builder).
* entry will be filtered (removed from the builder).
*
*
* @param bld Tree builder
* @param bld Tree builder
* @param filter Callback to filter entries
* @param filter Callback to filter entries
* @param payload Extra data to pass to filter
*/
*/
GIT_EXTERN
(
void
)
git_treebuilder_filter
(
GIT_EXTERN
(
void
)
git_treebuilder_filter
(
git_treebuilder
*
bld
,
git_treebuilder
*
bld
,
int
(
*
filter
)(
const
git_tree_entry
*
,
void
*
)
,
git_treebuilder_filter_cb
filter
,
void
*
payload
);
void
*
payload
);
/**
/**
* Write the contents of the tree builder as a tree object
* Write the contents of the tree builder as a tree object
*
*
* The tree builder will be written to the given `repo`, and
* The tree builder will be written to the given `repo`, and its
* it's identifying SHA1 hash will be stored in the `oid`
* identifying SHA1 hash will be stored in the `id` pointer.
* pointer.
*
*
* @param
oid Pointer where to store the written OID
* @param
id Pointer to store the OID of the newly written tree
* @param repo Repository
where
to store the object
* @param repo Repository
in which
to store the object
* @param bld Tree builder to write
* @param bld Tree builder to write
* @return 0 or an error code
* @return 0 or an error code
*/
*/
GIT_EXTERN
(
int
)
git_treebuilder_write
(
git_oid
*
oid
,
git_repository
*
repo
,
git_treebuilder
*
bld
);
GIT_EXTERN
(
int
)
git_treebuilder_write
(
git_oid
*
id
,
git_repository
*
repo
,
git_treebuilder
*
bld
);
/**
* Retrieve a tree entry contained in a tree or in any
* of its subtrees, given its relative path.
*
* The returned tree entry is owned by the user and must
* be freed manually with `git_tree_entry_free`.
*
* @param entry Pointer where to store the tree entry
* @param root A previously loaded tree which will be the root of the relative path
* @param subtree_path Path to the contained entry
* @return 0 on success; GIT_ENOTFOUND if the path does not exist
*/
GIT_EXTERN
(
int
)
git_tree_entry_bypath
(
git_tree_entry
**
entry
,
git_tree
*
root
,
const
char
*
path
);
/** Callback for the tree traversal method */
/** Callback for the tree traversal method */
typedef
int
(
*
git_treewalk_cb
)(
const
char
*
root
,
const
git_tree_entry
*
entry
,
void
*
payload
);
typedef
int
(
*
git_treewalk_cb
)(
const
char
*
root
,
const
git_tree_entry
*
entry
,
void
*
payload
);
/** Tree traversal modes */
/** Tree traversal modes */
enum
git_treewalk_mode
{
typedef
enum
{
GIT_TREEWALK_PRE
=
0
,
/* Pre-order */
GIT_TREEWALK_PRE
=
0
,
/* Pre-order */
GIT_TREEWALK_POST
=
1
,
/* Post-order */
GIT_TREEWALK_POST
=
1
,
/* Post-order */
};
}
git_treewalk_mode
;
/**
/**
* Traverse the entries in a tree and its subtrees in
* Traverse the entries in a tree and its subtrees in
...
@@ -344,12 +365,16 @@ enum git_treewalk_mode {
...
@@ -344,12 +365,16 @@ enum git_treewalk_mode {
* walk.
* walk.
*
*
* @param tree The tree to walk
* @param tree The tree to walk
* @param callback Function to call on each tree entry
* @param mode Traversal mode (pre or post-order)
* @param mode Traversal mode (pre or post-order)
* @param callback Function to call on each tree entry
* @param payload Opaque pointer to be passed on each callback
* @param payload Opaque pointer to be passed on each callback
* @return 0 or an error code
* @return 0 or an error code
*/
*/
GIT_EXTERN
(
int
)
git_tree_walk
(
git_tree
*
tree
,
git_treewalk_cb
callback
,
int
mode
,
void
*
payload
);
GIT_EXTERN
(
int
)
git_tree_walk
(
git_tree
*
tree
,
git_treewalk_mode
mode
,
git_treewalk_cb
callback
,
void
*
payload
);
/** @} */
/** @} */
...
...
src/index.c
View file @
e120123e
...
@@ -1603,7 +1603,7 @@ int git_index_read_tree(git_index *index, git_tree *tree)
...
@@ -1603,7 +1603,7 @@ int git_index_read_tree(git_index *index, git_tree *tree)
{
{
git_index_clear
(
index
);
git_index_clear
(
index
);
return
git_tree_walk
(
tree
,
read_tree_cb
,
GIT_TREEWALK_POST
,
index
);
return
git_tree_walk
(
tree
,
GIT_TREEWALK_POST
,
read_tree_cb
,
index
);
}
}
git_repository
*
git_index_owner
(
const
git_index
*
index
)
git_repository
*
git_index_owner
(
const
git_index
*
index
)
...
...
src/iterator.c
View file @
e120123e
...
@@ -85,7 +85,7 @@ struct tree_iterator_frame {
...
@@ -85,7 +85,7 @@ struct tree_iterator_frame {
tree_iterator_frame
*
next
,
*
prev
;
tree_iterator_frame
*
next
,
*
prev
;
git_tree
*
tree
;
git_tree
*
tree
;
char
*
start
;
char
*
start
;
unsigned
in
t
index
;
size_
t
index
;
};
};
typedef
struct
{
typedef
struct
{
...
...
src/notes.c
View file @
e120123e
...
@@ -19,7 +19,7 @@ static int find_subtree_in_current_level(
...
@@ -19,7 +19,7 @@ static int find_subtree_in_current_level(
const
char
*
annotated_object_sha
,
const
char
*
annotated_object_sha
,
int
fanout
)
int
fanout
)
{
{
unsigned
in
t
i
;
size_
t
i
;
const
git_tree_entry
*
entry
;
const
git_tree_entry
*
entry
;
*
out
=
NULL
;
*
out
=
NULL
;
...
@@ -71,7 +71,7 @@ static int find_subtree_r(git_tree **out, git_tree *root,
...
@@ -71,7 +71,7 @@ static int find_subtree_r(git_tree **out, git_tree *root,
static
int
find_blob
(
git_oid
*
blob
,
git_tree
*
tree
,
const
char
*
target
)
static
int
find_blob
(
git_oid
*
blob
,
git_tree
*
tree
,
const
char
*
target
)
{
{
unsigned
in
t
i
;
size_
t
i
;
const
git_tree_entry
*
entry
;
const
git_tree_entry
*
entry
;
for
(
i
=
0
;
i
<
git_tree_entrycount
(
tree
);
i
++
)
{
for
(
i
=
0
;
i
<
git_tree_entrycount
(
tree
);
i
++
)
{
...
...
src/pack-objects.c
View file @
e120123e
...
@@ -1284,7 +1284,7 @@ int git_packbuilder_insert_tree(git_packbuilder *pb, const git_oid *oid)
...
@@ -1284,7 +1284,7 @@ int git_packbuilder_insert_tree(git_packbuilder *pb, const git_oid *oid)
git_packbuilder_insert
(
pb
,
oid
,
NULL
)
<
0
)
git_packbuilder_insert
(
pb
,
oid
,
NULL
)
<
0
)
return
-
1
;
return
-
1
;
if
(
git_tree_walk
(
tree
,
cb_tree_walk
,
GIT_TREEWALK_PRE
,
pb
)
<
0
)
{
if
(
git_tree_walk
(
tree
,
GIT_TREEWALK_PRE
,
cb_tree_walk
,
pb
)
<
0
)
{
git_tree_free
(
tree
);
git_tree_free
(
tree
);
return
-
1
;
return
-
1
;
}
}
...
...
src/tree.c
View file @
e120123e
...
@@ -166,6 +166,7 @@ git_tree_entry *git_tree_entry_dup(const git_tree_entry *entry)
...
@@ -166,6 +166,7 @@ git_tree_entry *git_tree_entry_dup(const git_tree_entry *entry)
return
NULL
;
return
NULL
;
memcpy
(
copy
,
entry
,
total_size
);
memcpy
(
copy
,
entry
,
total_size
);
return
copy
;
return
copy
;
}
}
...
@@ -288,10 +289,10 @@ int git_tree__prefix_position(git_tree *tree, const char *path)
...
@@ -288,10 +289,10 @@ int git_tree__prefix_position(git_tree *tree, const char *path)
return
at_pos
;
return
at_pos
;
}
}
unsigned
in
t
git_tree_entrycount
(
const
git_tree
*
tree
)
size_
t
git_tree_entrycount
(
const
git_tree
*
tree
)
{
{
assert
(
tree
);
assert
(
tree
);
return
(
unsigned
int
)
tree
->
entries
.
length
;
return
tree
->
entries
.
length
;
}
}
static
int
tree_error
(
const
char
*
str
)
static
int
tree_error
(
const
char
*
str
)
...
@@ -694,7 +695,10 @@ on_error:
...
@@ -694,7 +695,10 @@ on_error:
return
-
1
;
return
-
1
;
}
}
void
git_treebuilder_filter
(
git_treebuilder
*
bld
,
int
(
*
filter
)(
const
git_tree_entry
*
,
void
*
),
void
*
payload
)
void
git_treebuilder_filter
(
git_treebuilder
*
bld
,
git_treebuilder_filter_cb
filter
,
void
*
payload
)
{
{
unsigned
int
i
;
unsigned
int
i
;
...
@@ -855,7 +859,11 @@ static int tree_walk(
...
@@ -855,7 +859,11 @@ static int tree_walk(
return
error
;
return
error
;
}
}
int
git_tree_walk
(
git_tree
*
tree
,
git_treewalk_cb
callback
,
int
mode
,
void
*
payload
)
int
git_tree_walk
(
git_tree
*
tree
,
git_treewalk_mode
mode
,
git_treewalk_cb
callback
,
void
*
payload
)
{
{
int
error
=
0
;
int
error
=
0
;
git_buf
root_path
=
GIT_BUF_INIT
;
git_buf
root_path
=
GIT_BUF_INIT
;
...
...
tests-clar/object/tree/walk.c
View file @
e120123e
...
@@ -38,11 +38,11 @@ void test_object_tree_walk__0(void)
...
@@ -38,11 +38,11 @@ void test_object_tree_walk__0(void)
cl_git_pass
(
git_tree_lookup
(
&
tree
,
g_repo
,
&
id
));
cl_git_pass
(
git_tree_lookup
(
&
tree
,
g_repo
,
&
id
));
ct
=
0
;
ct
=
0
;
cl_git_pass
(
git_tree_walk
(
tree
,
treewalk_count_cb
,
GIT_TREEWALK_PRE
,
&
ct
));
cl_git_pass
(
git_tree_walk
(
tree
,
GIT_TREEWALK_PRE
,
treewalk_count_cb
,
&
ct
));
cl_assert_equal_i
(
3
,
ct
);
cl_assert_equal_i
(
3
,
ct
);
ct
=
0
;
ct
=
0
;
cl_git_pass
(
git_tree_walk
(
tree
,
treewalk_count_cb
,
GIT_TREEWALK_POST
,
&
ct
));
cl_git_pass
(
git_tree_walk
(
tree
,
GIT_TREEWALK_POST
,
treewalk_count_cb
,
&
ct
));
cl_assert_equal_i
(
3
,
ct
);
cl_assert_equal_i
(
3
,
ct
);
git_tree_free
(
tree
);
git_tree_free
(
tree
);
...
@@ -83,21 +83,21 @@ void test_object_tree_walk__1(void)
...
@@ -83,21 +83,21 @@ void test_object_tree_walk__1(void)
ct
=
0
;
ct
=
0
;
cl_assert_equal_i
(
cl_assert_equal_i
(
GIT_EUSER
,
git_tree_walk
(
tree
,
treewalk_stop_cb
,
GIT_TREEWALK_PRE
,
&
ct
));
GIT_EUSER
,
git_tree_walk
(
tree
,
GIT_TREEWALK_PRE
,
treewalk_stop_cb
,
&
ct
));
cl_assert_equal_i
(
2
,
ct
);
cl_assert_equal_i
(
2
,
ct
);
ct
=
0
;
ct
=
0
;
cl_assert_equal_i
(
cl_assert_equal_i
(
GIT_EUSER
,
git_tree_walk
(
tree
,
treewalk_stop_cb
,
GIT_TREEWALK_POST
,
&
ct
));
GIT_EUSER
,
git_tree_walk
(
tree
,
GIT_TREEWALK_POST
,
treewalk_stop_cb
,
&
ct
));
cl_assert_equal_i
(
2
,
ct
);
cl_assert_equal_i
(
2
,
ct
);
cl_assert_equal_i
(
cl_assert_equal_i
(
GIT_EUSER
,
git_tree_walk
(
GIT_EUSER
,
git_tree_walk
(
tree
,
treewalk_stop_immediately_cb
,
GIT_TREEWALK_PRE
,
NULL
));
tree
,
GIT_TREEWALK_PRE
,
treewalk_stop_immediately_cb
,
NULL
));
cl_assert_equal_i
(
cl_assert_equal_i
(
GIT_EUSER
,
git_tree_walk
(
GIT_EUSER
,
git_tree_walk
(
tree
,
treewalk_stop_immediately_cb
,
GIT_TREEWALK_POST
,
NULL
));
tree
,
GIT_TREEWALK_POST
,
treewalk_stop_immediately_cb
,
NULL
));
git_tree_free
(
tree
);
git_tree_free
(
tree
);
}
}
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