@@ -15,6 +15,41 @@ static void safe_create_dir(const char *dir)
15
15
}
16
16
}
17
17
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
+
18
53
/*
19
54
* If you want to, you can share the DB area with any number of branches.
20
55
* 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)
23
58
*/
24
59
int main (int argc , char * * argv )
25
60
{
61
+ const char * git_dir ;
26
62
const char * sha1_dir ;
27
63
char * path ;
28
64
int len , i ;
29
65
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 ;
36
72
fprintf (stderr , "defaulting to local storage area\n" );
37
73
}
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 ();
38
81
len = strlen (sha1_dir );
39
82
path = xmalloc (len + 40 );
40
83
memcpy (path , sha1_dir , len );
0 commit comments