Subject: [PATCH Cogito] Use git-{update,symbolic}-ref for updating HEAD

From: Jonas Fonseca <[email-masked]>
Date: Sat, 8 Oct 2005 18:57:23 +0200

Conditionally make git-update-ref check the old head. For this to succeed
for the initial commit, cg-init should not touch .git/refs/heads/master,
and the touching seems to be redundant anyway, so remove it.

This should make Cogito mostly work on cygwin.

Signed-off-by: Jonas Fonseca <[email-masked]>

---

This is an incremental update to make Cogito handle symbolic refs.

 I am not sure whether the change from using '[ -L .git/HEAD ]' to using
'[ -e .git/HEAD ]' is the thing to do. And I haven't used it so much
yet; did a few commit and so on. And the tests fails do to local cloning
not working yet (git-local-fetch needs to be fixed).

 Makefile                        |    2 +-
 cg-Xlib                         |    4 ++--
 cg-commit                       |    4 ++--
 cg-init                         |    1 -
 cg-object-id                    |    2 +-

---

diff --git a/Makefile b/Makefile
index f0a0590..9eacade 100644
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,7 @@ all: cogito
 cogito: $(GEN_SCRIPT)
 
 ifneq (,$(wildcard .git))
-GIT_HEAD=.git/HEAD
+GIT_HEAD=.git/$(shell git-symbolic-ref HEAD)
 GIT_HEAD_ID=" \($(shell cat $(GIT_HEAD))\)"
 endif
 cg-version: $(VERSION) $(GIT_HEAD) Makefile
diff --git a/cg-Xlib b/cg-Xlib
index b27e8b9..dcf9aa3 100755
--- a/cg-Xlib
+++ b/cg-Xlib
@@ -246,7 +246,7 @@ tree_timewarp()
 	fi
 
 	git-read-tree -m "$branch" || die "$branch: bad commit"
-	[ "$no_head_update" ] || echo "$branch" > $_git/HEAD
+	[ "$no_head_update" ] || git-update-ref HEAD "$branch"
 
 	# Kill gone files
 	git-diff-tree -z -r $base $branch | xargs -0 bash -c '
@@ -471,7 +471,7 @@ if [ ! "$_git_repo_unneeded" ]; then
 	       exit 1
 	fi
 	_git_head=master
-	[ -L "$_git/HEAD" ] && _git_head="$(basename "$(readlink "$_git/HEAD")")"
+	[ -e "$_git/HEAD" ] && _git_head="$(basename "$(git-symbolic-ref HEAD)")"
 	[ -s "$_git/head-name" ] && _git_head="$(cat "$_git/head-name")"
 fi
 
diff --git a/cg-commit b/cg-commit
index 4345bd5..6024f17 100755
--- a/cg-commit
+++ b/cg-commit
@@ -396,7 +396,7 @@ fi
 
 oldhead=
 if [ -s "$_git/HEAD" ]; then
-	oldhead=$(cat $_git/HEAD)
+	oldhead=$(git-symbolic-ref HEAD)
 	oldheadstr="-p $oldhead"
 fi
 
@@ -420,7 +420,7 @@ fi
 
 if [ "$newhead" ]; then
 	echo "Committed as $newhead."
-	echo $newhead >$_git/HEAD
+	git-update-ref HEAD $newhead $oldhead 
 	[ "$merging" ] && rm $_git/merging $_git/merging-sym $_git/merge-base
 	rm -f "$_git/commit-ignore"
 
diff --git a/cg-init b/cg-init
index 570c83e..65faf84 100755
--- a/cg-init
+++ b/cg-init
@@ -48,7 +48,6 @@ done
 cleanup_trap "rm -rf $_git"
 
 git-init-db
-touch $_git/refs/heads/master
 
 git-read-tree # Seed the dircache
 if ! [ "$no_initial_commit" ]; then
diff --git a/cg-object-id b/cg-object-id
index 2ae9420..5c03626 100755
--- a/cg-object-id
+++ b/cg-object-id
@@ -53,7 +53,7 @@ normalize_id()
 	fi
 
 	if [ ! "$id" ] || [ "$id" = "this" ] || [ "$id" = "HEAD" ]; then
-		read id < "$_git/HEAD"
+		read id < "$_git/$(git-symbolic-ref HEAD)"
 
 	elif [ -r "$_git/refs/tags/$id" ]; then
 		read id < "$_git/refs/tags/$id"
-- 
Jonas Fonseca