GIT 0.99.9l aka 1.0rc4
[gitweb.git] / refs.c
diff --git a/refs.c b/refs.c
index a52b038eefdf22fce20d1a81180c97def0613cdb..ac2619851d63e45a5f0d97b780e59af60fcc182b 100644 (file)
--- a/refs.c
+++ b/refs.c
 #define USE_SYMLINK_HEAD 1
 #endif
 
-int validate_symref(const char *path)
-{
-       struct stat st;
-       char *buf, buffer[256];
-       int len, fd;
-
-       if (lstat(path, &st) < 0)
-               return -1;
-
-       /* Make sure it is a "refs/.." symlink */
-       if (S_ISLNK(st.st_mode)) {
-               len = readlink(path, buffer, sizeof(buffer)-1);
-               if (len >= 5 && !memcmp("refs/", buffer, 5))
-                       return 0;
-               return -1;
-       }
-
-       /*
-        * Anything else, just open it and try to see if it is a symbolic ref.
-        */
-       fd = open(path, O_RDONLY);
-       if (fd < 0)
-               return -1;
-       len = read(fd, buffer, sizeof(buffer)-1);
-       close(fd);
-
-       /*
-        * Is it a symbolic ref?
-        */
-       if (len < 4 || memcmp("ref:", buffer, 4))
-               return -1;
-       buf = buffer + 4;
-       len -= 4;
-       while (len && isspace(*buf))
-               buf++, len--;
-       if (len >= 5 && !memcmp("refs/", buf, 5))
-               return 0;
-       return -1;
-}
-
 const char *resolve_ref(const char *path, unsigned char *sha1, int reading)
 {
        int depth = MAXDEPTH, len;
@@ -121,10 +81,12 @@ int create_symref(const char *git_HEAD, const char *refs_heads_master)
        int fd, len, written;
 
 #if USE_SYMLINK_HEAD
-       unlink(git_HEAD);
-       if (!symlink(refs_heads_master, git_HEAD))
-               return 0;
-       fprintf(stderr, "no symlink - falling back to symbolic ref\n");
+       if (!only_use_symrefs) {
+               unlink(git_HEAD);
+               if (!symlink(refs_heads_master, git_HEAD))
+                       return 0;
+               fprintf(stderr, "no symlink - falling back to symbolic ref\n");
+       }
 #endif
 
        len = snprintf(ref, sizeof(ref), "ref: %s\n", refs_heads_master);