From: Petr Baudis Date: Sat, 07 Oct 2006 12:58:02 GMT Subject: Re: [PATCH] gitweb: prepare for repositories with packed refs. Message-ID: <20061007125802.GA20017@pasky.or.cz> In-Reply-To: <7vzmc8tqqe.fsf@assigned-by-dhcp.cox.net> Dear diary, on Sat, Oct 07, 2006 at 11:33:29AM CEST, I got a letter where Junio C Hamano said that... > When we introduced symref, "cat .git/HEAD" stopped being the way > to read the value of the tip of the current branch, "echo > $commit >.git/HEAD" stopped being the way to update it, and > "rev-parse --verify HEAD" and "update-ref HEAD $commit" were > introduced at the same time as the official alternatives to > support both old and new implementations of .git/HEAD. > > The way to find out which branch we are currently on used to be > "readlink .git/HEAD"; that stopped to be true, and we introduced > "symbolic-ref HEAD" as the official alternative to support both > old and new implementation. > > The way to see if a random symbolic link whose name happens to > be HEAD is a symref has been to see if it points at a path that > begins with "refs/". Cogito does [ ! -s "$_git/HEAD" ] || { _git_head="$(git-symbolic-ref HEAD)"; _git_head="${_git_head#refs/heads/}"; } in the common initialization code, so that cg-reset works even on repositories with broken HEAD. It hasn't been an issue in the past since HEAD as a dangling symlink indeed _has_ been broken HEAD in the past. That said, at least cg-reset will indeed repair it: if ! [ -s "$_git/HEAD" ]; then rm -f "$_git/HEAD" # XXX: git-symbolic-ref is a weenie and won't do the job at this point. echo "ref: refs/heads/$_git_head" >"$_git/HEAD" fi But it's still not nice. -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ #!/bin/perl -sp0777i