diff --git a/receive-pack.c b/receive-pack.c
index 1ef0c13935751903efc5c2dee738604a80b75de2..cbe37e72391c5f22fb21a48fe64232c212ed8709 100644 (file)
--- a/receive-pack.c
+++ b/receive-pack.c
unsigned char updated;
unsigned char old_sha1[20];
unsigned char new_sha1[20];
unsigned char updated;
unsigned char old_sha1[20];
unsigned char new_sha1[20];
- char ref_name[];
+ char ref_name[0];
};
static struct command *commands = NULL;
};
static struct command *commands = NULL;
char new_hex[60], *old_hex, *lock_name;
int newfd, namelen, written;
char new_hex[60], *old_hex, *lock_name;
int newfd, namelen, written;
+ if (!strncmp(name, "refs/", 5) && check_ref_format(name + 5))
+ return error("refusing to create funny ref '%s' locally",
+ name);
+
namelen = strlen(name);
lock_name = xmalloc(namelen + 10);
memcpy(lock_name, name, namelen);
namelen = strlen(name);
lock_name = xmalloc(namelen + 10);
memcpy(lock_name, name, namelen);
argc++;
}
argv[argc] = NULL;
argc++;
}
argv[argc] = NULL;
- run_command_v(argc, argv);
+ run_command_v_opt(argc, argv, RUN_COMMAND_NO_STDIO);
}
/*
}
/*
int main(int argc, char **argv)
{
int i;
int main(int argc, char **argv)
{
int i;
- const char *dir = NULL;
+ char *dir = NULL;
argv++;
for (i = 1; i < argc; i++) {
argv++;
for (i = 1; i < argc; i++) {
- const char *arg = *argv++;
+ char *arg = *argv++;
if (*arg == '-') {
/* Do flag handling here */
if (*arg == '-') {
/* Do flag handling here */
if (!dir)
usage(receive_pack_usage);
if (!dir)
usage(receive_pack_usage);
- /* chdir to the directory. If that fails, try appending ".git" */
- if (chdir(dir) < 0) {
- if (chdir(mkpath("%s.git", dir)) < 0)
- die("unable to cd to %s", dir);
- }
-
- /* If we have a ".git" directory, chdir to it */
- chdir(".git");
- putenv("GIT_DIR=.");
+ if(!enter_repo(dir, 0))
+ die("'%s': unable to chdir or not a git archive", dir);
- if (access("objects", X_OK) < 0 || access("refs/heads", X_OK) < 0)
- die("%s doesn't appear to be a git directory", dir);
write_head_info();
/* EOF */
write_head_info();
/* EOF */