/* * Copyright (C) 2005 Junio C Hamano */ #include "cache.h" /* * This array must be sorted by its canonical name, because * we do look-up by binary search. */ static struct backward_compatible_env { const char *canonical; const char *old; } bc_name[] = { { "GIT_ALTERNATE_OBJECT_DIRECTORIES", "SHA1_FILE_DIRECTORIES" }, { "GIT_AUTHOR_DATE", "AUTHOR_DATE" }, { "GIT_AUTHOR_EMAIL", "AUTHOR_EMAIL" }, { "GIT_AUTHOR_NAME", "AUTHOR_NAME" }, { "GIT_COMMITTER_EMAIL", "COMMIT_AUTHOR_EMAIL" }, { "GIT_COMMITTER_NAME", "COMMIT_AUTHOR_NAME" }, { "GIT_OBJECT_DIRECTORY", "SHA1_FILE_DIRECTORY" }, }; static void warn_old_environment(int pos) { int i; static int warned = 0; if (warned) return; warned = 1; fprintf(stderr, "warning: Attempting to use %s\n", bc_name[pos].old); fprintf(stderr, "warning: GIT environment variables have been renamed.\n" "warning: Please adjust your scripts and environment.\n"); for (i = 0; i < sizeof(bc_name) / sizeof(bc_name[0]); i++) { /* warning is needed only when old name is there and * new name is not. */ if (!getenv(bc_name[i].canonical) && getenv(bc_name[i].old)) fprintf(stderr, "warning: old %s => new %s\n", bc_name[i].old, bc_name[i].canonical); } } char *gitenv_bc(const char *e) { int first, last; char *val = getenv(e); if (val) die("gitenv_bc called on existing %s; fix the caller.", e); first = 0; last = sizeof(bc_name) / sizeof(bc_name[0]); while (last > first) { int next = (last + first) >> 1; int cmp = strcmp(e, bc_name[next].canonical); if (!cmp) { val = getenv(bc_name[next].old); /* If the user has only old name, warn. * otherwise stay silent. */ if (val) warn_old_environment(next); return val; } if (cmp < 0) { last = next; continue; } first = next+1; } return NULL; }