зеркало из https://github.com/microsoft/git.git
Merge branch 'maint'
* maint: fast-import: close pack before unlinking it pager: do not dup2 stderr if it is already redirected git-show: do not segfault when showing a bad tag
This commit is contained in:
Коммит
90c3302173
|
@ -340,7 +340,13 @@ int cmd_show(int argc, const char **argv, const char *prefix)
|
||||||
t->tag,
|
t->tag,
|
||||||
diff_get_color_opt(&rev.diffopt, DIFF_RESET));
|
diff_get_color_opt(&rev.diffopt, DIFF_RESET));
|
||||||
ret = show_object(o->sha1, 1, &rev);
|
ret = show_object(o->sha1, 1, &rev);
|
||||||
objects[i].item = parse_object(t->tagged->sha1);
|
if (ret)
|
||||||
|
break;
|
||||||
|
o = parse_object(t->tagged->sha1);
|
||||||
|
if (!o)
|
||||||
|
ret = error("Could not read object %s",
|
||||||
|
sha1_to_hex(t->tagged->sha1));
|
||||||
|
objects[i].item = o;
|
||||||
i--;
|
i--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -983,8 +983,10 @@ static void end_packfile(void)
|
||||||
|
|
||||||
pack_id++;
|
pack_id++;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
close(old_p->pack_fd);
|
||||||
unlink(old_p->pack_name);
|
unlink(old_p->pack_name);
|
||||||
|
}
|
||||||
free(old_p);
|
free(old_p);
|
||||||
|
|
||||||
/* We can't carry a delta across packfiles. */
|
/* We can't carry a delta across packfiles. */
|
||||||
|
|
1
pager.c
1
pager.c
|
@ -70,6 +70,7 @@ void setup_pager(void)
|
||||||
|
|
||||||
/* original process continues, but writes to the pipe */
|
/* original process continues, but writes to the pipe */
|
||||||
dup2(pager_process.in, 1);
|
dup2(pager_process.in, 1);
|
||||||
|
if (isatty(2))
|
||||||
dup2(pager_process.in, 2);
|
dup2(pager_process.in, 2);
|
||||||
close(pager_process.in);
|
close(pager_process.in);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
test_description='git show'
|
||||||
|
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
test_expect_success setup '
|
||||||
|
echo hello world >foo &&
|
||||||
|
H=$(git hash-object -w foo) &&
|
||||||
|
git tag -a foo-tag -m "Tags $H" $H &&
|
||||||
|
HH=$(expr "$H" : "\(..\)") &&
|
||||||
|
H38=$(expr "$H" : "..\(.*\)") &&
|
||||||
|
rm -f .git/objects/$HH/$H38
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'showing a tag that point at a missing object' '
|
||||||
|
test_must_fail git --no-pager show foo-tag
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Загрузка…
Ссылка в новой задаче