Add support for a "GIT_INDEX_FILE" environment variable.

We use that to specify alternative index files, which can be useful
if you want to (for example) generate a temporary index file to do
some specific operation that you don't want to mess with your main
one with.

It defaults to the regular ".git/index" if it hasn't been specified.
diff --git a/update-cache.c b/update-cache.c
index 8ec69e2..4353b80 100644
--- a/update-cache.c
+++ b/update-cache.c
@@ -274,25 +274,29 @@
 	return add_cache_entry(ce, allow_add);
 }
 
-static int remove_lock = 0;
+static const char *lockfile_name = NULL;
 
 static void remove_lock_file(void)
 {
-	if (remove_lock)
-		unlink(".git/index.lock");
+	if (lockfile_name)
+		unlink(lockfile_name);
 }
 
 int main(int argc, char **argv)
 {
 	int i, newfd, entries;
 	int allow_options = 1;
+	static char lockfile[MAXPATHLEN+1];
+	const char *indexfile = get_index_file();
 
-	newfd = open(".git/index.lock", O_RDWR | O_CREAT | O_EXCL, 0600);
+	snprintf(lockfile, sizeof(lockfile), "%s.lock", indexfile);
+
+	newfd = open(lockfile, O_RDWR | O_CREAT | O_EXCL, 0600);
 	if (newfd < 0)
 		die("unable to create new cachefile");
 
 	atexit(remove_lock_file);
-	remove_lock = 1;
+	lockfile_name = lockfile;
 
 	entries = read_cache();
 	if (entries < 0)
@@ -333,10 +337,9 @@
 		if (add_file_to_cache(path))
 			die("Unable to add %s to database", path);
 	}
-	if (write_cache(newfd, active_cache, active_nr) ||
-	    rename(".git/index.lock", ".git/index"))
+	if (write_cache(newfd, active_cache, active_nr) || rename(lockfile, indexfile))
 		die("Unable to write new cachefile");
 
-	remove_lock = 0;
+	lockfile_name = NULL;
 	return 0;
 }