]> git.ipfire.org Git - thirdparty/git.git/commitdiff
path: move `validate_headref()` to its only user
authorPatrick Steinhardt <ps@pks.im>
Tue, 7 May 2024 04:52:51 +0000 (06:52 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 May 2024 05:50:48 +0000 (22:50 -0700)
While `validate_headref()` is only called from `is_git_directory()` in
"setup.c", it is currently implemented in "path.c". Move it over such
that it becomes clear that it is only really used during setup in order
to discover repositories.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
path.c
path.h
setup.c

diff --git a/path.c b/path.c
index cc021655301ff276f0d9bf99b4802dc45e21be93..bd6e25245d5a2b21fb64ab675bdbcdd83fb3f30b 100644 (file)
--- a/path.c
+++ b/path.c
@@ -5,7 +5,6 @@
 #include "abspath.h"
 #include "environment.h"
 #include "gettext.h"
-#include "hex.h"
 #include "repository.h"
 #include "strbuf.h"
 #include "string-list.h"
@@ -647,58 +646,6 @@ void strbuf_git_common_path(struct strbuf *sb,
        va_end(args);
 }
 
-int validate_headref(const char *path)
-{
-       struct stat st;
-       char buffer[256];
-       const char *refname;
-       struct object_id oid;
-       int fd;
-       ssize_t len;
-
-       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_in_full(fd, buffer, sizeof(buffer)-1);
-       close(fd);
-
-       if (len < 0)
-               return -1;
-       buffer[len] = '\0';
-
-       /*
-        * Is it a symbolic ref?
-        */
-       if (skip_prefix(buffer, "ref:", &refname)) {
-               while (isspace(*refname))
-                       refname++;
-               if (starts_with(refname, "refs/"))
-                       return 0;
-       }
-
-       /*
-        * Is this a detached HEAD?
-        */
-       if (get_oid_hex_any(buffer, &oid) != GIT_HASH_UNKNOWN)
-               return 0;
-
-       return -1;
-}
-
 static struct passwd *getpw_str(const char *username, size_t len)
 {
        struct passwd *pw;
diff --git a/path.h b/path.h
index ea96487b292bdb149061dc2b35c07e7529ed01ef..c3bc8617bd561d8dbb149269f539faf3b2702f67 100644 (file)
--- a/path.h
+++ b/path.h
@@ -173,7 +173,6 @@ const char *git_path_fetch_head(struct repository *r);
 const char *git_path_shallow(struct repository *r);
 
 int ends_with_path_components(const char *path, const char *components);
-int validate_headref(const char *ref);
 
 int calc_shared_perm(int mode);
 int adjust_shared_perm(const char *path);
diff --git a/setup.c b/setup.c
index f4b32f76e3d86b46dbd7713195592906b73b9571..7c996659bd370bdce3f84ea3760d787ca97bae4f 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -4,6 +4,7 @@
 #include "environment.h"
 #include "exec-cmd.h"
 #include "gettext.h"
+#include "hex.h"
 #include "object-name.h"
 #include "refs.h"
 #include "repository.h"
@@ -341,6 +342,58 @@ int get_common_dir_noenv(struct strbuf *sb, const char *gitdir)
        return ret;
 }
 
+static int validate_headref(const char *path)
+{
+       struct stat st;
+       char buffer[256];
+       const char *refname;
+       struct object_id oid;
+       int fd;
+       ssize_t len;
+
+       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_in_full(fd, buffer, sizeof(buffer)-1);
+       close(fd);
+
+       if (len < 0)
+               return -1;
+       buffer[len] = '\0';
+
+       /*
+        * Is it a symbolic ref?
+        */
+       if (skip_prefix(buffer, "ref:", &refname)) {
+               while (isspace(*refname))
+                       refname++;
+               if (starts_with(refname, "refs/"))
+                       return 0;
+       }
+
+       /*
+        * Is this a detached HEAD?
+        */
+       if (get_oid_hex_any(buffer, &oid) != GIT_HASH_UNKNOWN)
+               return 0;
+
+       return -1;
+}
+
 /*
  * Test if it looks like we're at a git directory.
  * We want to see: