diff options
author | Vicent Martà <vicent@github.com> | 2013-01-10 10:04:53 -0800 |
---|---|---|
committer | Vicent Martà <vicent@github.com> | 2013-01-10 10:04:53 -0800 |
commit | 48de3061d16f2d9a55a1e3fc6253cab35a64018b (patch) | |
tree | ceb9ee171f984224514e9bec134f60097fcb48fd | |
parent | 7bacc2c8c5831ac185dc35bd74d26b92337c8a07 (diff) | |
parent | eb3c247a78e62fc2bb87f70b08774de90e34faa1 (diff) | |
download | libgit2-48de3061d16f2d9a55a1e3fc6253cab35a64018b.tar.gz |
Merge pull request #1220 from ethomson/reuc_empty_sides
REUC needs to handle empty sides
-rw-r--r-- | src/index.c | 12 | ||||
-rw-r--r-- | tests-clar/index/reuc.c | 50 |
2 files changed, 56 insertions, 6 deletions
diff --git a/src/index.c b/src/index.c index 096d122b1..606a431a4 100644 --- a/src/index.c +++ b/src/index.c @@ -616,14 +616,14 @@ static int index_entry_reuc_init(git_index_reuc_entry **reuc_out, if (reuc->path == NULL) return -1; - reuc->mode[0] = ancestor_mode; - git_oid_cpy(&reuc->oid[0], ancestor_oid); + if ((reuc->mode[0] = ancestor_mode) > 0) + git_oid_cpy(&reuc->oid[0], ancestor_oid); - reuc->mode[1] = our_mode; - git_oid_cpy(&reuc->oid[1], our_oid); + if ((reuc->mode[1] = our_mode) > 0) + git_oid_cpy(&reuc->oid[1], our_oid); - reuc->mode[2] = their_mode; - git_oid_cpy(&reuc->oid[2], their_oid); + if ((reuc->mode[2] = their_mode) > 0) + git_oid_cpy(&reuc->oid[2], their_oid); *reuc_out = reuc; return 0; diff --git a/tests-clar/index/reuc.c b/tests-clar/index/reuc.c index 3a139aa5d..2062b51d3 100644 --- a/tests-clar/index/reuc.c +++ b/tests-clar/index/reuc.c @@ -31,6 +31,56 @@ void test_index_reuc__cleanup(void) cl_git_sandbox_cleanup(); } +void test_index_reuc__add(void) +{ + git_oid ancestor_oid, our_oid, their_oid; + const git_index_reuc_entry *reuc; + + git_oid_fromstr(&ancestor_oid, ONE_ANCESTOR_OID); + git_oid_fromstr(&our_oid, ONE_OUR_OID); + git_oid_fromstr(&their_oid, ONE_THEIR_OID); + + cl_git_pass(git_index_reuc_add(repo_index, "newfile.txt", + 0100644, &ancestor_oid, + 0100644, &our_oid, + 0100644, &their_oid)); + + cl_assert(reuc = git_index_reuc_get_bypath(repo_index, "newfile.txt")); + + cl_assert(strcmp(reuc->path, "newfile.txt") == 0); + cl_assert(reuc->mode[0] == 0100644); + cl_assert(reuc->mode[1] == 0100644); + cl_assert(reuc->mode[2] == 0100644); + cl_assert(git_oid_cmp(&reuc->oid[0], &ancestor_oid) == 0); + cl_assert(git_oid_cmp(&reuc->oid[1], &our_oid) == 0); + cl_assert(git_oid_cmp(&reuc->oid[2], &their_oid) == 0); +} + +void test_index_reuc__add_no_ancestor(void) +{ + git_oid ancestor_oid, our_oid, their_oid; + const git_index_reuc_entry *reuc; + + memset(&ancestor_oid, 0x0, sizeof(git_oid)); + git_oid_fromstr(&our_oid, ONE_OUR_OID); + git_oid_fromstr(&their_oid, ONE_THEIR_OID); + + cl_git_pass(git_index_reuc_add(repo_index, "newfile.txt", + 0, NULL, + 0100644, &our_oid, + 0100644, &their_oid)); + + cl_assert(reuc = git_index_reuc_get_bypath(repo_index, "newfile.txt")); + + cl_assert(strcmp(reuc->path, "newfile.txt") == 0); + cl_assert(reuc->mode[0] == 0); + cl_assert(reuc->mode[1] == 0100644); + cl_assert(reuc->mode[2] == 0100644); + cl_assert(git_oid_cmp(&reuc->oid[0], &ancestor_oid) == 0); + cl_assert(git_oid_cmp(&reuc->oid[1], &our_oid) == 0); + cl_assert(git_oid_cmp(&reuc->oid[2], &their_oid) == 0); +} + void test_index_reuc__read_bypath(void) { const git_index_reuc_entry *reuc; |