Skip to content

Commit

Permalink
git-init-db: set up the full default environment
Browse files Browse the repository at this point in the history
Create .git/refs/{heads,tags} and make .git/HEAD be a symlink to
(the as yet non-existent) .git/refs/heads/master.
  • Loading branch information
Linus Torvalds committed May 30, 2005
1 parent b97e3df commit cad88fd
Showing 1 changed file with 49 additions and 6 deletions.
55 changes: 49 additions & 6 deletions init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,41 @@ static void safe_create_dir(const char *dir)
}
}

static void create_default_files(const char *git_dir)
{
unsigned len = strlen(git_dir);
static char path[PATH_MAX];

if (len > sizeof(path)-50)
die("insane git directory %s", git_dir);
memcpy(path, git_dir, len);

if (len && path[len-1] != '/')
path[len++] = '/';

/*
* Create .git/refs/{heads,tags}
*/
strcpy(path + len, "refs");
safe_create_dir(path);
strcpy(path + len, "refs/heads");
safe_create_dir(path);
strcpy(path + len, "refs/tags");
safe_create_dir(path);

/*
* Create the default symlink from ".git/HEAD" to the "master"
* branch
*/
strcpy(path + len, "HEAD");
if (symlink("refs/heads/master", path) < 0) {
if (errno != EEXIST) {
perror(path);
exit(1);
}
}
}

/*
* If you want to, you can share the DB area with any number of branches.
* That has advantages: you can save space by sharing all the SHA1 objects.
Expand All @@ -23,18 +58,26 @@ static void safe_create_dir(const char *dir)
*/
int main(int argc, char **argv)
{
const char *git_dir;
const char *sha1_dir;
char *path;
int len, i;

sha1_dir = get_object_directory();
if (!gitenv(DB_ENVIRONMENT) && !gitenv(GIT_DIR_ENVIRONMENT)) {
/* We create leading paths only when we fall back
* to local .git/objects, at least for now.
*/
safe_create_dir(DEFAULT_GIT_DIR_ENVIRONMENT);
/*
* Set up the default .git directory contents
*/
git_dir = gitenv(GIT_DIR_ENVIRONMENT);
if (!git_dir) {
git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
fprintf(stderr, "defaulting to local storage area\n");
}
safe_create_dir(git_dir);
create_default_files(git_dir);

/*
* And set up the object store.
*/
sha1_dir = get_object_directory();
len = strlen(sha1_dir);
path = xmalloc(len + 40);
memcpy(path, sha1_dir, len);
Expand Down

0 comments on commit cad88fd

Please sign in to comment.