|
Packit Service |
20376f |
#include "clar_libgit2.h"
|
|
Packit Service |
20376f |
#include "../diff/diff_helpers.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static git_repository *g_repo = NULL;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_stress_diff__initialize(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_stress_diff__cleanup(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_git_sandbox_cleanup();
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#define ANOTHER_POEM \
|
|
Packit Service |
20376f |
"OH, glorious are the guarded heights\nWhere guardian souls abide—\nSelf-exiled from our gross delights—\nAbove, beyond, outside:\nAn ampler arc their spirit swings—\nCommands a juster view—\nWe have their word for all these things,\nNo doubt their words are true.\n\nYet we, the bond slaves of our day,\nWhom dirt and danger press—\nCo-heirs of insolence, delay,\nAnd leagued unfaithfulness—\nSuch is our need must seek indeed\nAnd, having found, engage\nThe men who merely do the work\nFor which they draw the wage.\n\nFrom forge and farm and mine and bench,\nDeck, altar, outpost lone—\nMill, school, battalion, counter, trench,\nRail, senate, sheepfold, throne—\nCreation's cry goes up on high\nFrom age to cheated age:\n\"Send us the men who do the work\n\"For which they draw the wage!\"\n"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static void test_with_many(int expected_new)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
git_tree *tree, *new_tree;
|
|
Packit Service |
20376f |
git_diff *diff = NULL;
|
|
Packit Service |
20376f |
diff_expects exp;
|
|
Packit Service |
20376f |
git_diff_options diffopts = GIT_DIFF_OPTIONS_INIT;
|
|
Packit Service |
20376f |
git_diff_find_options opts = GIT_DIFF_FIND_OPTIONS_INIT;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, g_repo));
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_revparse_single((git_object **)&tree, g_repo, "HEAD^{tree}"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(p_rename("renames/ikeepsix.txt", "renames/ikeepsix2.txt"));
|
|
Packit Service |
20376f |
cl_git_pass(git_index_remove_bypath(index, "ikeepsix.txt"));
|
|
Packit Service |
20376f |
cl_git_pass(git_index_add_bypath(index, "ikeepsix2.txt"));
|
|
Packit Service |
20376f |
cl_git_pass(git_index_write(index));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_tree_to_index(&diff, g_repo, tree, index, &diffopts));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
memset(&exp, 0, sizeof(exp));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_foreach(
|
|
Packit Service |
20376f |
diff, diff_file_cb, NULL, NULL, NULL, &exp);;
|
|
Packit Service |
20376f |
cl_assert_equal_i(1, exp.file_status[GIT_DELTA_DELETED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new + 1, exp.file_status[GIT_DELTA_ADDED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new + 2, exp.files);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
opts.flags = GIT_DIFF_FIND_ALL;
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_find_similar(diff, &opts));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
memset(&exp, 0, sizeof(exp));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_foreach(
|
|
Packit Service |
20376f |
diff, diff_file_cb, NULL, NULL, NULL, &exp);;
|
|
Packit Service |
20376f |
cl_assert_equal_i(1, exp.file_status[GIT_DELTA_RENAMED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new, exp.file_status[GIT_DELTA_ADDED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new + 1, exp.files);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_diff_free(diff);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_repo_commit_from_index(NULL, g_repo, NULL, 1372350000, "yoyoyo");
|
|
Packit Service |
20376f |
cl_git_pass(git_revparse_single(
|
|
Packit Service |
20376f |
(git_object **)&new_tree, g_repo, "HEAD^{tree}"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_tree_to_tree(
|
|
Packit Service |
20376f |
&diff, g_repo, tree, new_tree, &diffopts));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
memset(&exp, 0, sizeof(exp));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_foreach(
|
|
Packit Service |
20376f |
diff, diff_file_cb, NULL, NULL, NULL, &exp);;
|
|
Packit Service |
20376f |
cl_assert_equal_i(1, exp.file_status[GIT_DELTA_DELETED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new + 1, exp.file_status[GIT_DELTA_ADDED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new + 2, exp.files);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
opts.flags = GIT_DIFF_FIND_ALL;
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_find_similar(diff, &opts));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
memset(&exp, 0, sizeof(exp));
|
|
Packit Service |
20376f |
cl_git_pass(git_diff_foreach(
|
|
Packit Service |
20376f |
diff, diff_file_cb, NULL, NULL, NULL, &exp);;
|
|
Packit Service |
20376f |
cl_assert_equal_i(1, exp.file_status[GIT_DELTA_RENAMED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new, exp.file_status[GIT_DELTA_ADDED]);
|
|
Packit Service |
20376f |
cl_assert_equal_i(expected_new + 1, exp.files);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_diff_free(diff);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_tree_free(new_tree);
|
|
Packit Service |
20376f |
git_tree_free(tree);
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_stress_diff__rename_big_files(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
char tmp[64];
|
|
Packit Service |
20376f |
int i, j;
|
|
Packit Service |
20376f |
git_buf b = GIT_BUF_INIT;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
g_repo = cl_git_sandbox_init("renames");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, g_repo));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
for (i = 0; i < 100; i += 1) {
|
|
Packit Service |
20376f |
p_snprintf(tmp, sizeof(tmp), "renames/newfile%03d", i);
|
|
Packit Service |
20376f |
for (j = i * 256; j > 0; --j)
|
|
Packit Service |
20376f |
git_buf_printf(&b, "more content %d\n", i);
|
|
Packit Service |
20376f |
cl_git_mkfile(tmp, b.ptr);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
for (i = 0; i < 100; i += 1) {
|
|
Packit Service |
20376f |
p_snprintf(tmp, sizeof(tmp), "renames/newfile%03d", i);
|
|
Packit Service |
20376f |
cl_git_pass(git_index_add_bypath(index, tmp + strlen("renames/")));
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_buf_free(&b);
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
test_with_many(100);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_stress_diff__rename_many_files(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_index *index;
|
|
Packit Service |
20376f |
char tmp[64];
|
|
Packit Service |
20376f |
int i;
|
|
Packit Service |
20376f |
git_buf b = GIT_BUF_INIT;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
g_repo = cl_git_sandbox_init("renames");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_index(&index, g_repo));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_buf_printf(&b, "%08d\n" ANOTHER_POEM "%08d\n" ANOTHER_POEM ANOTHER_POEM, 0, 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
for (i = 0; i < 2500; i += 1) {
|
|
Packit Service |
20376f |
p_snprintf(tmp, sizeof(tmp), "renames/newfile%03d", i);
|
|
Packit Service |
20376f |
p_snprintf(b.ptr, 9, "%08d", i);
|
|
Packit Service |
20376f |
b.ptr[8] = '\n';
|
|
Packit Service |
20376f |
cl_git_mkfile(tmp, b.ptr);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
git_buf_free(&b);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
for (i = 0; i < 2500; i += 1) {
|
|
Packit Service |
20376f |
p_snprintf(tmp, sizeof(tmp), "renames/newfile%03d", i);
|
|
Packit Service |
20376f |
cl_git_pass(git_index_add_bypath(index, tmp + strlen("renames/")));
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_index_free(index);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
test_with_many(2500);
|
|
Packit Service |
20376f |
}
|