aboutsummaryrefslogtreecommitdiff
path: root/init-db.c
diff options
context:
space:
mode:
authorJunio C Hamano <junio@twinsun.com>2005-09-30 14:26:57 -0700
committerJunio C Hamano <junkio@cox.net>2005-10-01 23:19:33 -0700
commit8098a178b26dc7a158d129a092a5b78da6d12b72 (patch)
treea91aec067dd33319e2f33de565c42ef43b449b56 /init-db.c
parenta876ed83be5467d6075da8a16306724cb1babc2a (diff)
downloadgit-8098a178b26dc7a158d129a092a5b78da6d12b72.tar.gz
git-8098a178b26dc7a158d129a092a5b78da6d12b72.tar.xz
Add git-symbolic-ref
This adds the counterpart of git-update-ref that lets you read and create "symbolic refs". By default it uses a symbolic link to represent ".git/HEAD -> refs/heads/master", but it can be compiled to use the textfile symbolic ref. The places that did 'readlink .git/HEAD' and 'ln -s refs/heads/blah .git/HEAD' have been converted to use new git-symbolic-ref command, so that they can deal with either implementation. Signed-off-by: Junio C Hamano <junio@twinsun.com>
Diffstat (limited to 'init-db.c')
-rw-r--r--init-db.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/init-db.c b/init-db.c
index da2bc8f42..aabc09f4e 100644
--- a/init-db.c
+++ b/init-db.c
@@ -166,6 +166,7 @@ static void create_default_files(const char *git_dir,
{
unsigned len = strlen(git_dir);
static char path[PATH_MAX];
+ unsigned char sha1[20];
if (len > sizeof(path)-50)
die("insane git directory %s", git_dir);
@@ -186,15 +187,14 @@ static void create_default_files(const char *git_dir,
/*
* Create the default symlink from ".git/HEAD" to the "master"
- * branch
+ * branch, if it does not exist yet.
*/
strcpy(path + len, "HEAD");
- if (symlink("refs/heads/master", path) < 0) {
- if (errno != EEXIST) {
- perror(path);
+ if (read_ref(path, sha1) < 0) {
+ if (create_symref(path, "refs/heads/master") < 0)
exit(1);
- }
}
+ path[len] = 0;
copy_templates(path, len, template_path);
}