X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=update-index.c;h=661b86a979e7c75ea9b3ca9d030aebb44693ee04;hb=211b5f9e62cc961acda59392fbf5a3efa8106c97;hp=ef82b8620cdb0e8ae41a27c1f85411998e7266eb;hpb=caf4f582b2bb4d5582540aa49d29749b2600cd03;p=git.git diff --git a/update-index.c b/update-index.c index ef82b862..661b86a9 100644 --- a/update-index.c +++ b/update-index.c @@ -5,6 +5,7 @@ */ #include "cache.h" #include "strbuf.h" +#include "quote.h" /* * Default to not allowing changes to the list of files. The @@ -338,6 +339,7 @@ static void read_index_info(int line_termination) strbuf_init(&buf); while (1) { char *ptr; + char *path_name; unsigned char sha1[20]; unsigned int mode; @@ -352,14 +354,22 @@ static void read_index_info(int line_termination) goto bad_line; ptr += 42; - if (!verify_path(ptr)) { - fprintf(stderr, "Ignoring path %s\n", ptr); + + if (line_termination && ptr[0] == '"') + path_name = unquote_c_style(ptr, NULL); + else + path_name = ptr; + + if (!verify_path(path_name)) { + fprintf(stderr, "Ignoring path %s\n", path_name); + if (path_name != ptr) + free(path_name); continue; } if (!mode) { /* mode == 0 means there is no such path -- remove */ - if (remove_file_from_cache(ptr)) + if (remove_file_from_cache(path_name)) die("git-update-index: unable to remove %s", ptr); } @@ -369,10 +379,12 @@ static void read_index_info(int line_termination) * ptr[-41] is at the beginning of sha1 */ ptr[-42] = ptr[-1] = 0; - if (add_cacheinfo(buf.buf, ptr-41, ptr)) + if (add_cacheinfo(buf.buf, ptr-41, path_name)) die("git-update-index: unable to update %s", - ptr); + path_name); } + if (path_name != ptr) + free(path_name); continue; bad_line: @@ -380,6 +392,9 @@ static void read_index_info(int line_termination) } } +static const char update_index_usage[] = +"git-update-index [-q] [--add] [--replace] [--remove] [--unmerged] [--refresh] [--cacheinfo] [--chmod=(+|-)x] [--info-only] [--force-remove] [--stdin] [--index-info] [--ignore-missing] [-z] [--version] [--] ..."; + int main(int argc, const char **argv) { int i, newfd, entries, has_errors = 0, line_termination = '\n'; @@ -477,6 +492,8 @@ int main(int argc, const char **argv) verbose = 1; continue; } + if (!strcmp(path, "-h") || !strcmp(path, "--help")) + usage(update_index_usage); die("unknown option %s", path); } update_one(path, prefix, prefix_length);