The narrow version uses join_narrow_tree() to recreate a full tree from a base toplevel tree (typically commit parent's tree) and a tree created from index. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- commit.c | 21 +++++++++++++++++++++ commit.h | 5 +++++ 2 files changed, 26 insertions(+), 0 deletions(-) diff --git a/commit.c b/commit.c index 0094ec1..77ed9fd 100644 --- a/commit.c +++ b/commit.c @@ -6,6 +6,7 @@ #include "diff.h" #include "revision.h" #include "notes.h" +#include "narrow-tree.h" int save_commit_buffer = 1; @@ -864,3 +865,23 @@ int commit_tree(const char *msg, unsigned char *tree, strbuf_release(&buffer); return result; } + +int commit_narrow_tree(const char *msg, unsigned char *tree, + const unsigned char *narrow_base, + struct commit_list *parents, unsigned char *ret, + const char *author) +{ + unsigned char result_tree[20]; + + if (get_narrow_prefix()) { + unsigned char sha1[20]; + + if (!find_tree(tree, sha1, get_narrow_prefix())) + die("Narrow tree %s not found", get_narrow_prefix()); + if (join_narrow_tree(narrow_base, result_tree, sha1, + get_narrow_prefix())) + die("Failed to join tree"); + tree = result_tree; + } + return commit_tree(msg, tree, parents, ret, author); +} diff --git a/commit.h b/commit.h index 9113bbe..c718439 100644 --- a/commit.h +++ b/commit.h @@ -170,5 +170,10 @@ struct commit_list *reduce_heads(struct commit_list *heads); extern int commit_tree(const char *msg, unsigned char *tree, struct commit_list *parents, unsigned char *ret, const char *author); +extern int commit_narrow_tree(const char *msg, unsigned char *tree, + const unsigned char *narrow_base, + struct commit_list *parents, + unsigned char *ret, + const char *author); #endif /* COMMIT_H */ -- 1.7.1.rc1.69.g24c2f7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html