Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2012-01-10 14:46:22 -08:00
Родитель beecc7ab65 be4d2920c2
Коммит e04dc492ac
6 изменённых файлов: 93 добавлений и 35 удалений

Просмотреть файл

@ -0,0 +1,11 @@
Git v1.7.6.6 Release Notes
==========================
Fixes since v1.7.6.5
--------------------
* The code to look up attributes for paths reused entries from a wrong
directory when two paths in question are in adjacent directories and
the name of the one directory is a prefix of the other.
Also contains minor fixes and documentation updates.

Просмотреть файл

@ -0,0 +1,11 @@
Git v1.7.7.6 Release Notes
==========================
Fixes since v1.7.7.5
--------------------
* The code to look up attributes for paths reused entries from a wrong
directory when two paths in question are in adjacent directories and
the name of the one directory is a prefix of the other.
Also contains minor fixes and documentation updates.

Просмотреть файл

@ -0,0 +1,14 @@
Git v1.7.8.4 Release Notes
==========================
Fixes since v1.7.8.3
--------------------
* The code to look up attributes for paths reused entries from a wrong
directory when two paths in question are in adjacent directories and
the name of the one directory is a prefix of the other.
* "git send-email" did not properly treat sendemail.multiedit as a
boolean (e.g. setting it to "false" did not turn it off).
Also contains minor fixes and documentation updates.

Просмотреть файл

@ -1786,7 +1786,8 @@ rerere.enabled::
conflict hunks can be resolved automatically, should they be
encountered again. By default, linkgit:git-rerere[1] is
enabled if there is an `rr-cache` directory under the
`$GIT_DIR`.
`$GIT_DIR`, e.g. if "rerere" was previously used in the
repository.
sendemail.identity::
A configuration identity. When given, causes values in the

21
attr.c
Просмотреть файл

@ -495,9 +495,11 @@ static int git_attr_system(void)
static void bootstrap_attr_stack(void)
{
if (!attr_stack) {
struct attr_stack *elem;
if (attr_stack)
return;
elem = read_attr_from_array(builtin_attr);
elem->origin = NULL;
elem->prev = attr_stack;
@ -535,7 +537,6 @@ static void bootstrap_attr_stack(void)
elem->origin = NULL;
elem->prev = attr_stack;
attr_stack = elem;
}
}
static void prepare_attr_stack(const char *path)
@ -575,14 +576,17 @@ static void prepare_attr_stack(const char *path)
/*
* Pop the ones from directories that are not the prefix of
* the path we are checking.
* the path we are checking. Break out of the loop when we see
* the root one (whose origin is an empty string "") or the builtin
* one (whose origin is NULL) without popping it.
*/
while (attr_stack && attr_stack->origin) {
while (attr_stack->origin) {
int namelen = strlen(attr_stack->origin);
elem = attr_stack;
if (namelen <= dirlen &&
!strncmp(elem->origin, path, namelen))
!strncmp(elem->origin, path, namelen) &&
(!namelen || path[namelen] == '/'))
break;
debug_pop(elem);
@ -594,8 +598,15 @@ static void prepare_attr_stack(const char *path)
* Read from parent directories and push them down
*/
if (!is_bare_repository() || direction == GIT_ATTR_INDEX) {
/*
* bootstrap_attr_stack() should have added, and the
* above loop should have stopped before popping, the
* root element whose attr_stack->origin is set to an
* empty string.
*/
struct strbuf pathbuf = STRBUF_INIT;
assert(attr_stack->origin);
while (1) {
len = strlen(attr_stack->origin);
if (dirlen <= len)

Просмотреть файл

@ -159,6 +159,16 @@ test_expect_success 'relative paths' '
(cd b && attr_check ../a/b/g a/b/g)
'
test_expect_success 'prefixes are not confused with leading directories' '
attr_check a_plus/g unspecified &&
cat >expect <<-\EOF &&
a/g: test: a/g
a_plus/g: test: unspecified
EOF
git check-attr test a/g a_plus/g >actual &&
test_cmp expect actual
'
test_expect_success 'core.attributesfile' '
attr_check global unspecified &&
git config core.attributesfile "$HOME/global-gitattributes" &&