[PATCH 8/8] update-cache.c: add INDEX_FILE_DIRECTORY support
From: Zach Welch <hidden>
Date: 2016-06-15 22:41:53
This patch give update-cache the ability for the index directory to be
overridden by the INDEX_FILE_DIRECTORY environment variable.
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
[PATCH 3/8] init-db.c: refactor directory creation
[PATCH 4/8] init-db.c: add INDEX_FILE_DIRECTORY support
[PATCH 5/8] init-db.c: refactor mkdir logic
[PATCH 6/8] read-cache.c: add INDEX_FILE_DIRECTORY support
[PATCH 7/8] read-tree.c: add INDEX_FILE_DIRECTORY support
update-cache.c | 33 ++++++++++++++++++++++++---------
1 files changed, 24 insertions(+), 9 deletions(-)
Signed-Off-By: Zach Welch <redacted>
update-cache.c: 0d16b36d7d074e9f0a2811a40e16e9823a628ec9--- a/update-cache.c
+++ b/update-cache.c@@ -270,25 +270,37 @@ static int add_cacheinfo(char *arg1, cha return add_cache_entry(ce, allow_add); } -static int remove_lock = 0; +static char *index_lock = NULL; static void remove_lock_file(void) { - if (remove_lock) - unlink(".git/index.lock"); + if (index_lock) + unlink(index_lock); } int main(int argc, char **argv) { - int i, newfd, entries; + int i, newfd, entries, len; int allow_options = 1; + char *index_file, *index_path; - newfd = open(".git/index.lock", O_RDWR | O_CREAT | O_EXCL, 0600); + index_path = getenv(INDEX_ENVIRONMENT); + if (!index_path) + index_path = DEFAULT_INDEX_ENVIRONMENT; + + len = strlen(index_path); + index_file = malloc(len + 7); + if (!index_file) error("out of memory"); + sprintf(index_file, "%s/index", index_path); + + index_lock = malloc(len + 12); + if (!index_lock) error("out of memory"); + sprintf(index_lock, "%s/index.lock", index_path); + + newfd = open(index_lock, O_RDWR | O_CREAT | O_EXCL, 0600); if (newfd < 0) die("unable to create new cachefile"); - atexit(remove_lock_file); - remove_lock = 1; entries = read_cache(); if (entries < 0)
@@ -330,9 +342,12 @@ int main(int argc, char **argv) die("Unable to add %s to database", path); } if (write_cache(newfd, active_cache, active_nr) || - rename(".git/index.lock", ".git/index")) + rename(index_lock, index_file)) die("Unable to write new cachefile"); - remove_lock = 0; + free(index_file); + free(index_lock); + index_lock = NULL; + return 0; }