void add_tree_to_index(git_tree * tree, const char * prefix) { for (size_t i = 0; i < git_tree_entrycount(tree); i++) { /* Get the tree entry */ const git_tree_entry *tree_entry; tree_entry = git_tree_entry_byindex(tree,(unsigned int)i); if (tree_entry == NULL) { printf("Tree entry not found"); libgit_error(); } /* Get the oid of a tree entry */ const git_oid *entry_oid = git_tree_entry_id (tree_entry); /* is a sub directory ? */ git_tree * subtree; if (git_tree_lookup(&subtree, repo, entry_oid) == 0) { char * subprefix = xmalloc(sizeof(char)*1024); const char * dirname = git_tree_entry_name (tree_entry); git2__joinpath(subprefix, prefix, dirname); add_tree_to_index(subtree, subprefix); continue; } char * completename = xmalloc(sizeof(char)*1024); git2__joinpath(completename, prefix, git_tree_entry_name (tree_entry)); git_index_entry source_entry = { {0,0},//git_index_time ctime {0,0},//git_index_time mtime 0,//unsigned int dev 0,//unsigned int ino git_tree_entry_attributes(tree_entry),//unsigned int mode 0,//unsigned int uid 0,//unsigned int gid 0,//git_off_t file_size *entry_oid, 0, 0,//unsigned short flags_extended completename }; git_index_append2(index_cur, &source_entry); } }
int git2_getcwd(char *buffer_out, size_t size) { char *cwd_buffer; assert(buffer_out && size > 0); #ifdef GIT_WIN32 cwd_buffer = _getcwd(buffer_out, size); #else cwd_buffer = getcwd(buffer_out, size); #endif if (cwd_buffer == NULL) return GIT_ERROR; posixify_path(buffer_out); git2__joinpath(buffer_out, buffer_out, ""); //Ensure the path ends with a trailing slash return GIT_OK; }