c++clibgit2

libgit2: clear remote refspec(s)


I'm currently facing the following challenge:

I'm in the process of migrating a C++ tool from an older version of libgit2 to the current version (v1.8.0). In the older libgit2 version, there was a convenient function, void git_remote_clear_refspecs(git_remote *remote), which allowed clearing the refspecs associated with a remote repository.

Unfortunately, this function is no longer available in libgit2 v1.8.0. Consequently, I'm now seeking an alternative method to achieve the same goal.

One approach involves determining the number of refspecs associated with a remote using size_t git_remote_refspec_count(const git_remote *remote). With the number of refspecs, I can obtain a const pointer to a specific refspec via const git_refspec * git_remote_get_refspec(const git_remote *remote, size_t n). However, the challenge arises when attempting to utilize the obtained const pointer to call void git_refspec_free(git_refspec *refspec), as it requires a non-const pointer.

Thus, my question is: How can I clear the refspecs of a remote in libgit2 v1.8.0, given these constraints?


Solution

  • It seems that refspecs added to a remote can no longer be removed. However, you can still invoke the git_remote_fetch function, specifying a refspec to be used exclusively for the fetch operation. If no refspec is provided, the configured refspecs for the remote will be used. For further information, refer to the libgit2 documentation.