summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b788498)
raw | patch | inline | side by side (parent: b788498)
author | Junio C Hamano <junkio@cox.net> | |
Tue, 22 Nov 2005 05:46:57 +0000 (21:46 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Thu, 24 Nov 2005 06:25:55 +0000 (22:25 -0800) |
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>
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>
git-checkout.sh | patch | blob | history | |
update-index.c | patch | blob | history |
diff --git a/git-checkout.sh b/git-checkout.sh
index 4c08f36b591508b5d940384db603e2f4483116d6..9509ab4b9a53fd132ae74de241c3f60744b6162c 100755 (executable)
--- a/git-checkout.sh
+++ b/git-checkout.sh
# 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 -- "$@"
diff --git a/update-index.c b/update-index.c
index 5bbc3de2898caddfd019fac77c6a1daf922250cf..11b7f6a5169e0a9a957155c03c7a56667efe980c 100644 (file)
--- a/update-index.c
+++ b/update-index.c
struct strbuf buf;
strbuf_init(&buf);
while (1) {
- char *ptr;
+ char *ptr, *tab;
char *path_name;
unsigned char sha1[20];
unsigned int mode;
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);