Skip to content

Commit fcbbe1b

Browse files
author
Vicent Marti
committed
Merge pull request libgit2#2166 from ethomson/giterr_restore
clone: don't overwrite original error message
2 parents 451aaf8 + 1df8ad0 commit fcbbe1b

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/clone.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,10 +430,15 @@ int git_clone(
430430
}
431431

432432
if (error != 0) {
433+
git_error_state last_error = {0};
434+
giterr_capture(&last_error, error);
435+
433436
git_repository_free(repo);
434437
repo = NULL;
435438

436439
(void)git_futils_rmdir_r(local_path, NULL, rmdir_flags);
440+
441+
giterr_restore(&last_error);
437442
}
438443

439444
*out = repo;

tests/core/errors.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,27 @@ void test_core_errors__new_school(void)
8585

8686
giterr_clear();
8787
}
88+
89+
void test_core_errors__restore(void)
90+
{
91+
git_error_state err_state = {0};
92+
93+
giterr_clear();
94+
cl_assert(giterr_last() == NULL);
95+
96+
cl_assert_equal_i(0, giterr_capture(&err_state, 0));
97+
98+
memset(&err_state, 0x0, sizeof(git_error_state));
99+
100+
giterr_set(42, "Foo: %s", "bar");
101+
cl_assert_equal_i(-1, giterr_capture(&err_state, -1));
102+
103+
cl_assert(giterr_last() == NULL);
104+
105+
giterr_set(99, "Bar: %s", "foo");
106+
107+
giterr_restore(&err_state);
108+
109+
cl_assert_equal_i(42, giterr_last()->klass);
110+
cl_assert_equal_s("Foo: bar", giterr_last()->message);
111+
}

0 commit comments

Comments
 (0)