Commit 970c3c71cefd764857a57b6d9f04e147ec3114b6

Edward Thomson 2022-02-26T13:24:23

Merge pull request #6234 from libgit2/ethomson/v1.4.2 v1.4.2

diff --git a/include/git2/version.h b/include/git2/version.h
index 1c55277..192ef9f 100644
--- a/include/git2/version.h
+++ b/include/git2/version.h
@@ -7,10 +7,10 @@
 #ifndef INCLUDE_git_version_h__
 #define INCLUDE_git_version_h__
 
-#define LIBGIT2_VERSION "1.4.1"
+#define LIBGIT2_VERSION "1.4.2"
 #define LIBGIT2_VER_MAJOR 1
 #define LIBGIT2_VER_MINOR 4
-#define LIBGIT2_VER_REVISION 1
+#define LIBGIT2_VER_REVISION 2
 #define LIBGIT2_VER_PATCH 0
 
 #define LIBGIT2_SOVERSION "1.4"
diff --git a/src/remote.c b/src/remote.c
index 038afc6..f6421b9 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -1852,7 +1852,7 @@ static int update_one_tip(
 	}
 
 	if (callbacks && callbacks->update_tips != NULL &&
-	    callbacks->update_tips(refname.ptr, &old, &head->oid, callbacks->payload) < 0)
+	    (error = callbacks->update_tips(refname.ptr, &old, &head->oid, callbacks->payload)) < 0)
 		git_error_set_after_callback_function(error, "git_remote_fetch");
 
 done:
diff --git a/src/win32/findfile.c b/src/win32/findfile.c
index 516391d..725a901 100644
--- a/src/win32/findfile.c
+++ b/src/win32/findfile.c
@@ -222,7 +222,7 @@ int git_win32__find_system_dirs(git_str *out, const char *subdir)
 	has_regdir = (find_sysdir_in_registry(regdir) == 0);
 
 	if (!has_pathdir && !has_regdir)
-		return GIT_ENOTFOUND;
+		return 0;
 
 	/*
 	 * Usually the git in the path is the same git in the registry,
diff --git a/tests/network/fetchlocal.c b/tests/network/fetchlocal.c
index c54f454..dc37c38 100644
--- a/tests/network/fetchlocal.c
+++ b/tests/network/fetchlocal.c
@@ -509,3 +509,44 @@ void test_network_fetchlocal__prune_load_fetch_prune_config(void)
 	git_remote_free(origin);
 	git_repository_free(repo);
 }
+
+static int update_tips_error(const char *ref, const git_oid *old, const git_oid *new, void *data)
+{
+	int *callcount = (int *) data;
+
+	GIT_UNUSED(ref);
+	GIT_UNUSED(old);
+	GIT_UNUSED(new);
+
+	(*callcount)++;
+
+	return -1;
+}
+
+void test_network_fetchlocal__update_tips_error_is_propagated(void)
+{
+	git_repository *repo;
+	git_reference_iterator *iterator;
+	git_reference *ref;
+	git_remote *remote;
+	git_fetch_options options = GIT_FETCH_OPTIONS_INIT;
+	int callcount = 0;
+
+	cl_git_pass(git_repository_init(&repo, "foo.git", true));
+	cl_set_cleanup(cleanup_local_repo, "foo.git");
+
+	cl_git_pass(git_remote_create_with_fetchspec(&remote, repo, "origin", cl_git_fixture_url("testrepo.git"), "+refs/heads/*:refs/remotes/update-tips/*"));
+
+	options.callbacks.update_tips = update_tips_error;
+	options.callbacks.payload = &callcount;
+
+	cl_git_fail(git_remote_fetch(remote, NULL, &options, NULL));
+	cl_assert_equal_i(1, callcount);
+
+	cl_git_pass(git_reference_iterator_glob_new(&iterator, repo, "refs/remotes/update-tips/**/"));
+	cl_assert_equal_i(GIT_ITEROVER, git_reference_next(&ref, iterator));
+
+	git_reference_iterator_free(iterator);
+	git_remote_free(remote);
+	git_repository_free(repo);
+}
diff --git a/tests/win32/systemdir.c b/tests/win32/systemdir.c
index 46fa06a..52c1784 100644
--- a/tests/win32/systemdir.c
+++ b/tests/win32/systemdir.c
@@ -326,3 +326,13 @@ void test_win32_systemdir__prefers_path_to_registry(void)
 	git_config_free(cfg);
 #endif
 }
+
+void test_win32_systemdir__no_git_installed(void)
+{
+#ifdef GIT_WIN32
+	git_str out = GIT_STR_INIT;
+
+	cl_git_pass(git_win32__find_system_dirs(&out, "etc"));
+	cl_assert_equal_s(out.ptr, "");
+#endif
+}