On Fri, Aug 01, 2008 at 12:42:44PM -0700, Junio C Hamano wrote: > > Ok, earlier I was confused who was proposing what for what purpose, but > that one was not just "a bit hackish" but an unacceptable hack ;-) Thanks for correct my wording ;-) > > Perhaps you would want to do the s/write_object/flags/ conversion, like > this? Yes, it was my prefered choice to change these index_xx functions. I have applied your patch and then corrected mine to use flags. See below. I wonder if something should be done about other places where index_xx functions are called. I have looked at them and all they use either 0 or 1 (boolean expression which will be evaluated to 0 or 1), so they should work as is, but I can correct them to use HASH_OBJECT_DO_CREATE instead of 1 if it helps with readability. -- 8< -- From: Dmitry Potapov <dpotapov@xxxxxxxxx> Date: Thu, 31 Jul 2008 21:10:26 +0400 Subject: [PATCH] hash-object --no-filters The --no-filters option makes git hash-object to work as there were no input filters. This option is useful for importers such as git-svn to put new version of files as is even if autocrlf is set. Signed-off-by: Dmitry Potapov <dpotapov@xxxxxxxxx> --- Documentation/git-hash-object.txt | 6 ++++++ hash-object.c | 28 +++++++++++++++------------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Documentation/git-hash-object.txt b/Documentation/git-hash-object.txt index ac928e1..69a17c7 100644 --- a/Documentation/git-hash-object.txt +++ b/Documentation/git-hash-object.txt @@ -35,6 +35,12 @@ OPTIONS --stdin-paths:: Read file names from stdin instead of from the command-line. +--no-filters:: + If this option is given then the file is hashed as is ignoring + all filters specified in the configuration, including crlf + conversion. If the file is read from standard input then no + filters is always implied. + Author ------ Written by Junio C Hamano <gitster@xxxxxxxxx> diff --git a/hash-object.c b/hash-object.c index 46c06a9..2dd7283 100644 --- a/hash-object.c +++ b/hash-object.c @@ -8,7 +8,7 @@ #include "blob.h" #include "quote.h" -static void hash_object(const char *path, enum object_type type, int write_object) +static void hash_object(const char *path, enum object_type type, int flags) { int fd; struct stat st; @@ -16,23 +16,23 @@ static void hash_object(const char *path, enum object_type type, int write_objec fd = open(path, O_RDONLY); if (fd < 0 || fstat(fd, &st) < 0 || - index_fd(sha1, fd, &st, write_object, type, path)) - die(write_object + index_fd(sha1, fd, &st, flags, type, path)) + die((flags & HASH_OBJECT_DO_CREATE) ? "Unable to add %s to database" : "Unable to hash %s", path); printf("%s\n", sha1_to_hex(sha1)); maybe_flush_or_die(stdout, "hash to stdout"); } -static void hash_stdin(const char *type, int write_object) +static void hash_stdin(const char *type, int flags) { unsigned char sha1[20]; - if (index_pipe(sha1, 0, type, write_object)) + if (index_pipe(sha1, 0, type, flags)) die("Unable to add stdin to database"); printf("%s\n", sha1_to_hex(sha1)); } -static void hash_stdin_paths(const char *type, int write_objects) +static void hash_stdin_paths(const char *type, int flags) { struct strbuf buf, nbuf; @@ -45,7 +45,7 @@ static void hash_stdin_paths(const char *type, int write_objects) die("line is badly quoted"); strbuf_swap(&buf, &nbuf); } - hash_object(buf.buf, type_from_string(type), write_objects); + hash_object(buf.buf, type_from_string(type), flags); } strbuf_release(&buf); strbuf_release(&nbuf); @@ -58,7 +58,7 @@ int main(int argc, char **argv) { int i; const char *type = blob_type; - int write_object = 0; + int flags = 0; const char *prefix = NULL; int prefix_length = -1; int no_more_flags = 0; @@ -80,7 +80,7 @@ int main(int argc, char **argv) prefix_length = prefix ? strlen(prefix) : 0; } - write_object = 1; + flags |= HASH_OBJECT_DO_CREATE; } else if (!strcmp(argv[i], "--")) { no_more_flags = 1; @@ -104,6 +104,8 @@ int main(int argc, char **argv) die("Multiple --stdin arguments are not supported"); hashstdin = 1; } + else if (!strcmp(argv[i], "--no-filters")) + flags |= HASH_OBJECT_LITERALLY; else usage(hash_object_usage); } @@ -116,21 +118,21 @@ int main(int argc, char **argv) } if (hashstdin) { - hash_stdin(type, write_object); + hash_stdin(type, flags); hashstdin = 0; } if (0 <= prefix_length) arg = prefix_filename(prefix, prefix_length, arg); - hash_object(arg, type_from_string(type), write_object); + hash_object(arg, type_from_string(type), flags); no_more_flags = 1; } } if (stdin_paths) - hash_stdin_paths(type, write_object); + hash_stdin_paths(type, flags); if (hashstdin) - hash_stdin(type, write_object); + hash_stdin(type, flags); return 0; } -- 1.6.0.rc1.33.gb756f -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html