mirror of
https://git.proxmox.com/git/libgit2
synced 2025-07-21 03:05:43 +00:00
refspec: introduce git_refspec_transform_l()
This commit is contained in:
parent
70edc1b0fc
commit
3e012fca77
@ -194,20 +194,20 @@ int git_refspec_transform(char *out, size_t outlen, const git_refspec *spec, con
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_refspec_transform_r(git_buf *out, const git_refspec *spec, const char *name)
|
static int refspec_transform(git_buf *out, const char *from, const char *to, const char *name)
|
||||||
{
|
{
|
||||||
if (git_buf_sets(out, spec->dst) < 0)
|
if (git_buf_sets(out, to) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No '*' at the end means that it's mapped to one specific local
|
* No '*' at the end means that it's mapped to one specific
|
||||||
* branch, so no actual transformation is needed.
|
* branch, so no actual transformation is needed.
|
||||||
*/
|
*/
|
||||||
if (git_buf_len(out) > 0 && out->ptr[git_buf_len(out) - 1] != '*')
|
if (git_buf_len(out) > 0 && out->ptr[git_buf_len(out) - 1] != '*')
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
git_buf_truncate(out, git_buf_len(out) - 1); /* remove trailing '*' */
|
git_buf_truncate(out, git_buf_len(out) - 1); /* remove trailing '*' */
|
||||||
git_buf_puts(out, name + strlen(spec->src) - 1);
|
git_buf_puts(out, name + strlen(from) - 1);
|
||||||
|
|
||||||
if (git_buf_oom(out))
|
if (git_buf_oom(out))
|
||||||
return -1;
|
return -1;
|
||||||
@ -215,3 +215,13 @@ int git_refspec_transform_r(git_buf *out, const git_refspec *spec, const char *n
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int git_refspec_transform_r(git_buf *out, const git_refspec *spec, const char *name)
|
||||||
|
{
|
||||||
|
return refspec_transform(out, spec->src, spec->dst, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
int git_refspec_transform_l(git_buf *out, const git_refspec *spec, const char *name)
|
||||||
|
{
|
||||||
|
return refspec_transform(out, spec->dst, spec->src, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -40,4 +40,15 @@ void git_refspec__free(git_refspec *refspec);
|
|||||||
*/
|
*/
|
||||||
int git_refspec_transform_r(git_buf *out, const git_refspec *spec, const char *name);
|
int git_refspec_transform_r(git_buf *out, const git_refspec *spec, const char *name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transform a reference from its target following the refspec's rules,
|
||||||
|
* and writes the results into a git_buf.
|
||||||
|
*
|
||||||
|
* @param out where to store the source name
|
||||||
|
* @param spec the refspec
|
||||||
|
* @param name the name of the reference to transform
|
||||||
|
* @return 0 or error if buffer allocation fails
|
||||||
|
*/
|
||||||
|
int git_refspec_transform_l(git_buf *out, const git_refspec *spec, const char *name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user