projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'js/fetchconfig'
[git.git]
/
connect.c
diff --git
a/connect.c
b/connect.c
index
6b6d613
..
6a8f8a6
100644
(file)
--- a/
connect.c
+++ b/
connect.c
@@
-1,3
+1,4
@@
+#include "git-compat-util.h"
#include "cache.h"
#include "pkt-line.h"
#include "quote.h"
#include "cache.h"
#include "pkt-line.h"
#include "quote.h"
@@
-34,10
+35,6
@@
struct ref **get_remote_heads(int in, struct ref **list,
die("protocol error: expected sha/ref, got '%s'", buffer);
name = buffer + 41;
die("protocol error: expected sha/ref, got '%s'", buffer);
name = buffer + 41;
- if (ignore_funny && 45 < len && !memcmp(name, "refs/", 5) &&
- check_ref_format(name + 5))
- continue;
-
name_len = strlen(name);
if (len != name_len + 41) {
if (server_capabilities)
name_len = strlen(name);
if (len != name_len + 41) {
if (server_capabilities)
@@
-45,6
+42,10
@@
struct ref **get_remote_heads(int in, struct ref **list,
server_capabilities = strdup(name + name_len + 1);
}
server_capabilities = strdup(name + name_len + 1);
}
+ if (ignore_funny && 45 < len && !memcmp(name, "refs/", 5) &&
+ check_ref_format(name + 5))
+ continue;
+
if (nr_match && !path_match(name, nr_match, match))
continue;
ref = xcalloc(1, sizeof(*ref) + len - 40);
if (nr_match && !path_match(name, nr_match, match))
continue;
ref = xcalloc(1, sizeof(*ref) + len - 40);
@@
-73,7
+74,7
@@
int get_ack(int fd, unsigned char *result_sha1)
line[--len] = 0;
if (!strcmp(line, "NAK"))
return 0;
line[--len] = 0;
if (!strcmp(line, "NAK"))
return 0;
- if (!strncmp(line, "ACK ",
3
)) {
+ if (!strncmp(line, "ACK ",
4
)) {
if (!get_sha1_hex(line+4, result_sha1)) {
if (strstr(line+45, "continue"))
return 2;
if (!get_sha1_hex(line+4, result_sha1)) {
if (strstr(line+45, "continue"))
return 2;
@@
-566,6
+567,7
@@
int git_connect(int fd[2], char *url, const char *prog)
int pipefd[2][2];
pid_t pid;
enum protocol protocol = PROTO_LOCAL;
int pipefd[2][2];
pid_t pid;
enum protocol protocol = PROTO_LOCAL;
+ int free_path = 0;
host = strstr(url, "://");
if(host) {
host = strstr(url, "://");
if(host) {
@@
-609,16
+611,23
@@
int git_connect(int fd[2], char *url, const char *prog)
char *ptr = path;
if (path[1] == '~')
path++;
char *ptr = path;
if (path[1] == '~')
path++;
- else
+ else
{
path = strdup(ptr);
path = strdup(ptr);
+ free_path = 1;
+ }
*ptr = '\0';
}
if (protocol == PROTO_GIT) {
*ptr = '\0';
}
if (protocol == PROTO_GIT) {
+ int ret;
if (git_use_proxy(host))
if (git_use_proxy(host))
- return git_proxy_connect(fd, prog, host, path);
- return git_tcp_connect(fd, prog, host, path);
+ ret = git_proxy_connect(fd, prog, host, path);
+ else
+ ret = git_tcp_connect(fd, prog, host, path);
+ if (free_path)
+ free(path);
+ return ret;
}
if (pipe(pipefd[0]) < 0 || pipe(pipefd[1]) < 0)
}
if (pipe(pipefd[0]) < 0 || pipe(pipefd[1]) < 0)
@@
-644,14
+653,22
@@
int git_connect(int fd[2], char *url, const char *prog)
ssh_basename++;
execlp(ssh, ssh_basename, host, command, NULL);
}
ssh_basename++;
execlp(ssh, ssh_basename, host, command, NULL);
}
- else
+ else {
+ unsetenv(ALTERNATE_DB_ENVIRONMENT);
+ unsetenv(DB_ENVIRONMENT);
+ unsetenv(GIT_DIR_ENVIRONMENT);
+ unsetenv(GRAFT_ENVIRONMENT);
+ unsetenv(INDEX_ENVIRONMENT);
execlp("sh", "sh", "-c", command, NULL);
execlp("sh", "sh", "-c", command, NULL);
+ }
die("exec failed");
die("exec failed");
- }
+ }
fd[0] = pipefd[0][0];
fd[1] = pipefd[1][1];
close(pipefd[0][1]);
close(pipefd[1][0]);
fd[0] = pipefd[0][0];
fd[1] = pipefd[1][1];
close(pipefd[0][1]);
close(pipefd[1][0]);
+ if (free_path)
+ free(path);
return pid;
}
return pid;
}