add logref support to git-symbolic-ref

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/refs.c b/refs.c
index ec6fe29..5913185 100644
--- a/refs.c
+++ b/refs.c
@@ -986,18 +986,23 @@
 	return 0;
 }
 
-int create_symref(const char *ref_target, const char *refs_heads_master)
+int create_symref(const char *ref_target, const char *refs_heads_master,
+		  const char *logmsg)
 {
 	const char *lockpath;
 	char ref[1000];
 	int fd, len, written;
 	const char *git_HEAD = git_path("%s", ref_target);
+	unsigned char old_sha1[20], new_sha1[20];
+
+	if (logmsg && read_ref(ref_target, old_sha1))
+		hashclr(old_sha1);
 
 #ifndef NO_SYMLINK_HEAD
 	if (prefer_symlink_refs) {
 		unlink(git_HEAD);
 		if (!symlink(refs_heads_master, git_HEAD))
-			return 0;
+			goto done;
 		fprintf(stderr, "no symlink - falling back to symbolic ref\n");
 	}
 #endif
@@ -1030,6 +1035,11 @@
 		error("Unable to fix permissions on %s", lockpath);
 		return -4;
 	}
+
+	done:
+	if (logmsg && !read_ref(refs_heads_master, new_sha1))
+		log_ref_write(ref_target, old_sha1, new_sha1, logmsg);
+
 	return 0;
 }