From: Zach Welch <zw@superlucidity.net>
To: git@vger.kernel.org
Subject: [PATCH 3/8] init-db.c: refactor directory creation
Date: Tue, 19 Apr 2005 02:09:39 -0700 [thread overview]
Message-ID: <mailbox-23311-1113901779-726360@spoon> (raw)
In-Reply-To: mailbox-23311-1113901779-711084@spoon
This patch factors the init-db directory creation into a new function,
which is then reused in the next patch.
This patch applies on top of:
[PATCH 0/8] init-db.c cleanup, add INDEX_FILE_DIRECTORY support
[PATCH 1/8] init-db.c: [RESEND] remove redundant getenv call
[PATCH 2/8] init-db.c: [RESEND] make init-db work with common objects
init-db.c | 61 ++++++++++++++++++++++++++++-----------------------
1 files changed, 34 insertions(+), 27 deletions(-)
Signed-Off-By: Zach Welch <zw@superlucidity.net>
--- a/init-db.c
+++ b/init-db.c
@@ -4,43 +4,50 @@
* Copyright (C) Linus Torvalds, 2005
*/
#include "cache.h"
+/*
+ * 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.
+ * On the other hand, it might just make lookup slower and messier. You
+ * be the judge. The default case is to have a DB per managed directory.
+ */
+
+static char* init_dir(char *env, char *std, char *label, int *len)
+{
+ char *dir;
+ dir = getenv(env);
+ if (dir) {
+ struct stat st;
+ if (stat(dir, &st) < 0 || !S_ISDIR(st.st_mode)) {
+ fprintf(stderr, "%s set to bad directory %s: ", env, dir);
+ exit(1);
+ }
+ }
+ else {
+ dir = std;
+ fprintf(stderr, "defaulting to private %s area\n", label);
+ }
+ if (mkdir(dir, 0755) < 0) {
+ if (errno != EEXIST) {
+ perror(dir);
+ exit(1);
+ }
+ }
+ if (len)
+ *len = strlen(dir);
+ return dir;
+}
int main(int argc, char **argv)
{
char *sha1_dir, *path;
int len, i;
if (mkdir(".git", 0755) < 0) {
perror("unable to create .git directory");
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.
- * On the other hand, it might just make lookup slower and messier. You
- * be the judge.
- */
- sha1_dir = getenv(DB_ENVIRONMENT);
- if (sha1_dir) {
- struct stat st;
- if (!stat(sha1_dir, &st) && S_ISDIR(st.st_mode))
- return 0;
- fprintf(stderr, "DB_ENVIRONMENT set to bad directory %s: ", sha1_dir);
- }
-
- /*
- * The default case is to have a DB per managed directory.
- */
- sha1_dir = DEFAULT_DB_ENVIRONMENT;
- fprintf(stderr, "defaulting to private storage area\n");
- len = strlen(sha1_dir);
- if (mkdir(sha1_dir, 0755) < 0) {
- if (errno != EEXIST) {
- perror(sha1_dir);
- exit(1);
- }
- }
+ sha1_dir = init_dir(DB_ENVIRONMENT, DEFAULT_DB_ENVIRONMENT, "storage", &len);
+
path = malloc(len + 40);
memcpy(path, sha1_dir, len);
for (i = 0; i < 256; i++) {
reply other threads:[~2005-04-19 9:06 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=mailbox-23311-1113901779-726360@spoon \
--to=zw@superlucidity.net \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox