diff options
Diffstat (limited to 'tests-clar')
137 files changed, 1862 insertions, 1 deletions
diff --git a/tests-clar/network/fetch.c b/tests-clar/network/fetch.c index 81a0eed25..924998448 100644 --- a/tests-clar/network/fetch.c +++ b/tests-clar/network/fetch.c @@ -48,8 +48,8 @@ static void do_fetch(const char *url, int flag, int n)  	git_remote_set_autotag(remote, flag);  	cl_git_pass(git_remote_connect(remote, GIT_DIRECTION_FETCH));  	cl_git_pass(git_remote_download(remote, progress, &bytes_received)); -	git_remote_disconnect(remote);  	cl_git_pass(git_remote_update_tips(remote)); +	git_remote_disconnect(remote);  	cl_assert_equal_i(counter, n);  	cl_assert(bytes_received > 0); diff --git a/tests-clar/network/push.c b/tests-clar/network/push.c new file mode 100644 index 000000000..acc376de7 --- /dev/null +++ b/tests-clar/network/push.c @@ -0,0 +1,518 @@ +#include "clar_libgit2.h" +#include "buffer.h" +#include "posix.h" +#include "vector.h" +#include "../submodule/submodule_helpers.h" +#include "push_util.h" + +CL_IN_CATEGORY("network") + +static git_repository *_repo; + +static char *_remote_url; +static char *_remote_user; +static char *_remote_pass; + +static git_remote *_remote; +static record_callbacks_data _record_cbs_data = {{ 0 }}; +static git_remote_callbacks _record_cbs = RECORD_CALLBACKS_INIT(&_record_cbs_data); + +static git_oid _oid_b6; +static git_oid _oid_b5; +static git_oid _oid_b4; +static git_oid _oid_b3; +static git_oid _oid_b2; +static git_oid _oid_b1; + +/* git_oid *oid, git_repository *repo, (string literal) blob */ +#define CREATE_BLOB(oid, repo, blob) git_blob_create_frombuffer(oid, repo, blob, sizeof(blob) - 1) + +static int cred_acquire_cb(git_cred **cred, const char *url, unsigned int allowed_types)  +{ +	GIT_UNUSED(url); + +	if ((GIT_CREDTYPE_USERPASS_PLAINTEXT & allowed_types) == 0 || +		git_cred_userpass_plaintext_new(cred, _remote_user, _remote_pass) < 0) +		return -1; + +	return 0; +} + +typedef struct { +	const char *ref; +	const char *msg; +} push_status; + +/** + * git_push_status_foreach callback that records status entries. + * @param data (git_vector *) of push_status instances + */ +static int record_push_status_cb(const char *ref, const char *msg, void *data) +{ +	git_vector *statuses = (git_vector *)data; +	push_status *s; + +	cl_assert(s = git__malloc(sizeof(*s))); +	s->ref = ref; +	s->msg = msg; + +	git_vector_insert(statuses, s); + +	return 0; +} + +static void do_verify_push_status(git_push *push, const push_status expected[], const size_t expected_len) +{ +	git_vector actual = GIT_VECTOR_INIT; +	push_status *iter; +	bool failed = false; +	size_t i; + +	git_push_status_foreach(push, record_push_status_cb, &actual); + +	if (expected_len != actual.length) +		failed = true; +	else +		git_vector_foreach(&actual, i, iter) +			if (strcmp(expected[i].ref, iter->ref) || +				(expected[i].msg && strcmp(expected[i].msg, iter->msg))) { +				failed = true; +				break; +			} + +	if (failed) { +		git_buf msg = GIT_BUF_INIT; + +		git_buf_puts(&msg, "Expected and actual push statuses differ:\nEXPECTED:\n"); + +		for(i = 0; i < expected_len; i++) { +			git_buf_printf(&msg, "%s: %s\n", +				expected[i].ref, +				expected[i].msg ? expected[i].msg : "<NULL>"); +		} + +		git_buf_puts(&msg, "\nACTUAL:\n"); + +		git_vector_foreach(&actual, i, iter) +			git_buf_printf(&msg, "%s: %s\n", iter->ref, iter->msg); + +		cl_fail(git_buf_cstr(&msg)); + +		git_buf_free(&msg); +	} + +	git_vector_foreach(&actual, i, iter) +		git__free(iter); + +	git_vector_free(&actual); +} + +/** + * Verifies that after git_push_finish(), refs on a remote have the expected + * names, oids, and order. + *  + * @param remote remote to verify + * @param expected_refs expected remote refs after push + * @param expected_refs_len length of expected_refs + */ +static void verify_refs(git_remote *remote, expected_ref expected_refs[], size_t expected_refs_len) +{ +	git_vector actual_refs = GIT_VECTOR_INIT; + +	git_remote_ls(remote, record_ref_cb, &actual_refs); +	verify_remote_refs(&actual_refs, expected_refs, expected_refs_len); + +	git_vector_free(&actual_refs); +} + +void test_network_push__initialize(void) +{ +	git_vector delete_specs = GIT_VECTOR_INIT; +	size_t i; +	char *curr_del_spec; + +	_repo = cl_git_sandbox_init("push_src"); + +	cl_fixture_sandbox("testrepo.git"); +	cl_rename("push_src/submodule/.gitted", "push_src/submodule/.git"); + +	rewrite_gitmodules(git_repository_workdir(_repo)); + +	/* git log --format=oneline --decorate --graph +	 * *-.   951bbbb90e2259a4c8950db78946784fb53fcbce (HEAD, b6) merge b3, b4, and b5 to b6 +	 * |\ \ +	 * | | * fa38b91f199934685819bea316186d8b008c52a2 (b5) added submodule named 'submodule' pointing to '../testrepo.git' +	 * | * | 27b7ce66243eb1403862d05f958c002312df173d (b4) edited fold\b.txt +	 * | |/ +	 * * | d9b63a88223d8367516f50bd131a5f7349b7f3e4 (b3) edited a.txt +	 * |/ +	 * * a78705c3b2725f931d3ee05348d83cc26700f247 (b2, b1) added fold and fold/b.txt +	 * * 5c0bb3d1b9449d1cc69d7519fd05166f01840915 added a.txt +	 */ +	git_oid_fromstr(&_oid_b6, "951bbbb90e2259a4c8950db78946784fb53fcbce"); +	git_oid_fromstr(&_oid_b5, "fa38b91f199934685819bea316186d8b008c52a2"); +	git_oid_fromstr(&_oid_b4, "27b7ce66243eb1403862d05f958c002312df173d"); +	git_oid_fromstr(&_oid_b3, "d9b63a88223d8367516f50bd131a5f7349b7f3e4"); +	git_oid_fromstr(&_oid_b2, "a78705c3b2725f931d3ee05348d83cc26700f247"); +	git_oid_fromstr(&_oid_b1, "a78705c3b2725f931d3ee05348d83cc26700f247"); + +	/* Remote URL environment variable must be set.  User and password are optional.  */ +	_remote_url = cl_getenv("GITTEST_REMOTE_URL"); +	_remote_user = cl_getenv("GITTEST_REMOTE_USER"); +	_remote_pass = cl_getenv("GITTEST_REMOTE_PASS"); +	_remote = NULL; + +	if (_remote_url) { +		cl_git_pass(git_remote_add(&_remote, _repo, "test", _remote_url)); + +		git_remote_set_cred_acquire_cb(_remote, cred_acquire_cb); +		record_callbacks_data_clear(&_record_cbs_data); +		git_remote_set_callbacks(_remote, &_record_cbs); + +		cl_git_pass(git_remote_connect(_remote, GIT_DIRECTION_PUSH)); + +		/* Clean up previously pushed branches.  Fails if receive.denyDeletes is +		 * set on the remote.  Also, on Git 1.7.0 and newer, you must run +		 * 'git config receive.denyDeleteCurrent ignore' in the remote repo in +		 * order to delete the remote branch pointed to by HEAD (usually master). +		 * See: https://raw.github.com/git/git/master/Documentation/RelNotes/1.7.0.txt +		 */ +		cl_git_pass(git_remote_ls(_remote, delete_ref_cb, &delete_specs)); +		if (delete_specs.length) { +			git_push *push; + +			cl_git_pass(git_push_new(&push, _remote)); + +			git_vector_foreach(&delete_specs, i, curr_del_spec) { +				git_push_add_refspec(push, curr_del_spec); +				git__free(curr_del_spec); +			} + +			cl_git_pass(git_push_finish(push)); +			git_push_free(push); +		} + +		git_remote_disconnect(_remote); +		git_vector_free(&delete_specs); + +		/* Now that we've deleted everything, fetch from the remote */ +		cl_git_pass(git_remote_connect(_remote, GIT_DIRECTION_FETCH)); +		cl_git_pass(git_remote_download(_remote, NULL, NULL)); +		cl_git_pass(git_remote_update_tips(_remote)); +		git_remote_disconnect(_remote); +	} else +		printf("GITTEST_REMOTE_URL unset; skipping push test\n"); +} + +void test_network_push__cleanup(void) +{ +	if (_remote) +		git_remote_free(_remote); + +	record_callbacks_data_clear(&_record_cbs_data); + +	cl_fixture_cleanup("testrepo.git"); +	cl_git_sandbox_cleanup(); +} + +/** + * Calls push and relists refs on remote to verify success. + *  + * @param refspecs refspecs to push + * @param refspecs_len length of refspecs + * @param expected_refs expected remote refs after push + * @param expected_refs_len length of expected_refs + * @param expected_ret expected return value from git_push_finish() + */ +static void do_push(const char *refspecs[], size_t refspecs_len, +	push_status expected_statuses[], size_t expected_statuses_len, +	expected_ref expected_refs[], size_t expected_refs_len, int expected_ret) +{ +	git_push *push; +	size_t i; +	int ret; + +	if (_remote) { +		cl_git_pass(git_remote_connect(_remote, GIT_DIRECTION_PUSH)); + +		cl_git_pass(git_push_new(&push, _remote)); + +		for (i = 0; i < refspecs_len; i++) +			cl_git_pass(git_push_add_refspec(push, refspecs[i])); + +		if (expected_ret < 0) { +			cl_git_fail(ret = git_push_finish(push)); +			cl_assert_equal_i(0, git_push_unpack_ok(push)); +		} +		else { +			cl_git_pass(ret = git_push_finish(push)); +			cl_assert_equal_i(1, git_push_unpack_ok(push)); +		} + +		do_verify_push_status(push, expected_statuses, expected_statuses_len); + +		cl_assert_equal_i(expected_ret, ret); + +		git_push_free(push); + +		verify_refs(_remote, expected_refs, expected_refs_len); + +		cl_git_pass(git_remote_update_tips(_remote)); + +		git_remote_disconnect(_remote); +	} +} + +/* Call push_finish() without ever calling git_push_add_refspec() */ +void test_network_push__noop(void) +{ +	do_push(NULL, 0, NULL, 0, NULL, 0, 0); +} + +void test_network_push__b1(void) +{ +	const char *specs[] = { "refs/heads/b1:refs/heads/b1" }; +	push_status exp_stats[] = { { "refs/heads/b1", NULL } }; +	expected_ref exp_refs[] = { { "refs/heads/b1", &_oid_b1 } }; +	do_push(specs, ARRAY_SIZE(specs), +		exp_stats, ARRAY_SIZE(exp_stats), +		exp_refs, ARRAY_SIZE(exp_refs), 0); +} + +void test_network_push__b2(void) +{ +	const char *specs[] = { "refs/heads/b2:refs/heads/b2" }; +	push_status exp_stats[] = { { "refs/heads/b2", NULL } }; +	expected_ref exp_refs[] = { { "refs/heads/b2", &_oid_b2 } }; +	do_push(specs, ARRAY_SIZE(specs), +		exp_stats, ARRAY_SIZE(exp_stats), +		exp_refs, ARRAY_SIZE(exp_refs), 0); +} + +void test_network_push__b3(void) +{ +	const char *specs[] = { "refs/heads/b3:refs/heads/b3" }; +	push_status exp_stats[] = { { "refs/heads/b3", NULL } }; +	expected_ref exp_refs[] = { { "refs/heads/b3", &_oid_b3 } }; +	do_push(specs, ARRAY_SIZE(specs), +		exp_stats, ARRAY_SIZE(exp_stats), +		exp_refs, ARRAY_SIZE(exp_refs), 0); +} + +void test_network_push__b4(void) +{ +	const char *specs[] = { "refs/heads/b4:refs/heads/b4" }; +	push_status exp_stats[] = { { "refs/heads/b4", NULL } }; +	expected_ref exp_refs[] = { { "refs/heads/b4", &_oid_b4 } }; +	do_push(specs, ARRAY_SIZE(specs), +		exp_stats, ARRAY_SIZE(exp_stats), +		exp_refs, ARRAY_SIZE(exp_refs), 0); +} + +void test_network_push__b5(void) +{ +	const char *specs[] = { "refs/heads/b5:refs/heads/b5" }; +	push_status exp_stats[] = { { "refs/heads/b5", NULL } }; +	expected_ref exp_refs[] = { { "refs/heads/b5", &_oid_b5 } }; +	do_push(specs, ARRAY_SIZE(specs), +		exp_stats, ARRAY_SIZE(exp_stats), +		exp_refs, ARRAY_SIZE(exp_refs), 0); +} + +void test_network_push__multi(void) +{ +	const char *specs[] = { +		"refs/heads/b1:refs/heads/b1", +		"refs/heads/b2:refs/heads/b2", +		"refs/heads/b3:refs/heads/b3", +		"refs/heads/b4:refs/heads/b4", +		"refs/heads/b5:refs/heads/b5" +	}; +	push_status exp_stats[] = { +		{ "refs/heads/b1", NULL }, +		{ "refs/heads/b2", NULL }, +		{ "refs/heads/b3", NULL }, +		{ "refs/heads/b4", NULL }, +		{ "refs/heads/b5", NULL } +	}; +	expected_ref exp_refs[] = { +		{ "refs/heads/b1", &_oid_b1 }, +		{ "refs/heads/b2", &_oid_b2 }, +		{ "refs/heads/b3", &_oid_b3 }, +		{ "refs/heads/b4", &_oid_b4 }, +		{ "refs/heads/b5", &_oid_b5 } +	}; +	do_push(specs, ARRAY_SIZE(specs), +		exp_stats, ARRAY_SIZE(exp_stats), +		exp_refs, ARRAY_SIZE(exp_refs), 0); +} + +void test_network_push__implicit_tgt(void) +{ +	const char *specs1[] = { "refs/heads/b1:" }; +	push_status exp_stats1[] = { { "refs/heads/b1", NULL } }; +	expected_ref exp_refs1[] = { { "refs/heads/b1", &_oid_b1 } }; + +	const char *specs2[] = { "refs/heads/b2:" }; +	push_status exp_stats2[] = { { "refs/heads/b2", NULL } }; +	expected_ref exp_refs2[] = { +	{ "refs/heads/b1", &_oid_b1 }, +	{ "refs/heads/b2", &_oid_b2 } +	}; + +	do_push(specs1, ARRAY_SIZE(specs1), +		exp_stats1, ARRAY_SIZE(exp_stats1), +		exp_refs1, ARRAY_SIZE(exp_refs1), 0); +	do_push(specs2, ARRAY_SIZE(specs2), +		exp_stats2, ARRAY_SIZE(exp_stats2), +		exp_refs2, ARRAY_SIZE(exp_refs2), 0); +} + +void test_network_push__fast_fwd(void) +{ +	/* Fast forward b1 in tgt from _oid_b1 to _oid_b6. */ + +	const char *specs_init[] = { "refs/heads/b1:refs/heads/b1" }; +	push_status exp_stats_init[] = { { "refs/heads/b1", NULL } }; +	expected_ref exp_refs_init[] = { { "refs/heads/b1", &_oid_b1 } }; + +	const char *specs_ff[] = { "refs/heads/b6:refs/heads/b1" }; +	push_status exp_stats_ff[] = { { "refs/heads/b1", NULL } }; +	expected_ref exp_refs_ff[] = { { "refs/heads/b1", &_oid_b6 } }; + +	/* Do a force push to reset b1 in target back to _oid_b1 */ +	const char *specs_reset[] = { "+refs/heads/b1:refs/heads/b1" }; +	/* Force should have no effect on a fast forward push */ +	const char *specs_ff_force[] = { "+refs/heads/b6:refs/heads/b1" }; + +	do_push(specs_init, ARRAY_SIZE(specs_init), +		exp_stats_init, ARRAY_SIZE(exp_stats_init), +		exp_refs_init, ARRAY_SIZE(exp_refs_init), 0); + +	do_push(specs_ff, ARRAY_SIZE(specs_ff), +		exp_stats_ff, ARRAY_SIZE(exp_stats_ff), +		exp_refs_ff, ARRAY_SIZE(exp_refs_ff), 0); + +	do_push(specs_reset, ARRAY_SIZE(specs_reset), +		exp_stats_init, ARRAY_SIZE(exp_stats_init), +		exp_refs_init, ARRAY_SIZE(exp_refs_init), 0); + +	do_push(specs_ff_force, ARRAY_SIZE(specs_ff_force), +		exp_stats_ff, ARRAY_SIZE(exp_stats_ff), +		exp_refs_ff, ARRAY_SIZE(exp_refs_ff), 0); +} + +void test_network_push__force(void) +{ +	const char *specs1[] = {"refs/heads/b3:refs/heads/tgt"}; +	push_status exp_stats1[] = { { "refs/heads/tgt", NULL } }; +	expected_ref exp_refs1[] = { { "refs/heads/tgt", &_oid_b3 } }; + +	const char *specs2[] = {"refs/heads/b4:refs/heads/tgt"}; + +	const char *specs2_force[] = {"+refs/heads/b4:refs/heads/tgt"}; +	push_status exp_stats2_force[] = { { "refs/heads/tgt", NULL } }; +	expected_ref exp_refs2_force[] = { { "refs/heads/tgt", &_oid_b4 } }; + +	do_push(specs1, ARRAY_SIZE(specs1), +		exp_stats1, ARRAY_SIZE(exp_stats1), +		exp_refs1, ARRAY_SIZE(exp_refs1), 0); + +	do_push(specs2, ARRAY_SIZE(specs2), +		NULL, 0, +		exp_refs1, ARRAY_SIZE(exp_refs1), GIT_ENONFASTFORWARD); + +	/* Non-fast-forward update with force should pass. */ +	do_push(specs2_force, ARRAY_SIZE(specs2_force), +		exp_stats2_force, ARRAY_SIZE(exp_stats2_force), +		exp_refs2_force, ARRAY_SIZE(exp_refs2_force), 0); +} + +void test_network_push__delete(void) +{ +	const char *specs1[] = { +		"refs/heads/b1:refs/heads/tgt1", +		"refs/heads/b1:refs/heads/tgt2" +	}; +	push_status exp_stats1[] = { +		{ "refs/heads/tgt1", NULL }, +		{ "refs/heads/tgt2", NULL } +	}; +	expected_ref exp_refs1[] = { +		{ "refs/heads/tgt1", &_oid_b1 }, +		{ "refs/heads/tgt2", &_oid_b1 } +	}; + +	const char *specs_del_fake[] = { ":refs/heads/fake" }; +	/* Force has no effect for delete. */ +	const char *specs_del_fake_force[] = { "+:refs/heads/fake" }; + +	const char *specs_delete[] = { ":refs/heads/tgt1" }; +	push_status exp_stats_delete[] = { { "refs/heads/tgt1", NULL } }; +	expected_ref exp_refs_delete[] = { { "refs/heads/tgt2", &_oid_b1 } }; +	/* Force has no effect for delete. */ +	const char *specs_delete_force[] = { "+:refs/heads/tgt1" }; + +	do_push(specs1, ARRAY_SIZE(specs1), +		exp_stats1, ARRAY_SIZE(exp_stats1), +		exp_refs1, ARRAY_SIZE(exp_refs1), 0); + +	/* Deleting a non-existent branch should fail before the request is sent to +	 * the server because the client cannot find the old oid for the ref. +	 */ +	do_push(specs_del_fake, ARRAY_SIZE(specs_del_fake), +		NULL, 0, +		exp_refs1, ARRAY_SIZE(exp_refs1), -1); +	do_push(specs_del_fake_force, ARRAY_SIZE(specs_del_fake_force), +		NULL, 0, +		exp_refs1, ARRAY_SIZE(exp_refs1), -1); + +	/* Delete one of the pushed branches. */ +	do_push(specs_delete, ARRAY_SIZE(specs_delete), +		exp_stats_delete, ARRAY_SIZE(exp_stats_delete), +		exp_refs_delete, ARRAY_SIZE(exp_refs_delete), 0); + +	/* Re-push branches and retry delete with force. */ +	do_push(specs1, ARRAY_SIZE(specs1), +		exp_stats1, ARRAY_SIZE(exp_stats1), +		exp_refs1, ARRAY_SIZE(exp_refs1), 0); +	do_push(specs_delete_force, ARRAY_SIZE(specs_delete_force), +		exp_stats_delete, ARRAY_SIZE(exp_stats_delete), +		exp_refs_delete, ARRAY_SIZE(exp_refs_delete), 0); +} + +void test_network_push__bad_refspecs(void) +{ +	/* All classes of refspecs that should be rejected by +	 * git_push_add_refspec() should go in this test. +	 */ +	git_push *push; + +	if (_remote) { +		cl_git_pass(git_remote_connect(_remote, GIT_DIRECTION_PUSH)); +		cl_git_pass(git_push_new(&push, _remote)); + +		/* Unexpanded branch names not supported */ +		cl_git_fail(git_push_add_refspec(push, "b6:b6")); + +		git_push_free(push); +	} +} + +void test_network_push__expressions(void) +{ +	/* TODO: Expressions in refspecs doesn't actually work yet */ +	const char *specs_left_expr[] = { "refs/heads/b2~1:refs/heads/b2" }; + +	const char *specs_right_expr[] = { "refs/heads/b2:refs/heads/b2~1" }; +	push_status exp_stats_right_expr[] = { { "refs/heads/b2~1", "funny refname" } }; + +	/* TODO: Find a more precise way of checking errors than a exit code of -1. */ +	do_push(specs_left_expr, ARRAY_SIZE(specs_left_expr), +		NULL, 0, +		NULL, 0, -1); + +	do_push(specs_right_expr, ARRAY_SIZE(specs_right_expr), +		exp_stats_right_expr, ARRAY_SIZE(exp_stats_right_expr), +		NULL, 0, 0); +} diff --git a/tests-clar/network/push_util.c b/tests-clar/network/push_util.c new file mode 100644 index 000000000..2e457844d --- /dev/null +++ b/tests-clar/network/push_util.c @@ -0,0 +1,126 @@ + +#include "clar_libgit2.h" +#include "buffer.h" +#include "vector.h" +#include "push_util.h" + +const git_oid OID_ZERO = {{ 0 }}; + +void updated_tip_free(updated_tip *t) +{ +	git__free(t->name); +	git__free(t->old_oid); +	git__free(t->new_oid); +	git__free(t); +} + +void record_callbacks_data_clear(record_callbacks_data *data) +{ +	size_t i; +	updated_tip *tip; + +	git_vector_foreach(&data->updated_tips, i, tip) +		updated_tip_free(tip); + +	git_vector_free(&data->updated_tips); +} + +int record_update_tips_cb(const char *refname, const git_oid *a, const git_oid *b, void *data) +{ +	updated_tip *t; +	record_callbacks_data *record_data = (record_callbacks_data *)data; + +	cl_assert(t = git__malloc(sizeof(*t))); + +	cl_assert(t->name = git__strdup(refname)); +	cl_assert(t->old_oid = git__malloc(sizeof(*t->old_oid))); +	git_oid_cpy(t->old_oid, a); + +	cl_assert(t->new_oid = git__malloc(sizeof(*t->new_oid))); +	git_oid_cpy(t->new_oid, b); + +	git_vector_insert(&record_data->updated_tips, t); + +	return 0; +} + +int delete_ref_cb(git_remote_head *head, void *payload) +{ +	git_vector *delete_specs = (git_vector *)payload; +	git_buf del_spec = GIT_BUF_INIT; + +	/* Ignore malformed ref names (which also saves us from tag^{} */ +	if (!git_reference_is_valid_name(head->name)) +		return 0; + +	/* Create a refspec that deletes a branch in the remote */ +	if (strcmp(head->name, "refs/heads/master")) { +		cl_git_pass(git_buf_putc(&del_spec, ':')); +		cl_git_pass(git_buf_puts(&del_spec, head->name)); +		cl_git_pass(git_vector_insert(delete_specs, git_buf_detach(&del_spec))); +	} + +	return 0; +} + +int record_ref_cb(git_remote_head *head, void *payload) +{ +	git_vector *refs = (git_vector *) payload; +	return git_vector_insert(refs, head); +} + +void verify_remote_refs(git_vector *actual_refs, const expected_ref expected_refs[], size_t expected_refs_len) +{ +	size_t i, j = 0; +	git_buf msg = GIT_BUF_INIT; +	git_remote_head *actual; +	char *oid_str; +	bool master_present = false; + +	/* We don't care whether "master" is present on the other end or not */ +	git_vector_foreach(actual_refs, i, actual) { +		if (!strcmp(actual->name, "refs/heads/master")) { +			master_present = true; +			break; +		} +	} + +	if (expected_refs_len + (master_present ? 1 : 0) != actual_refs->length) +		goto failed; + +	git_vector_foreach(actual_refs, i, actual) { +		if (master_present && !strcmp(actual->name, "refs/heads/master")) +			continue; + +		if (strcmp(expected_refs[j].name, actual->name) || +			git_oid_cmp(expected_refs[j].oid, &actual->oid)) +			goto failed; + +		j++; +	} + +	return; + +failed: +	git_buf_puts(&msg, "Expected and actual refs differ:\nEXPECTED:\n"); + +	for(i = 0; i < expected_refs_len; i++) { +		cl_assert(oid_str = git_oid_allocfmt(expected_refs[i].oid)); +		cl_git_pass(git_buf_printf(&msg, "%s = %s\n", expected_refs[i].name, oid_str)); +		git__free(oid_str); +	} + +	git_buf_puts(&msg, "\nACTUAL:\n"); +	git_vector_foreach(actual_refs, i, actual) { +		if (master_present && !strcmp(actual->name, "refs/heads/master")) +			continue; + +		cl_assert(oid_str = git_oid_allocfmt(&actual->oid)); +		cl_git_pass(git_buf_printf(&msg, "%s = %s\n", actual->name, oid_str)); +		git__free(oid_str); +	} + +	cl_fail(git_buf_cstr(&msg)); + +	git_buf_free(&msg); +} diff --git a/tests-clar/network/push_util.h b/tests-clar/network/push_util.h new file mode 100644 index 000000000..2f4dffce4 --- /dev/null +++ b/tests-clar/network/push_util.h @@ -0,0 +1,68 @@ +#ifndef INCLUDE_cl_push_util_h__ +#define INCLUDE_cl_push_util_h__ + +#include "git2/oid.h" + +/* Constant for zero oid */ +extern const git_oid OID_ZERO; + +/** + * Macro for initializing git_remote_callbacks to use test helpers that + * record data in a record_callbacks_data instance. + * @param data pointer to a record_callbacks_data instance + */ +#define RECORD_CALLBACKS_INIT(data) { NULL, NULL, record_update_tips_cb, data } + +typedef struct { +	char *name; +	git_oid *old_oid; +	git_oid *new_oid; +} updated_tip; + +typedef struct { +	git_vector updated_tips; +} record_callbacks_data; + +typedef struct { +	const char *name; +	const git_oid *oid; +} expected_ref; + +void updated_tip_free(updated_tip *t); + +void record_callbacks_data_clear(record_callbacks_data *data); + +/** + * Callback for git_remote_update_tips that records updates + * + * @param data (git_vector *) of updated_tip instances + */ +int record_update_tips_cb(const char *refname, const git_oid *a, const git_oid *b, void *data); + +/** + * Callback for git_remote_list that adds refspecs to delete each ref + * + * @param head a ref on the remote + * @param payload a git_push instance + */ +int delete_ref_cb(git_remote_head *head, void *payload); + +/** + * Callback for git_remote_list that adds refspecs to vector + * + * @param head a ref on the remote + * @param payload (git_vector *) of git_remote_head instances + */ +int record_ref_cb(git_remote_head *head, void *payload); + +/** + * Verifies that refs on remote stored by record_ref_cb match the expected + * names, oids, and order. + * + * @param actual_refs actual refs stored by record_ref_cb() + * @param expected_refs expected remote refs + * @param expected_refs_len length of expected_refs + */ +void verify_remote_refs(git_vector *actual_refs, const expected_ref expected_refs[], size_t expected_refs_len); + +#endif /* INCLUDE_cl_push_util_h__ */ diff --git a/tests-clar/object/lookup.c b/tests-clar/object/lookup.c index 01435bc04..47efe88cb 100644 --- a/tests-clar/object/lookup.c +++ b/tests-clar/object/lookup.c @@ -62,3 +62,15 @@ void test_object_lookup__lookup_wrong_type_eventually_returns_enotfound(void)  	cl_assert_equal_i(  		GIT_ENOTFOUND, git_object_lookup(&object, g_repo, &oid, GIT_OBJ_TAG));  } + +void test_object_lookup__lookup_object_type_by_oid(void) +{ +	const char *commit = "e90810b8df3e80c413d903f631643c716887138d"; +	git_oid oid; +	git_otype type; + +	cl_git_pass(git_oid_fromstr(&oid, commit)); + +	cl_git_pass(git_object_oid2type(&type, g_repo, &oid)); +	cl_assert(type == GIT_OBJ_COMMIT); +} diff --git a/tests-clar/resources/push.sh b/tests-clar/resources/push.sh new file mode 100644 index 000000000..607117675 --- /dev/null +++ b/tests-clar/resources/push.sh @@ -0,0 +1,55 @@ +#!/bin/sh
 +#creates push_src repo for libgit2 push tests.
 +set -eu
 +
 +#Create src repo for push
 +mkdir push_src
 +pushd push_src
 +  git init
 +  
 +  echo a > a.txt
 +  git add .
 +  git commit -m 'added a.txt'
 +  
 +  mkdir fold
 +  echo b > fold/b.txt
 +  git add .
 +  git commit -m 'added fold and fold/b.txt'
 +  
 +  git branch b1 #b1 and b2 are the same
 +  git branch b2
 +  
 +  git checkout -b b3
 +  echo edit >> a.txt
 +  git add .
 +  git commit -m 'edited a.txt'
 +
 +  git checkout -b b4 master
 +  echo edit >> fold\b.txt
 +  git add .
 +  git commit -m 'edited fold\b.txt'
 +  
 +  git checkout -b b5 master
 +  git submodule add ../testrepo.git submodule
 +  git commit -m "added submodule named 'submodule' pointing to '../testrepo.git'"
 +  
 +  git checkout master
 +  git merge -m "merge b3, b4, and b5 to master" b3 b4 b5
 +
 +  #Log commits to include in testcase
 +  git log --format=oneline --decorate --graph
 +  #*-.   951bbbb90e2259a4c8950db78946784fb53fcbce (HEAD, master) merge b3, b4, and b5 to master
 +  #|\ \
 +  #| | * fa38b91f199934685819bea316186d8b008c52a2 (b5) added submodule named 'submodule' pointing to '../testrepo.git'
 +  #| * | 27b7ce66243eb1403862d05f958c002312df173d (b4) edited fold\b.txt
 +  #| |/
 +  #* | d9b63a88223d8367516f50bd131a5f7349b7f3e4 (b3) edited a.txt
 +  #|/
 +  #* a78705c3b2725f931d3ee05348d83cc26700f247 (b2, b1) added fold and fold/b.txt
 +  #* 5c0bb3d1b9449d1cc69d7519fd05166f01840915 added a.txt
 +
 +  #fix paths so that we can add repo folders under libgit2 repo
 +  #rename .git to .gitted
 +  find . -name .git -exec mv -i '{}' '{}ted' \;
 +  mv -i .gitmodules gitmodules
 +popd
 diff --git a/tests-clar/resources/push_src/.gitted/COMMIT_EDITMSG b/tests-clar/resources/push_src/.gitted/COMMIT_EDITMSG new file mode 100644 index 000000000..b1295084c --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/COMMIT_EDITMSG @@ -0,0 +1 @@ +added submodule named 'submodule' pointing to '../testrepo.git' diff --git a/tests-clar/resources/push_src/.gitted/HEAD b/tests-clar/resources/push_src/.gitted/HEAD new file mode 100644 index 000000000..cb089cd89 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/tests-clar/resources/push_src/.gitted/ORIG_HEAD b/tests-clar/resources/push_src/.gitted/ORIG_HEAD new file mode 100644 index 000000000..afadf9d26 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/ORIG_HEAD @@ -0,0 +1 @@ +a78705c3b2725f931d3ee05348d83cc26700f247 diff --git a/tests-clar/resources/push_src/.gitted/config b/tests-clar/resources/push_src/.gitted/config new file mode 100644 index 000000000..51de0311b --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/config @@ -0,0 +1,10 @@ +[core] +	repositoryformatversion = 0 +	filemode = false +	bare = false +	logallrefupdates = true +	symlinks = false +	ignorecase = true +	hideDotFiles = dotGitOnly +[submodule "submodule"] +	url = m:/dd/libgit2/tests-clar/resources/testrepo.git diff --git a/tests-clar/resources/push_src/.gitted/description b/tests-clar/resources/push_src/.gitted/description new file mode 100644 index 000000000..498b267a8 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/tests-clar/resources/push_src/.gitted/hooks/applypatch-msg.sample b/tests-clar/resources/push_src/.gitted/hooks/applypatch-msg.sample new file mode 100644 index 000000000..8b2a2fe84 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit.  The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +test -x "$GIT_DIR/hooks/commit-msg" && +	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} +: diff --git a/tests-clar/resources/push_src/.gitted/hooks/commit-msg.sample b/tests-clar/resources/push_src/.gitted/hooks/commit-msg.sample new file mode 100644 index 000000000..b58d1184a --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message.  The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit.  The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | +	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || { +	echo >&2 Duplicate Signed-off-by lines. +	exit 1 +} diff --git a/tests-clar/resources/push_src/.gitted/hooks/post-commit.sample b/tests-clar/resources/push_src/.gitted/hooks/post-commit.sample new file mode 100644 index 000000000..22668216a --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/post-commit.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script that is called after a successful +# commit is made. +# +# To enable this hook, rename this file to "post-commit". + +: Nothing diff --git a/tests-clar/resources/push_src/.gitted/hooks/post-receive.sample b/tests-clar/resources/push_src/.gitted/hooks/post-receive.sample new file mode 100644 index 000000000..7a83e17ab --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/post-receive.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script for the "post-receive" event. +# +# The "post-receive" script is run after receive-pack has accepted a pack +# and the repository has been updated.  It is passed arguments in through +# stdin in the form +#  <oldrev> <newrev> <refname> +# For example: +#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master +# +# see contrib/hooks/ for a sample, or uncomment the next line and +# rename the file to "post-receive". + +#. /usr/share/doc/git-core/contrib/hooks/post-receive-email diff --git a/tests-clar/resources/push_src/.gitted/hooks/post-update.sample b/tests-clar/resources/push_src/.gitted/hooks/post-update.sample new file mode 100644 index 000000000..ec17ec193 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/tests-clar/resources/push_src/.gitted/hooks/pre-applypatch.sample b/tests-clar/resources/push_src/.gitted/hooks/pre-applypatch.sample new file mode 100644 index 000000000..b1f187c2e --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && +	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} +: diff --git a/tests-clar/resources/push_src/.gitted/hooks/pre-commit.sample b/tests-clar/resources/push_src/.gitted/hooks/pre-commit.sample new file mode 100644 index 000000000..18c482976 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/pre-commit.sample @@ -0,0 +1,50 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments.  The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then +	against=HEAD +else +	# Initial commit: diff against an empty tree object +	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ascii filenames set this variable to true. +allownonascii=$(git config hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ascii filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && +	# Note that the use of brackets around a tr range is ok here, (it's +	# even required, for portability to Solaris 10's /usr/bin/tr), since +	# the square bracket bytes happen to fall in the designated range. +	test $(git diff --cached --name-only --diff-filter=A -z $against | +	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then +	echo "Error: Attempt to add a non-ascii file name." +	echo +	echo "This can cause problems if you want to work" +	echo "with people on other platforms." +	echo +	echo "To be portable it is advisable to rename the file ..." +	echo +	echo "If you know what you are doing you can disable this" +	echo "check using:" +	echo +	echo "  git config hooks.allownonascii true" +	echo +	exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/tests-clar/resources/push_src/.gitted/hooks/pre-rebase.sample b/tests-clar/resources/push_src/.gitted/hooks/pre-rebase.sample new file mode 100644 index 000000000..9773ed4cb --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then +	topic="refs/heads/$2" +else +	topic=`git symbolic-ref HEAD` || +	exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) +	;; +*) +	exit 0 ;# we do not interrupt others. +	;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master.  Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { +	echo >&2 "No such branch $topic" +	exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then +	echo >&2 "$topic is fully merged to master; better remove it." +	exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next?  If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master           ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then +	not_in_topic=`git rev-list "^$topic" master` +	if test -z "$not_in_topic" +	then +		echo >&2 "$topic is already up-to-date with master" +		exit 1 ;# we could allow it, but there is no point. +	else +		exit 0 +	fi +else +	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` +	/usr/bin/perl -e ' +		my $topic = $ARGV[0]; +		my $msg = "* $topic has commits already merged to public branch:\n"; +		my (%not_in_next) = map { +			/^([0-9a-f]+) /; +			($1 => 1); +		} split(/\n/, $ARGV[1]); +		for my $elem (map { +				/^([0-9a-f]+) (.*)$/; +				[$1 => $2]; +			} split(/\n/, $ARGV[2])) { +			if (!exists $not_in_next{$elem->[0]}) { +				if ($msg) { +					print STDERR $msg; +					undef $msg; +				} +				print STDERR " $elem->[1]\n"; +			} +		} +	' "$topic" "$not_in_next" "$not_in_master" +	exit 1 +fi + +exit 0 + +################################################################ + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never +   merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", +   it is deleted.  If you need to build on top of it to correct +   earlier mistakes, a new topic branch is created by forking at +   the tip of the "master".  This is not strictly necessary, but +   it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic +   branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next".  Young +    topic branches can have stupid mistakes you would rather +    clean up before publishing, and things that have not been +    merged into other branches can be easily rebased without +    affecting other people.  But once it is published, you would +    not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". +    Then you can delete it.  More importantly, you should not +    build on top of it -- other people may already want to +    change things related to the topic as patches against your +    "master", so if you need further changes, it is better to +    fork the topic (perhaps with the same name) afresh from the +    tip of "master". + +Let's look at this example: + +		   o---o---o---o---o---o---o---o---o---o "next" +		  /       /           /           / +		 /   a---a---b A     /           / +		/   /               /           / +	       /   /   c---c---c---c B         / +	      /   /   /             \         / +	     /   /   /   b---b C     \       / +	    /   /   /   /             \     / +    ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished.  It has been fully merged up to "master" and "next", +   and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + +	git rev-list ^master ^topic next +	git rev-list ^master        next + +	if these match, topic has not merged in next at all. + +To compute (2): + +	git rev-list master..topic + +	if this is empty, it is fully merged to "master". diff --git a/tests-clar/resources/push_src/.gitted/hooks/prepare-commit-msg.sample b/tests-clar/resources/push_src/.gitted/hooks/prepare-commit-msg.sample new file mode 100644 index 000000000..f093a02ec --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/prepare-commit-msg.sample @@ -0,0 +1,36 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source.  The hook's purpose is to edit the commit +# message file.  If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples.  The first comments out the +# "Conflicts:" part of a merge commit. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output.  It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited.  This is rarely a good idea. + +case "$2,$3" in +  merge,) +    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; + +# ,|template,) +#   /usr/bin/perl -i.bak -pe ' +#      print "\n" . `git diff --cached --name-status -r` +#	 if /^#/ && $first++ == 0' "$1" ;; + +  *) ;; +esac + +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff --git a/tests-clar/resources/push_src/.gitted/hooks/update.sample b/tests-clar/resources/push_src/.gitted/hooks/update.sample new file mode 100644 index 000000000..71ab04edc --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to blocks unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +#   This boolean sets whether unannotated tags will be allowed into the +#   repository.  By default they won't be. +# hooks.allowdeletetag +#   This boolean sets whether deleting tags will be allowed in the +#   repository.  By default they won't be. +# hooks.allowmodifytag +#   This boolean sets whether a tag may be modified after creation. By default +#   it won't be. +# hooks.allowdeletebranch +#   This boolean sets whether deleting branches will be allowed in the +#   repository.  By default they won't be. +# hooks.denycreatebranch +#   This boolean sets whether remotely creating branches will be denied +#   in the repository.  By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then +	echo "Don't run this script from the command line." >&2 +	echo " (if you want, you could supply GIT_DIR then run" >&2 +	echo "  $0 <ref> <oldrev> <newrev>)" >&2 +	exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then +	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2 +	exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") +	echo "*** Project description file hasn't been set" >&2 +	exit 1 +	;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then +	newrev_type=delete +else +	newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in +	refs/tags/*,commit) +		# un-annotated tag +		short_refname=${refname##refs/tags/} +		if [ "$allowunannotated" != "true" ]; then +			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 +			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 +			exit 1 +		fi +		;; +	refs/tags/*,delete) +		# delete tag +		if [ "$allowdeletetag" != "true" ]; then +			echo "*** Deleting a tag is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	refs/tags/*,tag) +		# annotated tag +		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 +		then +			echo "*** Tag '$refname' already exists." >&2 +			echo "*** Modifying a tag is not allowed in this repository." >&2 +			exit 1 +		fi +		;; +	refs/heads/*,commit) +		# branch +		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then +			echo "*** Creating a branch is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	refs/heads/*,delete) +		# delete branch +		if [ "$allowdeletebranch" != "true" ]; then +			echo "*** Deleting a branch is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	refs/remotes/*,commit) +		# tracking branch +		;; +	refs/remotes/*,delete) +		# delete tracking branch +		if [ "$allowdeletebranch" != "true" ]; then +			echo "*** Deleting a tracking branch is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	*) +		# Anything else (is there anything else?) +		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 +		exit 1 +		;; +esac + +# --- Finished +exit 0 diff --git a/tests-clar/resources/push_src/.gitted/index b/tests-clar/resources/push_src/.gitted/index Binary files differnew file mode 100644 index 000000000..0ef6594b3 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/index diff --git a/tests-clar/resources/push_src/.gitted/info/exclude b/tests-clar/resources/push_src/.gitted/info/exclude new file mode 100644 index 000000000..a5196d1be --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/tests-clar/resources/push_src/.gitted/logs/HEAD b/tests-clar/resources/push_src/.gitted/logs/HEAD new file mode 100644 index 000000000..4ef336f84 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/HEAD @@ -0,0 +1,10 @@ +0000000000000000000000000000000000000000 5c0bb3d1b9449d1cc69d7519fd05166f01840915 Congyi Wu <congyiwu@gmail.com> 1352923200 -0500	commit (initial): added a.txt +5c0bb3d1b9449d1cc69d7519fd05166f01840915 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923200 -0500	commit: added fold and fold/b.txt +a78705c3b2725f931d3ee05348d83cc26700f247 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	checkout: moving from master to b3 +a78705c3b2725f931d3ee05348d83cc26700f247 d9b63a88223d8367516f50bd131a5f7349b7f3e4 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	commit: edited a.txt +d9b63a88223d8367516f50bd131a5f7349b7f3e4 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	checkout: moving from b3 to b4 +a78705c3b2725f931d3ee05348d83cc26700f247 27b7ce66243eb1403862d05f958c002312df173d Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	commit: edited fold\b.txt +27b7ce66243eb1403862d05f958c002312df173d a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	checkout: moving from b4 to b5 +a78705c3b2725f931d3ee05348d83cc26700f247 fa38b91f199934685819bea316186d8b008c52a2 Congyi Wu <congyiwu@gmail.com> 1352923206 -0500	commit: added submodule named 'submodule' pointing to '../testrepo.git' +fa38b91f199934685819bea316186d8b008c52a2 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923207 -0500	checkout: moving from b5 to master +a78705c3b2725f931d3ee05348d83cc26700f247 951bbbb90e2259a4c8950db78946784fb53fcbce Congyi Wu <congyiwu@gmail.com> 1352923207 -0500	merge b3 b4 b5: Merge made by the 'octopus' strategy. diff --git a/tests-clar/resources/push_src/.gitted/logs/refs/heads/b1 b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b1 new file mode 100644 index 000000000..390a03d5c --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b1 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923200 -0500	branch: Created from master diff --git a/tests-clar/resources/push_src/.gitted/logs/refs/heads/b2 b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b2 new file mode 100644 index 000000000..390a03d5c --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b2 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923200 -0500	branch: Created from master diff --git a/tests-clar/resources/push_src/.gitted/logs/refs/heads/b3 b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b3 new file mode 100644 index 000000000..01e302c44 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b3 @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	branch: Created from HEAD +a78705c3b2725f931d3ee05348d83cc26700f247 d9b63a88223d8367516f50bd131a5f7349b7f3e4 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	commit: edited a.txt diff --git a/tests-clar/resources/push_src/.gitted/logs/refs/heads/b4 b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b4 new file mode 100644 index 000000000..7afddc54e --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b4 @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	branch: Created from master +a78705c3b2725f931d3ee05348d83cc26700f247 27b7ce66243eb1403862d05f958c002312df173d Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	commit: edited fold\b.txt diff --git a/tests-clar/resources/push_src/.gitted/logs/refs/heads/b5 b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b5 new file mode 100644 index 000000000..bc22567f7 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/refs/heads/b5 @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923201 -0500	branch: Created from master +a78705c3b2725f931d3ee05348d83cc26700f247 fa38b91f199934685819bea316186d8b008c52a2 Congyi Wu <congyiwu@gmail.com> 1352923206 -0500	commit: added submodule named 'submodule' pointing to '../testrepo.git' diff --git a/tests-clar/resources/push_src/.gitted/logs/refs/heads/master b/tests-clar/resources/push_src/.gitted/logs/refs/heads/master new file mode 100644 index 000000000..8aafa9ca4 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/logs/refs/heads/master @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 5c0bb3d1b9449d1cc69d7519fd05166f01840915 Congyi Wu <congyiwu@gmail.com> 1352923200 -0500	commit (initial): added a.txt +5c0bb3d1b9449d1cc69d7519fd05166f01840915 a78705c3b2725f931d3ee05348d83cc26700f247 Congyi Wu <congyiwu@gmail.com> 1352923200 -0500	commit: added fold and fold/b.txt +a78705c3b2725f931d3ee05348d83cc26700f247 951bbbb90e2259a4c8950db78946784fb53fcbce Congyi Wu <congyiwu@gmail.com> 1352923207 -0500	merge b3 b4 b5: Merge made by the 'octopus' strategy. diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/HEAD b/tests-clar/resources/push_src/.gitted/modules/submodule/HEAD new file mode 100644 index 000000000..cb089cd89 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/config b/tests-clar/resources/push_src/.gitted/modules/submodule/config new file mode 100644 index 000000000..59810077d --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/config @@ -0,0 +1,15 @@ +[core] +	repositoryformatversion = 0 +	filemode = false +	bare = false +	logallrefupdates = true +	worktree = ../../../submodule +	symlinks = false +	ignorecase = true +	hideDotFiles = dotGitOnly +[remote "origin"] +	fetch = +refs/heads/*:refs/remotes/origin/* +	url = m:/dd/libgit2/tests-clar/resources/testrepo.git +[branch "master"] +	remote = origin +	merge = refs/heads/master diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/description b/tests-clar/resources/push_src/.gitted/modules/submodule/description new file mode 100644 index 000000000..498b267a8 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/applypatch-msg.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/applypatch-msg.sample new file mode 100644 index 000000000..8b2a2fe84 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit.  The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +test -x "$GIT_DIR/hooks/commit-msg" && +	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} +: diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/commit-msg.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/commit-msg.sample new file mode 100644 index 000000000..b58d1184a --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message.  The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit.  The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | +	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || { +	echo >&2 Duplicate Signed-off-by lines. +	exit 1 +} diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-commit.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-commit.sample new file mode 100644 index 000000000..22668216a --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-commit.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script that is called after a successful +# commit is made. +# +# To enable this hook, rename this file to "post-commit". + +: Nothing diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-receive.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-receive.sample new file mode 100644 index 000000000..7a83e17ab --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-receive.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script for the "post-receive" event. +# +# The "post-receive" script is run after receive-pack has accepted a pack +# and the repository has been updated.  It is passed arguments in through +# stdin in the form +#  <oldrev> <newrev> <refname> +# For example: +#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master +# +# see contrib/hooks/ for a sample, or uncomment the next line and +# rename the file to "post-receive". + +#. /usr/share/doc/git-core/contrib/hooks/post-receive-email diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-update.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-update.sample new file mode 100644 index 000000000..ec17ec193 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-applypatch.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-applypatch.sample new file mode 100644 index 000000000..b1f187c2e --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && +	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} +: diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-commit.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-commit.sample new file mode 100644 index 000000000..18c482976 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-commit.sample @@ -0,0 +1,50 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments.  The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then +	against=HEAD +else +	# Initial commit: diff against an empty tree object +	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ascii filenames set this variable to true. +allownonascii=$(git config hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ascii filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && +	# Note that the use of brackets around a tr range is ok here, (it's +	# even required, for portability to Solaris 10's /usr/bin/tr), since +	# the square bracket bytes happen to fall in the designated range. +	test $(git diff --cached --name-only --diff-filter=A -z $against | +	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then +	echo "Error: Attempt to add a non-ascii file name." +	echo +	echo "This can cause problems if you want to work" +	echo "with people on other platforms." +	echo +	echo "To be portable it is advisable to rename the file ..." +	echo +	echo "If you know what you are doing you can disable this" +	echo "check using:" +	echo +	echo "  git config hooks.allownonascii true" +	echo +	exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-rebase.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-rebase.sample new file mode 100644 index 000000000..9773ed4cb --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then +	topic="refs/heads/$2" +else +	topic=`git symbolic-ref HEAD` || +	exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) +	;; +*) +	exit 0 ;# we do not interrupt others. +	;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master.  Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { +	echo >&2 "No such branch $topic" +	exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then +	echo >&2 "$topic is fully merged to master; better remove it." +	exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next?  If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master           ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then +	not_in_topic=`git rev-list "^$topic" master` +	if test -z "$not_in_topic" +	then +		echo >&2 "$topic is already up-to-date with master" +		exit 1 ;# we could allow it, but there is no point. +	else +		exit 0 +	fi +else +	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` +	/usr/bin/perl -e ' +		my $topic = $ARGV[0]; +		my $msg = "* $topic has commits already merged to public branch:\n"; +		my (%not_in_next) = map { +			/^([0-9a-f]+) /; +			($1 => 1); +		} split(/\n/, $ARGV[1]); +		for my $elem (map { +				/^([0-9a-f]+) (.*)$/; +				[$1 => $2]; +			} split(/\n/, $ARGV[2])) { +			if (!exists $not_in_next{$elem->[0]}) { +				if ($msg) { +					print STDERR $msg; +					undef $msg; +				} +				print STDERR " $elem->[1]\n"; +			} +		} +	' "$topic" "$not_in_next" "$not_in_master" +	exit 1 +fi + +exit 0 + +################################################################ + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never +   merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", +   it is deleted.  If you need to build on top of it to correct +   earlier mistakes, a new topic branch is created by forking at +   the tip of the "master".  This is not strictly necessary, but +   it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic +   branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next".  Young +    topic branches can have stupid mistakes you would rather +    clean up before publishing, and things that have not been +    merged into other branches can be easily rebased without +    affecting other people.  But once it is published, you would +    not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". +    Then you can delete it.  More importantly, you should not +    build on top of it -- other people may already want to +    change things related to the topic as patches against your +    "master", so if you need further changes, it is better to +    fork the topic (perhaps with the same name) afresh from the +    tip of "master". + +Let's look at this example: + +		   o---o---o---o---o---o---o---o---o---o "next" +		  /       /           /           / +		 /   a---a---b A     /           / +		/   /               /           / +	       /   /   c---c---c---c B         / +	      /   /   /             \         / +	     /   /   /   b---b C     \       / +	    /   /   /   /             \     / +    ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished.  It has been fully merged up to "master" and "next", +   and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + +	git rev-list ^master ^topic next +	git rev-list ^master        next + +	if these match, topic has not merged in next at all. + +To compute (2): + +	git rev-list master..topic + +	if this is empty, it is fully merged to "master". diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/prepare-commit-msg.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/prepare-commit-msg.sample new file mode 100644 index 000000000..f093a02ec --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/prepare-commit-msg.sample @@ -0,0 +1,36 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source.  The hook's purpose is to edit the commit +# message file.  If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples.  The first comments out the +# "Conflicts:" part of a merge commit. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output.  It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited.  This is rarely a good idea. + +case "$2,$3" in +  merge,) +    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; + +# ,|template,) +#   /usr/bin/perl -i.bak -pe ' +#      print "\n" . `git diff --cached --name-status -r` +#	 if /^#/ && $first++ == 0' "$1" ;; + +  *) ;; +esac + +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/update.sample b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/update.sample new file mode 100644 index 000000000..71ab04edc --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to blocks unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +#   This boolean sets whether unannotated tags will be allowed into the +#   repository.  By default they won't be. +# hooks.allowdeletetag +#   This boolean sets whether deleting tags will be allowed in the +#   repository.  By default they won't be. +# hooks.allowmodifytag +#   This boolean sets whether a tag may be modified after creation. By default +#   it won't be. +# hooks.allowdeletebranch +#   This boolean sets whether deleting branches will be allowed in the +#   repository.  By default they won't be. +# hooks.denycreatebranch +#   This boolean sets whether remotely creating branches will be denied +#   in the repository.  By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then +	echo "Don't run this script from the command line." >&2 +	echo " (if you want, you could supply GIT_DIR then run" >&2 +	echo "  $0 <ref> <oldrev> <newrev>)" >&2 +	exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then +	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2 +	exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") +	echo "*** Project description file hasn't been set" >&2 +	exit 1 +	;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then +	newrev_type=delete +else +	newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in +	refs/tags/*,commit) +		# un-annotated tag +		short_refname=${refname##refs/tags/} +		if [ "$allowunannotated" != "true" ]; then +			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 +			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 +			exit 1 +		fi +		;; +	refs/tags/*,delete) +		# delete tag +		if [ "$allowdeletetag" != "true" ]; then +			echo "*** Deleting a tag is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	refs/tags/*,tag) +		# annotated tag +		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 +		then +			echo "*** Tag '$refname' already exists." >&2 +			echo "*** Modifying a tag is not allowed in this repository." >&2 +			exit 1 +		fi +		;; +	refs/heads/*,commit) +		# branch +		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then +			echo "*** Creating a branch is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	refs/heads/*,delete) +		# delete branch +		if [ "$allowdeletebranch" != "true" ]; then +			echo "*** Deleting a branch is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	refs/remotes/*,commit) +		# tracking branch +		;; +	refs/remotes/*,delete) +		# delete tracking branch +		if [ "$allowdeletebranch" != "true" ]; then +			echo "*** Deleting a tracking branch is not allowed in this repository" >&2 +			exit 1 +		fi +		;; +	*) +		# Anything else (is there anything else?) +		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 +		exit 1 +		;; +esac + +# --- Finished +exit 0 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/index b/tests-clar/resources/push_src/.gitted/modules/submodule/index Binary files differnew file mode 100644 index 000000000..8e44080f3 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/index diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/info/exclude b/tests-clar/resources/push_src/.gitted/modules/submodule/info/exclude new file mode 100644 index 000000000..a5196d1be --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/logs/HEAD b/tests-clar/resources/push_src/.gitted/modules/submodule/logs/HEAD new file mode 100644 index 000000000..aedcdf295 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/logs/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Congyi Wu <congyiwu@gmail.com> 1352923205 -0500	clone: from m:/dd/libgit2/tests-clar/resources/testrepo.git diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/logs/refs/heads/master b/tests-clar/resources/push_src/.gitted/modules/submodule/logs/refs/heads/master new file mode 100644 index 000000000..aedcdf295 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Congyi Wu <congyiwu@gmail.com> 1352923205 -0500	clone: from m:/dd/libgit2/tests-clar/resources/testrepo.git diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/logs/refs/remotes/origin/HEAD b/tests-clar/resources/push_src/.gitted/modules/submodule/logs/refs/remotes/origin/HEAD new file mode 100644 index 000000000..aedcdf295 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/logs/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Congyi Wu <congyiwu@gmail.com> 1352923205 -0500	clone: from m:/dd/libgit2/tests-clar/resources/testrepo.git diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/08/b041783f40edfe12bb406c9c9a8a040177c125 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/08/b041783f40edfe12bb406c9c9a8a040177c125 Binary files differnew file mode 100644 index 000000000..d1c032fce --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/08/b041783f40edfe12bb406c9c9a8a040177c125 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 Binary files differnew file mode 100644 index 000000000..cedb2a22e --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 Binary files differnew file mode 100644 index 000000000..93a16f146 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/18/10dff58d8a660512d4832e740f692884338ccd b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/18/10dff58d8a660512d4832e740f692884338ccd Binary files differnew file mode 100644 index 000000000..ba0bfb30c --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/18/10dff58d8a660512d4832e740f692884338ccd diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1a/443023183e3f2bfbef8ac923cd81c1018a18fd b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1a/443023183e3f2bfbef8ac923cd81c1018a18fd Binary files differnew file mode 100644 index 000000000..3ec541288 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1a/443023183e3f2bfbef8ac923cd81c1018a18fd diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1b/8cbad43e867676df601306689fe7c3def5e689 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1b/8cbad43e867676df601306689fe7c3def5e689 Binary files differnew file mode 100644 index 000000000..6048d4bad --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1b/8cbad43e867676df601306689fe7c3def5e689 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1f/67fc4386b2d171e0d21be1c447e12660561f9b b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1f/67fc4386b2d171e0d21be1c447e12660561f9b Binary files differnew file mode 100644 index 000000000..225c45734 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/1f/67fc4386b2d171e0d21be1c447e12660561f9b diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/25/8f0e2a959a364e40ed6603d5d44fbb24765b10 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/25/8f0e2a959a364e40ed6603d5d44fbb24765b10 Binary files differnew file mode 100644 index 000000000..cb1ed5712 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/25/8f0e2a959a364e40ed6603d5d44fbb24765b10 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/27/0b8ea76056d5cad83af921837702d3e3c2924d b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/27/0b8ea76056d5cad83af921837702d3e3c2924d Binary files differnew file mode 100644 index 000000000..df40d99af --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/27/0b8ea76056d5cad83af921837702d3e3c2924d diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/2d/59075e0681f540482d4f6223a68e0fef790bc7 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/2d/59075e0681f540482d4f6223a68e0fef790bc7 Binary files differnew file mode 100644 index 000000000..0a1500a6f --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/2d/59075e0681f540482d4f6223a68e0fef790bc7 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/32/59a6bd5b57fb9c1281bb7ed3167b50f224cb54 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/32/59a6bd5b57fb9c1281bb7ed3167b50f224cb54 Binary files differnew file mode 100644 index 000000000..321eaa867 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/32/59a6bd5b57fb9c1281bb7ed3167b50f224cb54 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/36/97d64be941a53d4ae8f6a271e4e3fa56b022cc b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/36/97d64be941a53d4ae8f6a271e4e3fa56b022cc Binary files differnew file mode 100644 index 000000000..9bb5b623b --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/36/97d64be941a53d4ae8f6a271e4e3fa56b022cc diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 Binary files differnew file mode 100644 index 000000000..7ca4ceed5 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 new file mode 100644 index 000000000..8953b6cef --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 @@ -0,0 +1,2 @@ +xQ +0D)6ͦ "xO-FbEo0Ǥ,ske[Pn8R,EpD?g}^3<GhYK8ЖDA);gݧjp4-r;sGA4ۺ=(in7IKFE
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/4b/22b35d44b5a4f589edf3dc89196399771796ea b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/4b/22b35d44b5a4f589edf3dc89196399771796ea Binary files differnew file mode 100644 index 000000000..b4e5aa186 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/4b/22b35d44b5a4f589edf3dc89196399771796ea diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/52/1d87c1ec3aef9824daf6d96cc0ae3710766d91 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/52/1d87c1ec3aef9824daf6d96cc0ae3710766d91 Binary files differnew file mode 100644 index 000000000..351cff823 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/52/1d87c1ec3aef9824daf6d96cc0ae3710766d91 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 new file mode 100644 index 000000000..c1f22c54f --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 @@ -0,0 +1,2 @@ +x	1ENi@k2 "X$YW0YcÅszMD08!sXgd::@X0Pw"F/RUzmZZV}|/o5I!1z:vUim}/> +F-
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a Binary files differnew file mode 100644 index 000000000..2ef4faa0f --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/76/3d71aadf09a7951596c9746c024e7eece7c7af b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/76/3d71aadf09a7951596c9746c024e7eece7c7af new file mode 100644 index 000000000..716b0c64b --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/76/3d71aadf09a7951596c9746c024e7eece7c7af @@ -0,0 +1 @@ +xAj!?009o}H6}jUPPZ&Y AԛpFdpz[fYPqLJ.,Z`Ů.`vq
$5+9Ot>/DE/龡W*eVdf1>覭ěʙFThk.i^0?PR,
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/7b/4384978d2493e851f9cca7858815fac9b10980 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/7b/4384978d2493e851f9cca7858815fac9b10980 Binary files differnew file mode 100644 index 000000000..23c462f34 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/7b/4384978d2493e851f9cca7858815fac9b10980 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/81/4889a078c031f61ed08ab5fa863aea9314344d b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/81/4889a078c031f61ed08ab5fa863aea9314344d Binary files differnew file mode 100644 index 000000000..2f9b6b6e3 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/81/4889a078c031f61ed08ab5fa863aea9314344d diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/84/96071c1b46c854b31185ea97743be6a8774479 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/84/96071c1b46c854b31185ea97743be6a8774479 Binary files differnew file mode 100644 index 000000000..5df58dda5 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/84/96071c1b46c854b31185ea97743be6a8774479 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/84/9a5e34a26815e821f865b8479f5815a47af0fe b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/84/9a5e34a26815e821f865b8479f5815a47af0fe new file mode 100644 index 000000000..71019a636 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/84/9a5e34a26815e821f865b8479f5815a47af0fe @@ -0,0 +1,2 @@ +xM F]s41x(IKݽ/_P@!8)es +	N&FGSƄh{+CZzvF7Z-kx\[P8GK/^l>.4
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/94/4c0f6e4dfa41595e6eb3ceecdb14f50fe18162 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/94/4c0f6e4dfa41595e6eb3ceecdb14f50fe18162 new file mode 100644 index 000000000..4cc3f4dff --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/94/4c0f6e4dfa41595e6eb3ceecdb14f50fe18162 @@ -0,0 +1 @@ +x+)JMU044b040031QrutueXlmmAṃJ}G;UTWRQ`6Kǥ^/-*|W3Py`%E\&g|0{Ӎ1X
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9a/03079b8a8ee85a0bee58bf9be3da8b62414ed4 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9a/03079b8a8ee85a0bee58bf9be3da8b62414ed4 Binary files differnew file mode 100644 index 000000000..bf7b2bb68 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9a/03079b8a8ee85a0bee58bf9be3da8b62414ed4 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9f/13f7d0a9402c681f91dc590cf7b5470e6a77d2 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9f/13f7d0a9402c681f91dc590cf7b5470e6a77d2 new file mode 100644 index 000000000..7f1cfb23c --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9f/13f7d0a9402c681f91dc590cf7b5470e6a77d2 @@ -0,0 +1,2 @@ +xM +0F]d2<A~&`Vmҡ7U$JL9yM!GuH&U>;XEȎ5R AE&n}Z<E}=O[Ӽ^,^#ɿ]P`>A
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a new file mode 100644 index 000000000..a79612435 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a @@ -0,0 +1,3 @@ +x[ +0E*fդ "W0-Ft݁pS[Yx^ +Db	CLhut}8X*4ZsYUA
X3RM) s6輢Mរ&Jm;}<\@ޏpĀv?jۺL?H
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f new file mode 100644 index 000000000..f8588696b --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f @@ -0,0 +1,2 @@ +x;j1Dmdǎ|M3`V{>QvL0I?!4Z=!צ8F!rsQy9]$D&l6A>jFWҵIKNiZ%S +	U~̽>'	w
[DGڡQ-M>dO}\8g_ШoYr
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a6/5fedf39aefe402d3bb6e24df4d4f5fe4547750 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a6/5fedf39aefe402d3bb6e24df4d4f5fe4547750 new file mode 100644 index 000000000..29c8e824d --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a6/5fedf39aefe402d3bb6e24df4d4f5fe4547750 @@ -0,0 +1,3 @@ +xQ +!@sBQ"	ٱ
r{<xƪ +HlJSer!ZPTe*jUEo^2(XSEDO<Yj$2s_&},}[~p7~<:	Zp?1_C0
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd Binary files differnew file mode 100644 index 000000000..d0d7e736e --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 Binary files differnew file mode 100644 index 000000000..18a7f61c2 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/ae/90f12eea699729ed24555e40b9fd669da12a12 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/ae/90f12eea699729ed24555e40b9fd669da12a12 Binary files differnew file mode 100644 index 000000000..d95254674 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/ae/90f12eea699729ed24555e40b9fd669da12a12 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 new file mode 100644 index 000000000..f460f2547 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 @@ -0,0 +1,2 @@ +xA +0a9I	p'1Ѷv\x{cVpvWgǎ0x[]"g#{rD
Cot N U$?9-p+1^Qx9O\C	m'D
{mV(+l,
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/b6/361fc6a97178d8fc8639fdeed71c775ab52593 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/b6/361fc6a97178d8fc8639fdeed71c775ab52593 Binary files differnew file mode 100644 index 000000000..f613670e2 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/b6/361fc6a97178d8fc8639fdeed71c775ab52593 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 new file mode 100644 index 000000000..0817229bc --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 @@ -0,0 +1,3 @@ +xKj1D)zUB-0uV9<#+W<J&8/seȕKJS +Rv{QrYQN$H\E=6X5K Fr)(dCΆjs}9c-w8o\rI: +l}FW$DsǣٚOWe]V8-Ý"U
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd new file mode 100644 index 000000000..75f541f10 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd @@ -0,0 +1,3 @@ +xQ +0D)ʦI<'lR+FjEo0<xha ]șXUlPF)z4y,\r	'S-mI4 +Xh&F}n+\Y-p|鷜oUz;-alt{?I,:oRcHK
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d0/7b0f9a8c89f1d9e74dc4fce6421dec5ef8a659 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d0/7b0f9a8c89f1d9e74dc4fce6421dec5ef8a659 Binary files differnew file mode 100644 index 000000000..f3b46b3ca --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d0/7b0f9a8c89f1d9e74dc4fce6421dec5ef8a659 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d6/c93164c249c8000205dd4ec5cbca1b516d487f b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d6/c93164c249c8000205dd4ec5cbca1b516d487f Binary files differnew file mode 100644 index 000000000..a67d6e647 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d6/c93164c249c8000205dd4ec5cbca1b516d487f diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d7/1aab4f9b04b45ce09bcaa636a9be6231474759 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d7/1aab4f9b04b45ce09bcaa636a9be6231474759 Binary files differnew file mode 100644 index 000000000..2d47e6faf --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/d7/1aab4f9b04b45ce09bcaa636a9be6231474759 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 Binary files differnew file mode 100644 index 000000000..711223894 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/e7/b4ad382349ff96dd8199000580b9b1e2042eb0 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/e7/b4ad382349ff96dd8199000580b9b1e2042eb0 Binary files differnew file mode 100644 index 000000000..b135eccda --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/e7/b4ad382349ff96dd8199000580b9b1e2042eb0 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/f1/425cef211cc08caa31e7b545ffb232acb098c3 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/f1/425cef211cc08caa31e7b545ffb232acb098c3 Binary files differnew file mode 100644 index 000000000..82e2790e8 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/f1/425cef211cc08caa31e7b545ffb232acb098c3 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 Binary files differnew file mode 100644 index 000000000..697c94c92 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fa/49b077972391ad58037050f2a75f74e3671e92 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fa/49b077972391ad58037050f2a75f74e3671e92 Binary files differnew file mode 100644 index 000000000..112998d42 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fa/49b077972391ad58037050f2a75f74e3671e92 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fd/093bff70906175335656e6ce6ae05783708765 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fd/093bff70906175335656e6ce6ae05783708765 Binary files differnew file mode 100644 index 000000000..12bf5f3e3 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fd/093bff70906175335656e6ce6ae05783708765 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fd/4959ce7510db09d4d8217fa2d1780413e05a09 b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fd/4959ce7510db09d4d8217fa2d1780413e05a09 Binary files differnew file mode 100644 index 000000000..158aef21f --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/fd/4959ce7510db09d4d8217fa2d1780413e05a09 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx Binary files differnew file mode 100644 index 000000000..5068f2818 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack Binary files differnew file mode 100644 index 000000000..a6a1f3020 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx Binary files differnew file mode 100644 index 000000000..94c3c71da --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack Binary files differnew file mode 100644 index 000000000..74c7fe4f3 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx Binary files differnew file mode 100644 index 000000000..555cfa977 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack Binary files differnew file mode 100644 index 000000000..4d539ed0a --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/packed-refs b/tests-clar/resources/push_src/.gitted/modules/submodule/packed-refs new file mode 100644 index 000000000..506a8607c --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/packed-refs @@ -0,0 +1,24 @@ +# pack-refs with: peeled  +a4a7dce85cf63874e984719f4fdd239f5145052f refs/remotes/origin/br2 +a4a7dce85cf63874e984719f4fdd239f5145052f refs/remotes/origin/cannot-fetch +e90810b8df3e80c413d903f631643c716887138d refs/remotes/origin/chomped +258f0e2a959a364e40ed6603d5d44fbb24765b10 refs/remotes/origin/haacked +a65fedf39aefe402d3bb6e24df4d4f5fe4547750 refs/remotes/origin/master +a65fedf39aefe402d3bb6e24df4d4f5fe4547750 refs/remotes/origin/not-good +41bc8c69075bbdb46c5c6f0566cc8cc5b46e8bd9 refs/remotes/origin/packed +4a202b346bb0fb0db7eff3cffeb3c70babbd2045 refs/remotes/origin/packed-test +763d71aadf09a7951596c9746c024e7eece7c7af refs/remotes/origin/subtrees +e90810b8df3e80c413d903f631643c716887138d refs/remotes/origin/test +9fd738e8f7967c078dceed8190330fc8648ee56a refs/remotes/origin/track-local +e90810b8df3e80c413d903f631643c716887138d refs/remotes/origin/trailing +521d87c1ec3aef9824daf6d96cc0ae3710766d91 refs/tags/annotated_tag_to_blob +^1385f264afb75a56a5bec74243be9b367ba4ca08 +7b4384978d2493e851f9cca7858815fac9b10980 refs/tags/e90810b +^e90810b8df3e80c413d903f631643c716887138d +849a5e34a26815e821f865b8479f5815a47af0fe refs/tags/hard_tag +^a65fedf39aefe402d3bb6e24df4d4f5fe4547750 +1385f264afb75a56a5bec74243be9b367ba4ca08 refs/tags/point_to_blob +b25fa35b38051e4ae45d4222e795f9df2e43f1d1 refs/tags/test +^e90810b8df3e80c413d903f631643c716887138d +849a5e34a26815e821f865b8479f5815a47af0fe refs/tags/wrapped_tag +^a65fedf39aefe402d3bb6e24df4d4f5fe4547750 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/refs/heads/master b/tests-clar/resources/push_src/.gitted/modules/submodule/refs/heads/master new file mode 100644 index 000000000..3d8f0a402 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/refs/heads/master @@ -0,0 +1 @@ +a65fedf39aefe402d3bb6e24df4d4f5fe4547750 diff --git a/tests-clar/resources/push_src/.gitted/modules/submodule/refs/remotes/origin/HEAD b/tests-clar/resources/push_src/.gitted/modules/submodule/refs/remotes/origin/HEAD new file mode 100644 index 000000000..6efe28fff --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/modules/submodule/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/tests-clar/resources/push_src/.gitted/objects/08/585692ce06452da6f82ae66b90d98b55536fca b/tests-clar/resources/push_src/.gitted/objects/08/585692ce06452da6f82ae66b90d98b55536fca new file mode 100644 index 000000000..39d126b2b --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/08/585692ce06452da6f82ae66b90d98b55536fca @@ -0,0 +1 @@ +x+)JMU06f040031QH+(a!h;AE3Z*
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/objects/27/b7ce66243eb1403862d05f958c002312df173d b/tests-clar/resources/push_src/.gitted/objects/27/b7ce66243eb1403862d05f958c002312df173d new file mode 100644 index 000000000..01d63b5c4 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/27/b7ce66243eb1403862d05f958c002312df173d @@ -0,0 +1,4 @@ +xM +0F]sti<7тmxwKe +D."mr1@9>RȞyE +
mH&Er7S!*u΄2>#\V8|Gt-ybhFU/J-|M}W+GK
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/objects/28/905c54ea45a4bed8d7b90f51bd8bd81eec8840 b/tests-clar/resources/push_src/.gitted/objects/28/905c54ea45a4bed8d7b90f51bd8bd81eec8840 Binary files differnew file mode 100644 index 000000000..dc10f6831 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/28/905c54ea45a4bed8d7b90f51bd8bd81eec8840 diff --git a/tests-clar/resources/push_src/.gitted/objects/36/6226fb970ac0caa9d3f55967ab01334a548f60 b/tests-clar/resources/push_src/.gitted/objects/36/6226fb970ac0caa9d3f55967ab01334a548f60 Binary files differnew file mode 100644 index 000000000..45c4d9208 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/36/6226fb970ac0caa9d3f55967ab01334a548f60 diff --git a/tests-clar/resources/push_src/.gitted/objects/5c/0bb3d1b9449d1cc69d7519fd05166f01840915 b/tests-clar/resources/push_src/.gitted/objects/5c/0bb3d1b9449d1cc69d7519fd05166f01840915 Binary files differnew file mode 100644 index 000000000..883182138 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/5c/0bb3d1b9449d1cc69d7519fd05166f01840915 diff --git a/tests-clar/resources/push_src/.gitted/objects/61/780798228d17af2d34fce4cfbdf35556832472 b/tests-clar/resources/push_src/.gitted/objects/61/780798228d17af2d34fce4cfbdf35556832472 Binary files differnew file mode 100644 index 000000000..586bf17a4 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/61/780798228d17af2d34fce4cfbdf35556832472 diff --git a/tests-clar/resources/push_src/.gitted/objects/64/fd55f9b6390202db5e5666fd1fb339089fba4d b/tests-clar/resources/push_src/.gitted/objects/64/fd55f9b6390202db5e5666fd1fb339089fba4d Binary files differnew file mode 100644 index 000000000..bcaaa91c2 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/64/fd55f9b6390202db5e5666fd1fb339089fba4d diff --git a/tests-clar/resources/push_src/.gitted/objects/78/981922613b2afb6025042ff6bd878ac1994e85 b/tests-clar/resources/push_src/.gitted/objects/78/981922613b2afb6025042ff6bd878ac1994e85 Binary files differnew file mode 100644 index 000000000..e814d07b0 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/78/981922613b2afb6025042ff6bd878ac1994e85 diff --git a/tests-clar/resources/push_src/.gitted/objects/95/1bbbb90e2259a4c8950db78946784fb53fcbce b/tests-clar/resources/push_src/.gitted/objects/95/1bbbb90e2259a4c8950db78946784fb53fcbce new file mode 100644 index 000000000..596cd43de --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/95/1bbbb90e2259a4c8950db78946784fb53fcbce @@ -0,0 +1,2 @@ +x[J0}*f2$Eim +\8:DfZ&65^,%lm١~;KJRXT蕄(!{¯DZqPqsPӈB\;EEgs`IeoE(YMFC9uu>|#?i.qD90FEENzܶ<\,\a_a.gd
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/objects/a7/8705c3b2725f931d3ee05348d83cc26700f247 b/tests-clar/resources/push_src/.gitted/objects/a7/8705c3b2725f931d3ee05348d83cc26700f247 Binary files differnew file mode 100644 index 000000000..6ad835e86 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/a7/8705c3b2725f931d3ee05348d83cc26700f247 diff --git a/tests-clar/resources/push_src/.gitted/objects/b4/e1f2b375a64c1ccd40c5ff6aa8bc96839ba4fd b/tests-clar/resources/push_src/.gitted/objects/b4/e1f2b375a64c1ccd40c5ff6aa8bc96839ba4fd Binary files differnew file mode 100644 index 000000000..4e650aaa1 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/b4/e1f2b375a64c1ccd40c5ff6aa8bc96839ba4fd diff --git a/tests-clar/resources/push_src/.gitted/objects/c1/0409136a7a75e025fa502a1b2fd7b62b77d279 b/tests-clar/resources/push_src/.gitted/objects/c1/0409136a7a75e025fa502a1b2fd7b62b77d279 Binary files differnew file mode 100644 index 000000000..fcb2b32f3 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/c1/0409136a7a75e025fa502a1b2fd7b62b77d279 diff --git a/tests-clar/resources/push_src/.gitted/objects/cd/881f90f2933db2e4cc26b8c71fe6037ac7fe4c b/tests-clar/resources/push_src/.gitted/objects/cd/881f90f2933db2e4cc26b8c71fe6037ac7fe4c Binary files differnew file mode 100644 index 000000000..ad4272638 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/cd/881f90f2933db2e4cc26b8c71fe6037ac7fe4c diff --git a/tests-clar/resources/push_src/.gitted/objects/d9/b63a88223d8367516f50bd131a5f7349b7f3e4 b/tests-clar/resources/push_src/.gitted/objects/d9/b63a88223d8367516f50bd131a5f7349b7f3e4 new file mode 100644 index 000000000..b471e2155 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/d9/b63a88223d8367516f50bd131a5f7349b7f3e4 @@ -0,0 +1,2 @@ +xA +0E]sd$ "xi2ՂmzwSErgj
![͎%wbY(zC/G\tw({r$C`Y[=DCu&V8!s=]8ޛT#|;ltWhfM}UQDM
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/objects/dc/ab83249f6f9d1ed735d651352a80519339b591 b/tests-clar/resources/push_src/.gitted/objects/dc/ab83249f6f9d1ed735d651352a80519339b591 Binary files differnew file mode 100644 index 000000000..9f6b1502f --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/dc/ab83249f6f9d1ed735d651352a80519339b591 diff --git a/tests-clar/resources/push_src/.gitted/objects/f7/8a3106c85fb549c65198b2a2086276c6174928 b/tests-clar/resources/push_src/.gitted/objects/f7/8a3106c85fb549c65198b2a2086276c6174928 Binary files differnew file mode 100644 index 000000000..b9813576d --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/f7/8a3106c85fb549c65198b2a2086276c6174928 diff --git a/tests-clar/resources/push_src/.gitted/objects/f8/f7aefc2900a3d737cea9eee45729fd55761e1a b/tests-clar/resources/push_src/.gitted/objects/f8/f7aefc2900a3d737cea9eee45729fd55761e1a Binary files differnew file mode 100644 index 000000000..888354fc2 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/f8/f7aefc2900a3d737cea9eee45729fd55761e1a diff --git a/tests-clar/resources/push_src/.gitted/objects/fa/38b91f199934685819bea316186d8b008c52a2 b/tests-clar/resources/push_src/.gitted/objects/fa/38b91f199934685819bea316186d8b008c52a2 new file mode 100644 index 000000000..13d9bca20 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/fa/38b91f199934685819bea316186d8b008c52a2 @@ -0,0 +1,2 @@ +xJ15>urrneo{f[)_DmIi7 +7Ĩ8ꔌ.n܃W)_T;x,(li[D\K墓XΓP?>W~|_Wؤxs6IcJNP}~-מ/GX
\ No newline at end of file diff --git a/tests-clar/resources/push_src/.gitted/objects/ff/fe95c7fd0a37fa2ed702f8f93b56b2196b3925 b/tests-clar/resources/push_src/.gitted/objects/ff/fe95c7fd0a37fa2ed702f8f93b56b2196b3925 Binary files differnew file mode 100644 index 000000000..1cdc048c0 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/ff/fe95c7fd0a37fa2ed702f8f93b56b2196b3925 diff --git a/tests-clar/resources/push_src/.gitted/objects/pack/dummy b/tests-clar/resources/push_src/.gitted/objects/pack/dummy new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/objects/pack/dummy diff --git a/tests-clar/resources/push_src/.gitted/refs/heads/b1 b/tests-clar/resources/push_src/.gitted/refs/heads/b1 new file mode 100644 index 000000000..afadf9d26 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/refs/heads/b1 @@ -0,0 +1 @@ +a78705c3b2725f931d3ee05348d83cc26700f247 diff --git a/tests-clar/resources/push_src/.gitted/refs/heads/b2 b/tests-clar/resources/push_src/.gitted/refs/heads/b2 new file mode 100644 index 000000000..afadf9d26 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/refs/heads/b2 @@ -0,0 +1 @@ +a78705c3b2725f931d3ee05348d83cc26700f247 diff --git a/tests-clar/resources/push_src/.gitted/refs/heads/b3 b/tests-clar/resources/push_src/.gitted/refs/heads/b3 new file mode 100644 index 000000000..3056bb436 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/refs/heads/b3 @@ -0,0 +1 @@ +d9b63a88223d8367516f50bd131a5f7349b7f3e4 diff --git a/tests-clar/resources/push_src/.gitted/refs/heads/b4 b/tests-clar/resources/push_src/.gitted/refs/heads/b4 new file mode 100644 index 000000000..efed6f064 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/refs/heads/b4 @@ -0,0 +1 @@ +27b7ce66243eb1403862d05f958c002312df173d diff --git a/tests-clar/resources/push_src/.gitted/refs/heads/b5 b/tests-clar/resources/push_src/.gitted/refs/heads/b5 new file mode 100644 index 000000000..cf313ad05 --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/refs/heads/b5 @@ -0,0 +1 @@ +fa38b91f199934685819bea316186d8b008c52a2 diff --git a/tests-clar/resources/push_src/.gitted/refs/heads/b6 b/tests-clar/resources/push_src/.gitted/refs/heads/b6 new file mode 100644 index 000000000..711e466ae --- /dev/null +++ b/tests-clar/resources/push_src/.gitted/refs/heads/b6 @@ -0,0 +1 @@ +951bbbb90e2259a4c8950db78946784fb53fcbce diff --git a/tests-clar/resources/push_src/a.txt b/tests-clar/resources/push_src/a.txt new file mode 100644 index 000000000..f7eac1c51 --- /dev/null +++ b/tests-clar/resources/push_src/a.txt @@ -0,0 +1,2 @@ +a
 +edit
 diff --git a/tests-clar/resources/push_src/fold/b.txt b/tests-clar/resources/push_src/fold/b.txt new file mode 100644 index 000000000..617807982 --- /dev/null +++ b/tests-clar/resources/push_src/fold/b.txt @@ -0,0 +1 @@ +b diff --git a/tests-clar/resources/push_src/foldb.txt b/tests-clar/resources/push_src/foldb.txt new file mode 100644 index 000000000..5b38718be --- /dev/null +++ b/tests-clar/resources/push_src/foldb.txt @@ -0,0 +1 @@ +edit
 diff --git a/tests-clar/resources/push_src/gitmodules b/tests-clar/resources/push_src/gitmodules new file mode 100644 index 000000000..f1734dfc1 --- /dev/null +++ b/tests-clar/resources/push_src/gitmodules @@ -0,0 +1,3 @@ +[submodule "submodule"]
 +	path = submodule
 +	url = ../testrepo.git
 diff --git a/tests-clar/resources/push_src/submodule/.gitted b/tests-clar/resources/push_src/submodule/.gitted new file mode 100644 index 000000000..3ffcf960a --- /dev/null +++ b/tests-clar/resources/push_src/submodule/.gitted @@ -0,0 +1 @@ +gitdir: ../.git/modules/submodule diff --git a/tests-clar/resources/push_src/submodule/README b/tests-clar/resources/push_src/submodule/README new file mode 100644 index 000000000..ca8c64728 --- /dev/null +++ b/tests-clar/resources/push_src/submodule/README @@ -0,0 +1 @@ +hey there
 diff --git a/tests-clar/resources/push_src/submodule/branch_file.txt b/tests-clar/resources/push_src/submodule/branch_file.txt new file mode 100644 index 000000000..a26902575 --- /dev/null +++ b/tests-clar/resources/push_src/submodule/branch_file.txt @@ -0,0 +1,2 @@ +hi
 +bye!
 diff --git a/tests-clar/resources/push_src/submodule/new.txt b/tests-clar/resources/push_src/submodule/new.txt new file mode 100644 index 000000000..8e0884e36 --- /dev/null +++ b/tests-clar/resources/push_src/submodule/new.txt @@ -0,0 +1 @@ +my new file
  | 
