@@ -15,6 +15,41 @@ static void safe_create_dir(const char *dir)
1515 }
1616}
1717
18+ static void create_default_files (const char * git_dir )
19+ {
20+ unsigned len = strlen (git_dir );
21+ static char path [PATH_MAX ];
22+
23+ if (len > sizeof (path )- 50 )
24+ die ("insane git directory %s" , git_dir );
25+ memcpy (path , git_dir , len );
26+
27+ if (len && path [len - 1 ] != '/' )
28+ path [len ++ ] = '/' ;
29+
30+ /*
31+ * Create .git/refs/{heads,tags}
32+ */
33+ strcpy (path + len , "refs" );
34+ safe_create_dir (path );
35+ strcpy (path + len , "refs/heads" );
36+ safe_create_dir (path );
37+ strcpy (path + len , "refs/tags" );
38+ safe_create_dir (path );
39+
40+ /*
41+ * Create the default symlink from ".git/HEAD" to the "master"
42+ * branch
43+ */
44+ strcpy (path + len , "HEAD" );
45+ if (symlink ("refs/heads/master" , path ) < 0 ) {
46+ if (errno != EEXIST ) {
47+ perror (path );
48+ exit (1 );
49+ }
50+ }
51+ }
52+
1853/*
1954 * If you want to, you can share the DB area with any number of branches.
2055 * That has advantages: you can save space by sharing all the SHA1 objects.
@@ -23,18 +58,26 @@ static void safe_create_dir(const char *dir)
2358 */
2459int main (int argc , char * * argv )
2560{
61+ const char * git_dir ;
2662 const char * sha1_dir ;
2763 char * path ;
2864 int len , i ;
2965
30- sha1_dir = get_object_directory ();
31- if (! gitenv ( DB_ENVIRONMENT ) && ! gitenv ( GIT_DIR_ENVIRONMENT )) {
32- /* We create leading paths only when we fall back
33- * to local .git/objects, at least for now.
34- */
35- safe_create_dir ( DEFAULT_GIT_DIR_ENVIRONMENT ) ;
66+ /*
67+ * Set up the default .git directory contents
68+ */
69+ git_dir = gitenv ( GIT_DIR_ENVIRONMENT );
70+ if (! git_dir ) {
71+ git_dir = DEFAULT_GIT_DIR_ENVIRONMENT ;
3672 fprintf (stderr , "defaulting to local storage area\n" );
3773 }
74+ safe_create_dir (git_dir );
75+ create_default_files (git_dir );
76+
77+ /*
78+ * And set up the object store.
79+ */
80+ sha1_dir = get_object_directory ();
3881 len = strlen (sha1_dir );
3982 path = xmalloc (len + 40 );
4083 memcpy (path , sha1_dir , len );
0 commit comments