aboutsummaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2008-09-09 07:10:56 +0200
committerJunio C Hamano <gitster@pobox.com>2008-09-09 08:34:00 -0700
commit4886b89f8fde57b76738c96761eecbfbd0b13112 (patch)
tree5dade94cc0d842bd28ddc62736666a6f0100208f /refs.c
parent10708a994a632c392ab58aa7d11e49b322aa1505 (diff)
downloadgit-4886b89f8fde57b76738c96761eecbfbd0b13112.tar.gz
git-4886b89f8fde57b76738c96761eecbfbd0b13112.tar.xz
refs: improve comments about "reading" argument of "resolve_ref"
The existing in-code comment was misleading. An access that is not "reading" may often be "writing", but it does not have to be. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/refs.c b/refs.c
index 39a3b2380..b6807505e 100644
--- a/refs.c
+++ b/refs.c
@@ -390,6 +390,18 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *re
return retval;
}
+/*
+ * If the "reading" argument is set, this function finds out what _object_
+ * the ref points at by "reading" the ref. The ref, if it is not symbolic,
+ * has to exist, and if it is symbolic, it has to point at an existing ref,
+ * because the "read" goes through the symref to the ref it points at.
+ *
+ * The access that is not "reading" may often be "writing", but does not
+ * have to; it can be merely checking _where it leads to_. If it is a
+ * prelude to "writing" to the ref, a write to a symref that points at
+ * yet-to-be-born ref will create the real ref pointed by the symref.
+ * reading=0 allows the caller to check where such a symref leads to.
+ */
const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int *flag)
{
int depth = MAXDEPTH;
@@ -409,13 +421,7 @@ const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int *
if (--depth < 0)
return NULL;
- /* Special case: non-existing file.
- * Not having the refs/heads/new-branch is OK
- * if we are writing into it, so is .git/HEAD
- * that points at refs/heads/master still to be
- * born. It is NOT OK if we are resolving for
- * reading.
- */
+ /* Special case: non-existing file. */
if (lstat(path, &st) < 0) {
struct ref_list *list = get_packed_refs();
while (list) {