diff --git a/src/refspec.c b/src/refspec.c index 7694be525..48265bcde 100644 --- a/src/refspec.c +++ b/src/refspec.c @@ -107,7 +107,7 @@ int git_refspec_transform_r(git_buf *out, const git_refspec *spec, const char *n return GIT_SUCCESS; git_buf_truncate(out, out->size - 1); /* remove trailing '*' */ - git_buf_puts(out, name); + git_buf_puts(out, name + strlen(spec->src) - 1); return git_buf_lasterror(out); } diff --git a/tests-clar/network/remotes.c b/tests-clar/network/remotes.c index 2abaccb07..a0a940fc9 100644 --- a/tests-clar/network/remotes.c +++ b/tests-clar/network/remotes.c @@ -1,4 +1,6 @@ #include "clar_libgit2.h" +#include "buffer.h" +#include "refspec.h" static git_remote *_remote; static git_repository *_repo; @@ -48,3 +50,11 @@ void test_network_remotes__transform(void) cl_git_pass(git_refspec_transform(ref, sizeof(ref), _refspec, "refs/heads/master")); cl_assert(!strcmp(ref, "refs/remotes/test/master")); } + +void test_network_remotes__transform_r(void) +{ + git_buf buf = GIT_BUF_INIT; + + cl_git_pass(git_refspec_transform_r(&buf, _refspec, "refs/heads/master")); + cl_assert(!strcmp(git_buf_cstr(&buf), "refs/remotes/test/master")); +}