mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-26 07:41:44 +00:00
Move git_pkt_{gen_proto,send_request} to transport_git.c
This is where they really belong. Remvoe the prefix and make them static. Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
This commit is contained in:
parent
cbf742ac4e
commit
fd6790210f
@ -51,10 +51,5 @@ struct git_pkt_ref {
|
|||||||
char *capabilities;
|
char *capabilities;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a git protocol request.
|
|
||||||
*/
|
|
||||||
int git_pkt_gen_proto(char **out, int *outlen, const char *cmd, const char *url);
|
|
||||||
int git_pkt_send_request(int socket, const char *cmd, const char *url);
|
|
||||||
int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_t len);
|
int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_t len);
|
||||||
void git_pkt_free(git_pkt *pkt);
|
void git_pkt_free(git_pkt *pkt);
|
||||||
|
58
src/pkt.c
58
src/pkt.c
@ -201,64 +201,6 @@ void git_pkt_free(git_pkt *pkt)
|
|||||||
free(pkt);
|
free(pkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a git procol request.
|
|
||||||
*
|
|
||||||
* For example: 0035git-upload-pack /libgit2/libgit2\0host=github.com\0
|
|
||||||
*
|
|
||||||
* TODO: the command should not be hard-coded
|
|
||||||
*/
|
|
||||||
int git_pkt_gen_proto(char **out, int *outlen, const char *cmd, const char *url)
|
|
||||||
{
|
|
||||||
char *delim, *repo, *ptr;
|
|
||||||
char default_command[] = "git-upload-pack";
|
|
||||||
char host[] = "host=";
|
|
||||||
int len;
|
|
||||||
|
|
||||||
delim = strchr(url, '/');
|
|
||||||
if (delim == NULL)
|
|
||||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to create proto-request: malformed URL");
|
|
||||||
|
|
||||||
repo = delim;
|
|
||||||
|
|
||||||
delim = strchr(url, ':');
|
|
||||||
if (delim == NULL)
|
|
||||||
delim = strchr(url, '/');
|
|
||||||
|
|
||||||
if (cmd == NULL)
|
|
||||||
cmd = default_command;
|
|
||||||
|
|
||||||
len = 4 + strlen(cmd) + 1 + strlen(repo) + 1 + STRLEN(host) + (delim - url) + 2;
|
|
||||||
|
|
||||||
*out = git__malloc(len);
|
|
||||||
if (*out == NULL)
|
|
||||||
return GIT_ENOMEM;
|
|
||||||
|
|
||||||
*outlen = len - 1;
|
|
||||||
ptr = *out;
|
|
||||||
memset(ptr, 0x0, len);
|
|
||||||
/* We expect the return value to be > len - 1 so don't bother checking it */
|
|
||||||
snprintf(ptr, len -1, "%04x%s %s%c%s%s", len - 1, cmd, repo, 0, host, url);
|
|
||||||
|
|
||||||
return GIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int git_pkt_send_request(int s, const char *cmd, const char *url)
|
|
||||||
{
|
|
||||||
int error, len;
|
|
||||||
char *msg = NULL;
|
|
||||||
|
|
||||||
error = git_pkt_gen_proto(&msg, &len, cmd, url);
|
|
||||||
if (error < GIT_SUCCESS)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
error = gitno_send(s, msg, len, 0);
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
free(msg);
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
int git_pkt_send_flush(int s)
|
int git_pkt_send_flush(int s)
|
||||||
{
|
{
|
||||||
char flush[] = "0000";
|
char flush[] = "0000";
|
||||||
|
@ -49,6 +49,61 @@ typedef struct {
|
|||||||
git_vector refs;
|
git_vector refs;
|
||||||
git_remote_head **heads;
|
git_remote_head **heads;
|
||||||
} git_priv;
|
} git_priv;
|
||||||
|
/*
|
||||||
|
* Create a git procol request.
|
||||||
|
*
|
||||||
|
* For example: 0035git-upload-pack /libgit2/libgit2\0host=github.com\0
|
||||||
|
*/
|
||||||
|
static int gen_proto(char **out, int *outlen, const char *cmd, const char *url)
|
||||||
|
{
|
||||||
|
char *delim, *repo, *ptr;
|
||||||
|
char default_command[] = "git-upload-pack";
|
||||||
|
char host[] = "host=";
|
||||||
|
int len;
|
||||||
|
|
||||||
|
delim = strchr(url, '/');
|
||||||
|
if (delim == NULL)
|
||||||
|
return git__throw(GIT_EOBJCORRUPTED, "Failed to create proto-request: malformed URL");
|
||||||
|
|
||||||
|
repo = delim;
|
||||||
|
|
||||||
|
delim = strchr(url, ':');
|
||||||
|
if (delim == NULL)
|
||||||
|
delim = strchr(url, '/');
|
||||||
|
|
||||||
|
if (cmd == NULL)
|
||||||
|
cmd = default_command;
|
||||||
|
|
||||||
|
len = 4 + strlen(cmd) + 1 + strlen(repo) + 1 + STRLEN(host) + (delim - url) + 2;
|
||||||
|
|
||||||
|
*out = git__malloc(len);
|
||||||
|
if (*out == NULL)
|
||||||
|
return GIT_ENOMEM;
|
||||||
|
|
||||||
|
*outlen = len - 1;
|
||||||
|
ptr = *out;
|
||||||
|
memset(ptr, 0x0, len);
|
||||||
|
/* We expect the return value to be > len - 1 so don't bother checking it */
|
||||||
|
snprintf(ptr, len -1, "%04x%s %s%c%s%s", len - 1, cmd, repo, 0, host, url);
|
||||||
|
|
||||||
|
return GIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int send_request(int s, const char *cmd, const char *url)
|
||||||
|
{
|
||||||
|
int error, len;
|
||||||
|
char *msg = NULL;
|
||||||
|
|
||||||
|
error = gen_proto(&msg, &len, cmd, url);
|
||||||
|
if (error < GIT_SUCCESS)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
error = gitno_send(s, msg, len, 0);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
free(msg);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
/* The URL should already have been stripped of the protocol */
|
/* The URL should already have been stripped of the protocol */
|
||||||
static int extract_host_and_port(char **host, char **port, const char *url)
|
static int extract_host_and_port(char **host, char **port, const char *url)
|
||||||
@ -99,7 +154,7 @@ static int do_connect(git_priv *priv, const char *url)
|
|||||||
error = extract_host_and_port(&host, &port, url);
|
error = extract_host_and_port(&host, &port, url);
|
||||||
s = gitno_connect(host, port);
|
s = gitno_connect(host, port);
|
||||||
connected = 1;
|
connected = 1;
|
||||||
error = git_pkt_send_request(s, NULL, url);
|
error = send_request(s, NULL, url);
|
||||||
priv->socket = s;
|
priv->socket = s;
|
||||||
|
|
||||||
free(host);
|
free(host);
|
||||||
|
Loading…
Reference in New Issue
Block a user