Commit bebdbcd4 by Russell Belfer

Fix crlf issue with checkout tests

Move some checkout utility functions into a shared file and fix
some crlf filtering issues when verifying file contents.
parent cfc7b835
#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 test_file_contents_internal(
const char *path, const char *expectedcontents, bool strip_cr)
{
int fd;
char data[1024] = {0};
git_buf buf = GIT_BUF_INIT;
size_t expectedlen = strlen(expectedcontents);
fd = p_open(path, O_RDONLY);
cl_assert(fd >= 0);
buf.ptr = data;
buf.size = p_read(fd, buf.ptr, 1024);
cl_git_pass(p_close(fd));
if (strip_cr)
strip_cr_from_buf(&buf);
cl_assert_equal_i((int)expectedlen, (int)buf.size);
cl_assert_equal_s(expectedcontents, buf.ptr);
}
void test_file_contents(const char *path, const char *expected)
{
test_file_contents_internal(path, expected, false);
}
void test_file_contents_nocr(const char *path, const char *expected)
{
test_file_contents_internal(path, expected, true);
}
#include "buffer.h"
#include "git2/object.h"
#include "git2/repository.h"
extern void strip_cr_from_buf(git_buf *buf);
extern void assert_on_branch(git_repository *repo, const char *branch);
extern void reset_index_to_treeish(git_object *treeish);
extern void test_file_contents(const char *path, const char *expected);
extern void test_file_contents_nocr(const char *path, const char *expected);
#include "clar_libgit2.h" #include "clar_libgit2.h"
#include "checkout_helpers.h"
#include "git2/checkout.h" #include "git2/checkout.h"
#include "repository.h" #include "repository.h"
static git_repository *g_repo; static git_repository *g_repo;
static void reset_index_to_treeish(git_object *treeish)
{
git_object *tree;
git_index *index;
cl_git_pass(git_object_peel(&tree, treeish, GIT_OBJ_TREE));
cl_git_pass(git_repository_index(&index, g_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);
}
void test_checkout_index__initialize(void) void test_checkout_index__initialize(void)
{ {
git_tree *tree; git_tree *tree;
...@@ -41,23 +27,6 @@ void test_checkout_index__cleanup(void) ...@@ -41,23 +27,6 @@ void test_checkout_index__cleanup(void)
cl_git_sandbox_cleanup(); cl_git_sandbox_cleanup();
} }
static void test_file_contents(const char *path, const char *expectedcontents)
{
int fd;
char buffer[1024] = {0};
size_t expectedlen, actuallen;
fd = p_open(path, O_RDONLY);
cl_assert(fd >= 0);
expectedlen = strlen(expectedcontents);
actuallen = p_read(fd, buffer, 1024);
cl_git_pass(p_close(fd));
cl_assert_equal_sz(actuallen, expectedlen);
cl_assert_equal_s(buffer, expectedcontents);
}
void test_checkout_index__cannot_checkout_a_bare_repository(void) void test_checkout_index__cannot_checkout_a_bare_repository(void)
{ {
test_checkout_index__cleanup(); test_checkout_index__cleanup();
......
#include "clar_libgit2.h" #include "clar_libgit2.h"
#include "checkout_helpers.h"
#include "git2/checkout.h" #include "git2/checkout.h"
#include "repository.h" #include "repository.h"
...@@ -137,21 +138,6 @@ void test_checkout_tree__doesnt_write_unrequested_files_to_worktree(void) ...@@ -137,21 +138,6 @@ void test_checkout_tree__doesnt_write_unrequested_files_to_worktree(void)
cl_assert_equal_i(false, git_path_isfile("testrepo/readme.txt")); cl_assert_equal_i(false, git_path_isfile("testrepo/readme.txt"));
} }
static 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 test_checkout_tree__can_switch_branches(void) void test_checkout_tree__can_switch_branches(void)
{ {
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
...@@ -241,28 +227,11 @@ void test_checkout_tree__can_remove_ignored(void) ...@@ -241,28 +227,11 @@ void test_checkout_tree__can_remove_ignored(void)
cl_assert(!git_path_isfile("testrepo/ignored_file")); cl_assert(!git_path_isfile("testrepo/ignored_file"));
} }
/* this is essentially the code from git__unescape modified slightly */
static void strip_cr_from_buf(git_buf *buf)
{
char *scan, *pos = buf->ptr;
for (scan = pos; *scan; pos++, scan++) {
if (*scan == '\r')
scan++; /* skip '\r' */
if (pos != scan)
*pos = *scan;
}
*pos = '\0';
buf->size = (pos - buf->ptr);
}
void test_checkout_tree__can_update_only(void) void test_checkout_tree__can_update_only(void)
{ {
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
git_oid oid; git_oid oid;
git_object *obj = NULL; git_object *obj = NULL;
git_buf buf = GIT_BUF_INIT;
/* first let's get things into a known state - by checkout out the HEAD */ /* first let's get things into a known state - by checkout out the HEAD */
...@@ -273,10 +242,7 @@ void test_checkout_tree__can_update_only(void) ...@@ -273,10 +242,7 @@ void test_checkout_tree__can_update_only(void)
cl_assert(!git_path_isdir("testrepo/a")); cl_assert(!git_path_isdir("testrepo/a"));
cl_git_pass(git_futils_readbuffer(&buf, "testrepo/branch_file.txt")); test_file_contents_nocr("testrepo/branch_file.txt", "hi\nbye!\n");
strip_cr_from_buf(&buf);
cl_assert_equal_s("hi\nbye!\n", buf.ptr);
git_buf_free(&buf);
/* now checkout branch but with update only */ /* now checkout branch but with update only */
...@@ -297,11 +263,7 @@ void test_checkout_tree__can_update_only(void) ...@@ -297,11 +263,7 @@ void test_checkout_tree__can_update_only(void)
cl_assert(!git_path_isdir("testrepo/a")); cl_assert(!git_path_isdir("testrepo/a"));
/* but this file still should have been updated */ /* but this file still should have been updated */
cl_git_pass(git_futils_readbuffer(&buf, "testrepo/branch_file.txt")); test_file_contents_nocr("testrepo/branch_file.txt", "hi\n");
strip_cr_from_buf(&buf);
cl_assert_equal_s("hi\n", buf.ptr);
git_buf_free(&buf);
git_object_free(obj); git_object_free(obj);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment