projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Work around missing hard links on FAT formatted media
[git.git]
/
receive-pack.c
diff --git
a/receive-pack.c
b/receive-pack.c
index
8d6faaa
..
8f157bc
100644
(file)
--- a/
receive-pack.c
+++ b/
receive-pack.c
@@
-95,6
+95,10
@@
static int update(const char *name,
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);
@@
-106,6
+110,8
@@
static int update(const char *name,
return error("unpack should have generated %s, "
"but I can't find it!", new_hex);
return error("unpack should have generated %s, "
"but I can't find it!", new_hex);
+ safe_create_leading_directories(lock_name);
+
newfd = open(lock_name, O_CREAT | O_EXCL | O_WRONLY, 0666);
if (newfd < 0)
return error("unable to create %s (%s)",
newfd = open(lock_name, O_CREAT | O_EXCL | O_WRONLY, 0666);
if (newfd < 0)
return error("unable to create %s (%s)",
@@
-267,7
+273,7
@@
int main(int argc, char **argv)
/* If we have a ".git" directory, chdir to it */
chdir(".git");
/* If we have a ".git" directory, chdir to it */
chdir(".git");
-
setenv("GIT_DIR", ".", 1
);
+
putenv("GIT_DIR=."
);
if (access("objects", X_OK) < 0 || access("refs/heads", X_OK) < 0)
die("%s doesn't appear to be a git directory", dir);
if (access("objects", X_OK) < 0 || access("refs/heads", X_OK) < 0)
die("%s doesn't appear to be a git directory", dir);