mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-06 19:49:47 +00:00
Checkout: initial tree walkers.
This commit is contained in:
parent
cb2dc0b0f8
commit
ec532d5ede
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
|
#include "buffer.h"
|
||||||
|
|
||||||
GIT_BEGIN_DECL
|
GIT_BEGIN_DECL
|
||||||
|
|
||||||
@ -42,6 +43,43 @@ static int get_head_tree(git_tree **out, git_repository *repo)
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct tree_walk_data
|
||||||
|
{
|
||||||
|
git_indexer_stats *stats;
|
||||||
|
} tree_walk_data;
|
||||||
|
|
||||||
|
|
||||||
|
static int count_walker(const char *path, git_tree_entry *entry, void *payload)
|
||||||
|
{
|
||||||
|
GIT_UNUSED(path);
|
||||||
|
GIT_UNUSED(entry);
|
||||||
|
((tree_walk_data*)payload)->stats->total++;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int checkout_walker(const char *path, git_tree_entry *entry, void *payload)
|
||||||
|
{
|
||||||
|
int retcode = 0;
|
||||||
|
tree_walk_data *data = (tree_walk_data*)payload;
|
||||||
|
|
||||||
|
switch(git_tree_entry_type(entry)) {
|
||||||
|
case GIT_OBJ_TREE:
|
||||||
|
/* TODO: mkdir */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIT_OBJ_BLOB:
|
||||||
|
/* TODO: create/populate file */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
retcode = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
data->stats->processed++;
|
||||||
|
return retcode;
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
* -> Line endings
|
* -> Line endings
|
||||||
*/
|
*/
|
||||||
@ -50,13 +88,23 @@ int git_checkout_force(git_repository *repo, git_indexer_stats *stats)
|
|||||||
int retcode = GIT_ERROR;
|
int retcode = GIT_ERROR;
|
||||||
git_indexer_stats dummy_stats;
|
git_indexer_stats dummy_stats;
|
||||||
git_tree *tree;
|
git_tree *tree;
|
||||||
|
tree_walk_data payload;
|
||||||
|
|
||||||
assert(repo);
|
assert(repo);
|
||||||
if (!stats) stats = &dummy_stats;
|
if (!stats) stats = &dummy_stats;
|
||||||
|
|
||||||
|
stats->total = stats->processed = 0;
|
||||||
|
payload.stats = stats;
|
||||||
|
|
||||||
if (!get_head_tree(&tree, repo)) {
|
if (!get_head_tree(&tree, repo)) {
|
||||||
/* TODO */
|
/* Count all the tree nodes for progress information */
|
||||||
retcode = 0;
|
if (!git_tree_walk(tree, count_walker, GIT_TREEWALK_POST, &payload)) {
|
||||||
|
/* Checkout the files */
|
||||||
|
if (!git_tree_walk(tree, checkout_walker, GIT_TREEWALK_POST, &payload)) {
|
||||||
|
retcode = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
git_tree_free(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retcode;
|
return retcode;
|
||||||
|
Loading…
Reference in New Issue
Block a user