1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-25 14:46:09 +02:00

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: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2005-11-21 21:46:57 -08:00
parent b7884981f8
commit 9c20a47067
2 changed files with 8 additions and 6 deletions

View File

@ -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 -- "$@"

View File

@ -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);