From 2057bf1eb5aaf0a9fea2beb8083a3052936b34ea Mon Sep 17 00:00:00 2001 From: Galin Simeonov Date: Sun, 26 Sep 2021 19:12:03 +0300 Subject: generates a tree dump for the HEAD of all the branches --- git_part.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) (limited to 'git_part.c') diff --git a/git_part.c b/git_part.c index f3b0877..0467206 100644 --- a/git_part.c +++ b/git_part.c @@ -44,6 +44,7 @@ void print_commits(int dir_fd,const git_reference *branch, git_repository *repo) FILE *log_file; FILE *diff_file; int diff_directory_fd; + int files_directory_fd; git_revwalk *walker; git_oid current; @@ -58,17 +59,24 @@ void print_commits(int dir_fd,const git_reference *branch, git_repository *repo) log_file=create_file(dir_fd,"log"); - diff_directory_fd=create_diff_dir(dir_fd); + diff_directory_fd=create_dir(dir_fd,"diffs"); + files_directory_fd=create_dir(dir_fd,"files"); while(!git_revwalk_next(¤t,walker)) { git_commit_lookup(¤t_commit,repo,¤t); git_commit_tree(¤t_tree,current_commit); + if(parent_tree!=NULL) { diff_file=create_file(diff_directory_fd,git_oid_tostr_s(¤t)); + print_diff(diff_file,parent_tree,current_tree,repo); + git_tree_free(parent_tree); + }else/*we only print the files of the HEAD*/ + { + print_files(files_directory_fd,current_tree,repo); } print_headers_and_commit_message(log_file,current_commit,¤t); @@ -108,4 +116,62 @@ void print_branches(git_repository *repo) git_branch_iterator_free(it); } +void print_files(int dir_fd,git_tree *tree,git_repository *repo) +{ + size_t number_of_entries; + size_t i; + const git_tree_entry *current_entry; + + number_of_entries=git_tree_entrycount(tree); + + for(i=0;i