Merge branch 'maint'

* maint:
  git-am -i: report rewritten title
  git grep shows the same hit repeatedly for unmerged paths
  Do check_repository_format() early (re-fix)
  Do check_repository_format() early
  Add missing inside_work_tree setting in setup_git_directory_gently
This commit is contained in:
Junio C Hamano 2007-12-05 17:49:13 -08:00
commit 27ee189163
4 changed files with 86 additions and 13 deletions

View File

@ -343,12 +343,12 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
memcpy(name + 2, ce->name, len + 1); memcpy(name + 2, ce->name, len + 1);
} }
argv[argc++] = name; argv[argc++] = name;
if (argc < MAXARGS) if (MAXARGS <= argc) {
continue; status = flush_grep(opt, argc, nr, argv, &kept);
status = flush_grep(opt, argc, nr, argv, &kept); if (0 < status)
if (0 < status) hit = 1;
hit = 1; argc = nr + kept;
argc = nr + kept; }
if (ce_stage(ce)) { if (ce_stage(ce)) {
do { do {
i++; i++;

View File

@ -117,6 +117,10 @@ It does not apply to blobs recorded in its index."
unset GITHEAD_$his_tree unset GITHEAD_$his_tree
} }
reread_subject () {
git stripspace <"$1" | sed -e 1q
}
prec=4 prec=4
dotest=.dotest sign= utf8=t keep= skip= interactive= resolved= binary= dotest=.dotest sign= utf8=t keep= skip= interactive= resolved= binary=
resolvemsg= resume= resolvemsg= resume=
@ -376,6 +380,7 @@ do
[aA]*) action=yes interactive= ;; [aA]*) action=yes interactive= ;;
[nN]*) action=skip ;; [nN]*) action=skip ;;
[eE]*) git_editor "$dotest/final-commit" [eE]*) git_editor "$dotest/final-commit"
SUBJECT=$(reread_subject "$dotest/final-commit")
action=again ;; action=again ;;
[vV]*) action=again [vV]*) action=again
LESS=-S ${PAGER:-less} "$dotest/patch" ;; LESS=-S ${PAGER:-less} "$dotest/patch" ;;

36
setup.c
View File

@ -222,6 +222,22 @@ void setup_work_tree(void)
initialized = 1; initialized = 1;
} }
static int check_repository_format_gently(int *nongit_ok)
{
git_config(check_repository_format_version);
if (GIT_REPO_VERSION < repository_format_version) {
if (!nongit_ok)
die ("Expected git repo version <= %d, found %d",
GIT_REPO_VERSION, repository_format_version);
warning("Expected git repo version <= %d, found %d",
GIT_REPO_VERSION, repository_format_version);
warning("Please upgrade Git");
*nongit_ok = -1;
return -1;
}
return 0;
}
/* /*
* We cannot decide in this function whether we are in the work tree or * We cannot decide in this function whether we are in the work tree or
* not, since the config can only be read _after_ this function was called. * not, since the config can only be read _after_ this function was called.
@ -246,8 +262,15 @@ const char *setup_git_directory_gently(int *nongit_ok)
static char buffer[1024 + 1]; static char buffer[1024 + 1];
const char *retval; const char *retval;
if (!work_tree_env) if (!work_tree_env) {
return set_work_tree(gitdirenv); retval = set_work_tree(gitdirenv);
/* config may override worktree */
if (check_repository_format_gently(nongit_ok))
return NULL;
return retval;
}
if (check_repository_format_gently(nongit_ok))
return NULL;
retval = get_relative_cwd(buffer, sizeof(buffer) - 1, retval = get_relative_cwd(buffer, sizeof(buffer) - 1,
get_git_work_tree()); get_git_work_tree());
if (!retval || !*retval) if (!retval || !*retval)
@ -286,6 +309,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
if (!work_tree_env) if (!work_tree_env)
inside_work_tree = 0; inside_work_tree = 0;
setenv(GIT_DIR_ENVIRONMENT, ".", 1); setenv(GIT_DIR_ENVIRONMENT, ".", 1);
check_repository_format_gently(nongit_ok);
return NULL; return NULL;
} }
chdir(".."); chdir("..");
@ -306,6 +330,8 @@ const char *setup_git_directory_gently(int *nongit_ok)
if (!work_tree_env) if (!work_tree_env)
inside_work_tree = 1; inside_work_tree = 1;
git_work_tree_cfg = xstrndup(cwd, offset); git_work_tree_cfg = xstrndup(cwd, offset);
if (check_repository_format_gently(nongit_ok))
return NULL;
if (offset == len) if (offset == len)
return NULL; return NULL;
@ -356,11 +382,7 @@ int check_repository_format_version(const char *var, const char *value)
int check_repository_format(void) int check_repository_format(void)
{ {
git_config(check_repository_format_version); return check_repository_format_gently(NULL);
if (GIT_REPO_VERSION < repository_format_version)
die ("Expected git repo version <= %d, found %d",
GIT_REPO_VERSION, repository_format_version);
return 0;
} }
const char *setup_git_directory(void) const char *setup_git_directory(void)

46
t/t1302-repo-version.sh Executable file
View File

@ -0,0 +1,46 @@
#!/bin/sh
#
# Copyright (c) 2007 Nguyễn Thái Ngọc Duy
#
test_description='Test repository version check'
. ./test-lib.sh
cat >test.patch <<EOF
diff --git a/test.txt b/test.txt
new file mode 100644
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+123
EOF
test_create_repo "test"
test_create_repo "test2"
GIT_CONFIG=test2/.git/config git config core.repositoryformatversion 99 || exit 1
test_expect_success 'gitdir selection on normal repos' '
(test "$(git config core.repositoryformatversion)" = 0 &&
cd test &&
test "$(git config core.repositoryformatversion)" = 0)'
# Make sure it would stop at test2, not trash
test_expect_success 'gitdir selection on unsupported repo' '
(cd test2 &&
test "$(git config core.repositoryformatversion)" = 99)'
test_expect_success 'gitdir not required mode' '
(git apply --stat test.patch &&
cd test && git apply --stat ../test.patch &&
cd ../test2 && git apply --stat ../test.patch)'
test_expect_success 'gitdir required mode on normal repos' '
(git apply --check --index test.patch &&
cd test && git apply --check --index ../test.patch)'
test_expect_failure 'gitdir required mode on unsupported repo' '
(cd test2 && git apply --check --index ../test.patch)'
test_done