X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=receive-pack.c;h=92878ecac3bdb12efe0d34257852b432558e21f6;hb=7246ed438c541650c2cd50e4e98b43226f60da0c;hp=06857eb77fef93788f54d17cca68924f5213c9db;hpb=51017101c7a308745ba3c04944457f1dc6a55780;p=git.git diff --git a/receive-pack.c b/receive-pack.c index 06857eb7..92878eca 100644 --- a/receive-pack.c +++ b/receive-pack.c @@ -79,7 +79,7 @@ static int run_update_hook(const char *refname, case -ERR_RUN_COMMAND_WAITPID_WRONG_PID: die("waitpid is confused"); case -ERR_RUN_COMMAND_WAITPID_SIGNAL: - fprintf(stderr, "%s died of signal", update_hook); + fprintf(stderr, "%s died of signal\n", update_hook); return -1; case -ERR_RUN_COMMAND_WAITPID_NOEXIT: die("%s died strangely", update_hook); @@ -95,6 +95,10 @@ static int update(const char *name, 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); @@ -169,7 +173,7 @@ static void run_update_post_hook(struct command *cmd) argc++; } argv[argc] = NULL; - run_command_v(argc, argv); + run_command_v_opt(argc, argv, RUN_COMMAND_NO_STDIO); } /* @@ -244,11 +248,11 @@ static void unpack(void) int main(int argc, char **argv) { int i; - const char *dir = NULL; + char *dir = NULL; argv++; for (i = 1; i < argc; i++) { - const char *arg = *argv++; + char *arg = *argv++; if (*arg == '-') { /* Do flag handling here */ @@ -261,18 +265,9 @@ int main(int argc, char **argv) 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 */