| /* |
| * 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; |
| } |