提交 a9ab586a 编写于 作者: J Junio C Hamano

Retire support for old environment variables.

We have deprecated the old environment variable names for quite a
while and now it's time to remove them.  Gone are:

    SHA1_FILE_DIRECTORIES AUTHOR_DATE AUTHOR_EMAIL AUTHOR_NAME
    COMMIT_AUTHOR_EMAIL COMMIT_AUTHOR_NAME SHA1_FILE_DIRECTORY
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 44ec46a9
......@@ -124,7 +124,7 @@ DIFF_OBJS = \
LIB_OBJS = \
blob.o commit.o connect.o count-delta.o csum-file.o \
date.o diff-delta.o entry.o gitenv.o ident.o index.o \
date.o diff-delta.o entry.o ident.o index.o \
object.o pack-check.o patch-delta.o path.o pkt-line.o \
quote.o read-cache.o refs.o rev-cache.o run-command.o \
server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
......
......@@ -53,17 +53,6 @@
*/
#define DEFAULT_GIT_PORT 9418
/*
* Environment variables transition.
* We accept older names for now but warn.
*/
extern char *gitenv_bc(const char *);
#ifdef __GNUC__
#define gitenv(e) (getenv(e) ? : gitenv_bc(e))
#else
#define gitenv(e) (getenv(e) ? getenv(e) : gitenv_bc(e))
#endif
/*
* Basic data structures for the directory cache
*/
......
......@@ -32,10 +32,10 @@ static const char *external_diff(void)
*
* GIT_DIFF_OPTS="-c";
*/
external_diff_cmd = gitenv("GIT_EXTERNAL_DIFF");
external_diff_cmd = getenv("GIT_EXTERNAL_DIFF");
/* In case external diff fails... */
env_diff_opts = gitenv("GIT_DIFF_OPTS");
env_diff_opts = getenv("GIT_DIFF_OPTS");
if (env_diff_opts) diff_opts = env_diff_opts;
done_preparing = 1;
......
......@@ -392,7 +392,7 @@ static int fsck_head_link(void)
static char path[PATH_MAX], link[PATH_MAX];
const char *git_dir;
git_dir = gitenv(GIT_DIR_ENVIRONMENT);
git_dir = getenv(GIT_DIR_ENVIRONMENT);
if (!git_dir) git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
snprintf(path, sizeof(path), "%s/HEAD", git_dir);
......
/*
* 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;
}
......@@ -355,7 +355,7 @@ int main(int argc, char **argv)
curl = curl_easy_init();
curl_ssl_verify = gitenv("GIT_SSL_NO_VERIFY") ? 0 : 1;
curl_ssl_verify = getenv("GIT_SSL_NO_VERIFY") ? 0 : 1;
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, curl_ssl_verify);
#if LIBCURL_VERSION_NUM >= 0x070907
curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
......
......@@ -150,10 +150,10 @@ char *get_ident(const char *name, const char *email, const char *date_str)
char *git_author_info(void)
{
return get_ident(gitenv("GIT_AUTHOR_NAME"), gitenv("GIT_AUTHOR_EMAIL"), gitenv("GIT_AUTHOR_DATE"));
return get_ident(getenv("GIT_AUTHOR_NAME"), getenv("GIT_AUTHOR_EMAIL"), getenv("GIT_AUTHOR_DATE"));
}
char *git_committer_info(void)
{
return get_ident(gitenv("GIT_COMMITTER_NAME"), gitenv("GIT_COMMITTER_EMAIL"), gitenv("GIT_COMMITTER_DATE"));
return get_ident(getenv("GIT_COMMITTER_NAME"), getenv("GIT_COMMITTER_EMAIL"), getenv("GIT_COMMITTER_DATE"));
}
......@@ -226,7 +226,7 @@ int main(int argc, char **argv)
/*
* Set up the default .git directory contents
*/
git_dir = gitenv(GIT_DIR_ENVIRONMENT);
git_dir = getenv(GIT_DIR_ENVIRONMENT);
if (!git_dir) {
git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
fprintf(stderr, "defaulting to local storage area\n");
......
......@@ -45,7 +45,7 @@ char *git_path(const char *fmt, ...)
va_list args;
unsigned len;
git_dir = gitenv(GIT_DIR_ENVIRONMENT);
git_dir = getenv(GIT_DIR_ENVIRONMENT);
if (!git_dir) git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
len = strlen(git_dir);
if (len > PATH_MAX-100)
......
......@@ -87,7 +87,7 @@ static int is_toplevel_directory(void)
return !lstat(".git/HEAD", &st) &&
S_ISLNK(st.st_mode) &&
!access(".git/refs/", X_OK) &&
(gitenv(DB_ENVIRONMENT) || !access(".git/objects/", X_OK));
(getenv(DB_ENVIRONMENT) || !access(".git/objects/", X_OK));
}
const char *setup_git_directory(void)
......@@ -99,7 +99,7 @@ const char *setup_git_directory(void)
* If GIT_DIR is set explicitly, we're not going
* to do any discovery
*/
if (gitenv(GIT_DIR_ENVIRONMENT))
if (getenv(GIT_DIR_ENVIRONMENT))
return NULL;
if (!getcwd(cwd, sizeof(cwd)) || cwd[0] != '/')
......
......@@ -50,22 +50,22 @@ static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
*git_graft_file;
static void setup_git_env(void)
{
git_dir = gitenv(GIT_DIR_ENVIRONMENT);
git_dir = getenv(GIT_DIR_ENVIRONMENT);
if (!git_dir)
git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
git_object_dir = gitenv(DB_ENVIRONMENT);
git_object_dir = getenv(DB_ENVIRONMENT);
if (!git_object_dir) {
git_object_dir = xmalloc(strlen(git_dir) + 9);
sprintf(git_object_dir, "%s/objects", git_dir);
}
git_refs_dir = xmalloc(strlen(git_dir) + 6);
sprintf(git_refs_dir, "%s/refs", git_dir);
git_index_file = gitenv(INDEX_ENVIRONMENT);
git_index_file = getenv(INDEX_ENVIRONMENT);
if (!git_index_file) {
git_index_file = xmalloc(strlen(git_dir) + 7);
sprintf(git_index_file, "%s/index", git_dir);
}
git_graft_file = gitenv(GRAFT_ENVIRONMENT);
git_graft_file = getenv(GRAFT_ENVIRONMENT);
if (!git_graft_file)
git_graft_file = strdup(git_path("info/grafts"));
}
......@@ -285,7 +285,7 @@ void prepare_alt_odb(void)
struct stat st;
char *alt;
alt = gitenv(ALTERNATE_DB_ENVIRONMENT);
alt = getenv(ALTERNATE_DB_ENVIRONMENT);
if (!alt) alt = "";
sprintf(path, "%s/info/alternates", get_object_directory());
......
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#
test_description='general environment name warning test.
This test makes sure that use of deprecated environment variables
trigger the warnings from gitenv().'
env_vars='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_ALTERNATE_OBJECT_DIRECTORIES:SHA1_FILE_DIRECTORIES
GIT_OBJECT_DIRECTORY:SHA1_FILE_DIRECTORY
'
. ./test-lib.sh
export_them () {
for ev in $env_vars
do
new=$(expr "$ev" : '\(.*\):')
old=$(expr "$ev" : '.*:\(.*\)')
# Build and eval the following:
# case "${VAR+set}" in set) export VAR;; esac
evstr='case "${'$new'+set}" in set) export '$new';; esac'
eval "$evstr"
evstr='case "${'$old'+set}" in set) export '$old';; esac'
eval "$evstr"
done
}
date >path0
git-update-index --add path0
tree=$(git-write-tree)
AUTHOR_DATE='Wed May 11 23:55:18 2005'
AUTHOR_EMAIL='author@example.xz'
AUTHOR_NAME='A U Thor'
COMMIT_AUTHOR_EMAIL='author@example.xz'
COMMIT_AUTHOR_NAME='A U Thor'
SHA1_FILE_DIRECTORY=.git/objects
export_them
echo 'foo' | git-commit-tree $tree >/dev/null 2>errmsg
cat >expected-err <<\EOF
warning: Attempting to use SHA1_FILE_DIRECTORY
warning: GIT environment variables have been renamed.
warning: Please adjust your scripts and environment.
warning: old AUTHOR_DATE => new GIT_AUTHOR_DATE
warning: old AUTHOR_EMAIL => new GIT_AUTHOR_EMAIL
warning: old AUTHOR_NAME => new GIT_AUTHOR_NAME
warning: old COMMIT_AUTHOR_EMAIL => new GIT_COMMITTER_EMAIL
warning: old COMMIT_AUTHOR_NAME => new GIT_COMMITTER_NAME
warning: old SHA1_FILE_DIRECTORY => new GIT_OBJECT_DIRECTORY
EOF
sed -ne '/^warning: /p' <errmsg >generated-err
test_expect_success \
'using old names should issue warnings.' \
'cmp generated-err expected-err'
for ev in $env_vars
do
new=$(expr "$ev" : '\(.*\):')
old=$(expr "$ev" : '.*:\(.*\)')
# Build and eval the following:
# NEWENV=$OLDENV
evstr="$new=\$$old"
eval "$evstr"
done
export_them
echo 'foo' | git-commit-tree $tree >/dev/null 2>errmsg
sed -ne '/^warning: /p' <errmsg >generated-err
test_expect_success \
'using old names but having new names should not issue warnings.' \
'cmp generated-err /dev/null'
test_done
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#
test_description='Using new and old environment names.
This test makes sure that use of deprecated environment variables
still works, using both new and old names makes new one take precedence,
and GIT_DIR and GIT_ALTERNATE_OBJECT_DIRECTORIES mechanism works.'
env_vars='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_ALTERNATE_OBJECT_DIRECTORIES:SHA1_FILE_DIRECTORIES
GIT_OBJECT_DIRECTORY:SHA1_FILE_DIRECTORY
'
. ./test-lib.sh
export_them () {
for ev in $env_vars
do
new=$(expr "$ev" : '\(.*\):')
old=$(expr "$ev" : '.*:\(.*\)')
# Build and eval the following:
# case "${VAR+set}" in set) export VAR;; esac
evstr='case "${'$new'+set}" in set) export '$new';; esac'
eval "$evstr"
evstr='case "${'$old'+set}" in set) export '$old';; esac'
eval "$evstr"
done
}
SHA1_FILE_DIRECTORY=.svn/objects ;# whoa
export SHA1_FILE_DIRECTORY
rm -fr .git
mkdir .svn
test_expect_success \
'using SHA1_FILE_DIRECTORY in git-init-db' \
'git-init-db && test -d .svn/objects/cb'
unset SHA1_FILE_DIRECTORY
GIT_DIR=.svn
export GIT_DIR
rm -fr .git .svn
mkdir .svn
test_expect_success \
'using GIT_DIR in git-init-db' \
'git-init-db && test -d .svn/objects/cb'
date >path0
test_expect_success \
'using GIT_DIR in git-update-index' \
'git-update-index --add path0 && test -f .svn/index'
sedScript='s|\(..\)|.svn/objects/\1/|'
test_expect_success \
'using GIT_DIR in git-write-tree' \
'tree=$(git-write-tree) &&
test -f $(echo "$tree" | sed -e "$sedScript")'
AUTHOR_DATE='Sat May 14 00:00:00 2005 -0000'
AUTHOR_EMAIL='author@example.xz'
AUTHOR_NAME='A U Thor'
COMMIT_AUTHOR_EMAIL='author@example.xz'
COMMIT_AUTHOR_NAME='A U Thor'
export_them
test_expect_success \
'using GIT_DIR and old variable names in git-commit-tree' \
'commit=$(echo foo | git-commit-tree $tree) &&
test -f $(echo "$commit" | sed -e "$sedScript")'
test_expect_success \
'using GIT_DIR in git-cat-file' \
'git-cat-file commit $commit >current'
cat >expected <<\EOF
author A U Thor <author@example.xz>
committer A U Thor <author@example.xz>
EOF
test_expect_success \
'verify old AUTHOR variables were used correctly in commit' \
'sed -ne '\''/^\(author\)/s|>.*|>|p'\'' -e'\''/^\(committer\)/s|>.*|>|p'\''\ current > out && cmp out expected'
unset GIT_DIR
test_expect_success \
'git-init-db without GIT_DIR' \
'git-init-db && test -d .git && test -d .git/objects/ef'
SHA1_FILE_DIRECTORIES=.svn/objects
export SHA1_FILE_DIRECTORIES
test_expect_success \
'using SHA1_FILE_DIRECTORIES with git-ls-tree' \
'git-ls-tree $commit && git-ls-tree $tree'
GIT_AUTHOR_DATE='Sat May 14 12:00:00 2005 -0000'
GIT_AUTHOR_EMAIL='rohtua@example.xz'
GIT_AUTHOR_NAME='R O Htua'
GIT_COMMITTER_EMAIL='rohtua@example.xz'
GIT_COMMITTER_NAME='R O Htua'
export_them
sedScript='s|\(..\)|.git/objects/\1/|'
test_expect_success \
'using new author variables with git-commit-tree' \
'commit2=$(echo foo | git-commit-tree $tree) &&
test -f $(echo "$commit2" | sed -e "$sedScript")'
GIT_ALTERNATE_OBJECT_DIRECTORIES=.git/objects
GIT_DIR=nowhere
export GIT_DIR GIT_ALTERNATE_OBJECT_DIRECTORIES
test_expect_success \
'git-cat-file with GIT_DIR and GIT_ALTERNATE_OBJECT_DIRECTORIES' \
'git-cat-file commit $commit2 >current'
cat >expected <<\EOF
author R O Htua <rohtua@example.xz>
committer R O Htua <rohtua@example.xz>
EOF
test_expect_success \
'verify new AUTHOR variables were used correctly in commit.' \
'sed -ne '\''/^\(author\)/s|>.*|>|p'\'' -e'\''/^\(committer\)/s|>.*|>|p'\''\ current > out && cmp out expected'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册