diff options
author | Vicent Marti <tanoku@gmail.com> | 2013-04-16 19:46:41 +0400 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2013-04-16 19:46:41 +0400 |
commit | a50086d174658914d4d6462afbc83b02825b1f5b (patch) | |
tree | e8daa1c7bf678222cf351445179837bed7db3a72 /tests-clar/checkout/checkout_helpers.c | |
parent | 5b9fac39d8a76b9139667c26a63e6b3f204b3977 (diff) | |
parent | f124ebd457bfbf43de3516629aaba5a279636e04 (diff) |
Merge branch 'development'v0.18.0
Diffstat (limited to 'tests-clar/checkout/checkout_helpers.c')
-rw-r--r-- | tests-clar/checkout/checkout_helpers.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tests-clar/checkout/checkout_helpers.c b/tests-clar/checkout/checkout_helpers.c new file mode 100644 index 000000000..ab93a89bd --- /dev/null +++ b/tests-clar/checkout/checkout_helpers.c @@ -0,0 +1,93 @@ +#include "clar_libgit2.h" +#include "checkout_helpers.h" +#include "refs.h" +#include "fileops.h" + +/* this is essentially the code from git__unescape modified slightly */ +void strip_cr_from_buf(git_buf *buf) +{ + char *scan, *pos = buf->ptr, *end = pos + buf->size; + + for (scan = pos; scan < end; pos++, scan++) { + if (*scan == '\r') + scan++; /* skip '\r' */ + if (pos != scan) + *pos = *scan; + } + + *pos = '\0'; + buf->size = (pos - buf->ptr); +} + +void assert_on_branch(git_repository *repo, const char *branch) +{ + git_reference *head; + git_buf bname = GIT_BUF_INIT; + + cl_git_pass(git_reference_lookup(&head, repo, GIT_HEAD_FILE)); + cl_assert_(git_reference_type(head) == GIT_REF_SYMBOLIC, branch); + + cl_git_pass(git_buf_joinpath(&bname, "refs/heads", branch)); + cl_assert_equal_s(bname.ptr, git_reference_symbolic_target(head)); + + git_reference_free(head); + git_buf_free(&bname); +} + +void reset_index_to_treeish(git_object *treeish) +{ + git_object *tree; + git_index *index; + git_repository *repo = git_object_owner(treeish); + + cl_git_pass(git_object_peel(&tree, treeish, GIT_OBJ_TREE)); + + cl_git_pass(git_repository_index(&index, repo)); + cl_git_pass(git_index_read_tree(index, (git_tree *)tree)); + cl_git_pass(git_index_write(index)); + + git_object_free(tree); + git_index_free(index); +} + +static void check_file_contents_internal( + const char *path, + const char *expected_content, + bool strip_cr, + const char *file, + int line, + const char *msg) +{ + int fd; + char data[1024] = {0}; + git_buf buf = GIT_BUF_INIT; + size_t expected_len = expected_content ? strlen(expected_content) : 0; + + fd = p_open(path, O_RDONLY); + cl_assert(fd >= 0); + + buf.ptr = data; + buf.size = p_read(fd, buf.ptr, sizeof(data)); + + cl_git_pass(p_close(fd)); + + if (strip_cr) + strip_cr_from_buf(&buf); + + clar__assert_equal_i((int)expected_len, (int)buf.size, file, line, "strlen(expected_content) != strlen(actual_content)", 1); + clar__assert_equal_s(expected_content, buf.ptr, file, line, msg, 1); +} + +void check_file_contents_at_line( + const char *path, const char *expected, + const char *file, int line, const char *msg) +{ + check_file_contents_internal(path, expected, false, file, line, msg); +} + +void check_file_contents_nocr_at_line( + const char *path, const char *expected, + const char *file, int line, const char *msg) +{ + check_file_contents_internal(path, expected, true, file, line, msg); +} |