From 4adc64a81ae4d1ddb32c3232f04255f5b96d1971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sun, 14 Dec 2014 21:24:46 +0100 Subject: [PATCH] fetch: plug leaks in the prune tests --- tests/network/fetchlocal.c | 52 +++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/tests/network/fetchlocal.c b/tests/network/fetchlocal.c index 88253391f..02d12e054 100644 --- a/tests/network/fetchlocal.c +++ b/tests/network/fetchlocal.c @@ -21,6 +21,11 @@ static void cleanup_local_repo(void *path) cl_fixture_cleanup((char *)path); } +void test_network_fetchlocal__cleanup(void) +{ + cl_git_sandbox_cleanup(); +} + void test_network_fetchlocal__complete(void) { git_repository *repo; @@ -111,7 +116,6 @@ void test_network_fetchlocal__prune(void) git_strarray_free(&refnames); git_remote_free(origin); - git_repository_free(remote_repo); git_repository_free(repo); } @@ -126,6 +130,14 @@ int update_tips_fail_on_call(const char *ref, const git_oid *old, const git_oid return 0; } +void assert_ref_exists(git_repository *repo, const char *name) +{ + git_reference *ref; + + cl_git_pass(git_reference_lookup(&ref, repo, name)); + git_reference_free(ref); +} + void test_network_fetchlocal__prune_overlapping(void) { git_repository *repo; @@ -133,8 +145,8 @@ void test_network_fetchlocal__prune_overlapping(void) int callcount = 0; git_strarray refnames = {0}; git_reference *ref; - git_object *obj; git_config *config; + git_oid target; git_repository *remote_repo = cl_git_sandbox_init("testrepo.git"); const char *url = cl_git_path_url(git_repository_path(remote_repo)); @@ -143,8 +155,11 @@ void test_network_fetchlocal__prune_overlapping(void) callbacks.transfer_progress = transfer_cb; callbacks.payload = &callcount; - cl_git_pass(git_revparse_single(&obj, remote_repo, "master")); - cl_git_pass(git_reference_create(&ref, remote_repo, "refs/pull/42/head", git_object_id(obj), 1, NULL, NULL)); + cl_git_pass(git_reference_lookup(&ref, remote_repo, "refs/heads/master")); + git_oid_cpy(&target, git_reference_target(ref)); + git_reference_free(ref); + cl_git_pass(git_reference_create(&ref, remote_repo, "refs/pull/42/head", &target, 1, NULL, NULL)); + git_reference_free(ref); cl_set_cleanup(&cleanup_local_repo, "foo"); cl_git_pass(git_repository_init(&repo, "foo", true)); @@ -156,46 +171,46 @@ void test_network_fetchlocal__prune_overlapping(void) cl_git_pass(git_config_set_bool(config, "remote.origin.prune", true)); cl_git_pass(git_config_set_multivar(config, "remote.origin.fetch", "^$", "refs/pull/*/head:refs/remotes/origin/pr/*")); + git_remote_free(origin); cl_git_pass(git_remote_lookup(&origin, repo, GIT_REMOTE_ORIGIN)); git_remote_set_callbacks(origin, &callbacks); cl_git_pass(git_remote_fetch(origin, NULL, NULL, NULL)); - cl_git_pass(git_revparse_single(&obj, repo, "origin/master")); - cl_git_pass(git_revparse_single(&obj, repo, "origin/pr/42")); + assert_ref_exists(repo, "refs/remotes/origin/master"); + assert_ref_exists(repo, "refs/remotes/origin/pr/42"); cl_git_pass(git_reference_list(&refnames, repo)); cl_assert_equal_i(20, (int)refnames.count); + git_strarray_free(&refnames); cl_git_pass(git_config_delete_multivar(config, "remote.origin.fetch", "refs")); cl_git_pass(git_config_set_multivar(config, "remote.origin.fetch", "^$", "refs/pull/*/head:refs/remotes/origin/pr/*")); cl_git_pass(git_config_set_multivar(config, "remote.origin.fetch", "^$", "refs/heads/*:refs/remotes/origin/*")); + git_remote_free(origin); cl_git_pass(git_remote_lookup(&origin, repo, GIT_REMOTE_ORIGIN)); callbacks.update_tips = update_tips_fail_on_call; git_remote_set_callbacks(origin, &callbacks); cl_git_pass(git_remote_fetch(origin, NULL, NULL, NULL)); - cl_git_pass(git_revparse_single(&obj, repo, "origin/master")); - cl_git_pass(git_revparse_single(&obj, repo, "origin/pr/42")); + assert_ref_exists(repo, "refs/remotes/origin/master"); + assert_ref_exists(repo, "refs/remotes/origin/pr/42"); cl_git_pass(git_reference_list(&refnames, repo)); cl_assert_equal_i(20, (int)refnames.count); + git_strarray_free(&refnames); cl_git_pass(git_config_delete_multivar(config, "remote.origin.fetch", "refs")); cl_git_pass(git_config_set_multivar(config, "remote.origin.fetch", "^$", "refs/heads/*:refs/remotes/origin/*")); cl_git_pass(git_config_set_multivar(config, "remote.origin.fetch", "^$", "refs/pull/*/head:refs/remotes/origin/pr/*")); + + git_remote_free(origin); cl_git_pass(git_remote_lookup(&origin, repo, GIT_REMOTE_ORIGIN)); callbacks.update_tips = update_tips_fail_on_call; git_remote_set_callbacks(origin, &callbacks); cl_git_pass(git_remote_fetch(origin, NULL, NULL, NULL)); - cl_git_pass(git_reference_delete(ref)); - cl_git_pass(git_config_delete_multivar(config, "remote.origin.fetch", "refs")); - cl_git_pass(git_config_set_multivar(config, "remote.origin.fetch", "^$", "refs/heads/*:refs/remotes/origin/*")); - - git_object_free(obj); git_config_free(config); git_strarray_free(&refnames); git_remote_free(origin); - git_repository_free(remote_repo); git_repository_free(repo); } @@ -258,7 +273,6 @@ void test_network_fetchlocal__fetchprune(void) git_strarray_free(&refnames); git_remote_free(origin); - git_repository_free(remote_repo); git_repository_free(repo); } @@ -286,10 +300,12 @@ void test_network_fetchlocal__prune_tag(void) cl_git_pass(git_remote_create(&origin, repo, GIT_REMOTE_ORIGIN, url)); git_remote_set_callbacks(origin, &callbacks); cl_git_pass(git_remote_fetch(origin, NULL, NULL, NULL)); + git_remote_free(origin); cl_git_pass(git_revparse_single(&obj, repo, "origin/master")); cl_git_pass(git_reference_create(&ref, repo, "refs/remotes/origin/fake-remote", git_object_id(obj), 1, NULL, NULL)); + git_reference_free(ref); /* create signature */ cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60)); @@ -298,6 +314,7 @@ void test_network_fetchlocal__prune_tag(void) git_tag_create(&tag_id, repo, "some-tag", obj, tagger, tagger_message, 0) ); + git_signature_free(tagger); cl_git_pass(git_repository_config(&config, repo)); cl_git_pass(git_config_set_bool(config, "remote.origin.prune", 1)); @@ -307,13 +324,12 @@ void test_network_fetchlocal__prune_tag(void) git_remote_set_callbacks(origin, &callbacks); cl_git_pass(git_remote_fetch(origin, NULL, NULL, NULL)); - cl_git_pass(git_revparse_single(&obj, repo, "some-tag")); - cl_git_fail(git_revparse_single(&obj, repo, "refs/remotes/origin/fake-remote")); + assert_ref_exists(repo, "refs/tags/some-tag"); + cl_git_fail_with(GIT_ENOTFOUND, git_reference_lookup(&ref, repo, "refs/remotes/origin/fake-remote")); git_object_free(obj); git_remote_free(origin); - git_repository_free(remote_repo); git_repository_free(repo); }