git/gitenv.c

76 строки
1.8 KiB
C

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