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

Teach update-index to read from ls-tree.

git-update-index --index-info can almost be usable to read from ls-tree
output to update the index (and not the working tree file) to HEAD commit,
but not quite.  It was designed to read from git-apply --index-info
output, and does not want " blob " in ls-tree output.  Accept that as well.

This lets us update "git-checkout <ent> <path>" that used to filter the
extra " blob " string out.  Noted by Luben.
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 b7884981
......@@ -82,7 +82,6 @@ then
# rescuing paths and is never meant to remove what
# is not in the named tree-ish.
git-ls-tree -r "$new" "$@" |
sed -ne 's/^\([0-7]*\) blob \(.*\)$/\1 \2/p' |
git-update-index --index-info || exit $?
fi
git-checkout-index -f -u -- "$@"
......
......@@ -338,7 +338,7 @@ static void read_index_info(int line_termination)
struct strbuf buf;
strbuf_init(&buf);
while (1) {
char *ptr;
char *ptr, *tab;
char *path_name;
unsigned char sha1[20];
unsigned int mode;
......@@ -348,12 +348,15 @@ static void read_index_info(int line_termination)
break;
mode = strtoul(buf.buf, &ptr, 8);
if (ptr == buf.buf || *ptr != ' ' ||
get_sha1_hex(ptr + 1, sha1) ||
ptr[41] != '\t')
if (ptr == buf.buf || *ptr != ' ')
goto bad_line;
ptr += 42;
tab = strchr(ptr, '\t');
if (!tab || tab - ptr < 41)
goto bad_line;
if (get_sha1_hex(tab - 40, sha1) || tab[-41] != ' ')
goto bad_line;
ptr = tab + 1;
if (line_termination && ptr[0] == '"')
path_name = unquote_c_style(ptr, NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册