git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC] hash-object --no-filters

From
Dmitry Potapov <dpotapov@gmail.com>
Date
Jul 31, 2008, 19:09 UTC
Message-ID
<20080731190949.GI7008@dpotapov.dyndns.org>
In-Reply-To
<20080731104529.GE7008@dpotapov.dyndns.org>
Hi All,
I am tryint to add the --no-filters option. It is useful for git-svn
and other importers that want to add file as-is without being affected
by any filter (in particular, autocrlf). Though, the patch below works,
I am not happy with the hackish way of passing no-filter requirement
to the index_fd() function. So, I wonder what would be preferable:
- to change 'write_object' to be flags (bit 0: write_object,
  bit 1: no-filters )
- to add some global the no_filters flag to environment.c, which can
  be checked inside of convert_to_git(), so it may be used in the
  future in some other cases (though I don't see where else it can
  be useful).

Another question: currently git hash-object --input imply no filters. I don't know if it was done intentionally (it can be argued in both ways). I don't think it is reasonable now to change this behavior, so I want to add just one line to documentation, so there will be no surprise among users.

Dmitry
-- 8< --
From: Dmitry Potapov <dpotapov@gmail.com>
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.
---
 Documentation/git-hash-object.txt |    6 ++++++
 hash-object.c                     |    7 ++++++-
 2 files changed, 12 insertions(+), 1 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@pobox.com>
diff --git a/hash-object.c b/hash-object.c
index 46c06a9..1e7fe8a 100644
--- a/hash-object.c
+++ b/hash-object.c
@@ -8,6 +8,8 @@
 #include "blob.h"
 #include "quote.h"
 
+static unsigned no_filters;
+
 static void hash_object(const char *path, enum object_type type, int write_object)
 {
 	int fd;
@@ -16,7 +18,8 @@ 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))
+	    ((no_filters ? st.st_mode &= ~S_IFREG : 0),
+	     index_fd(sha1, fd, &st, write_object, type, path)))
 		die(write_object
 		    ? "Unable to add %s to database"
 		    : "Unable to hash %s", path);
@@ -104,6 +107,8 @@ int main(int argc, char **argv)
 					die("Multiple --stdin arguments are not supported");
 				hashstdin = 1;
 			}
+			else if (!strcmp(argv[i], "--no-filters"))
+				no_filters = 1;
 			else
 				usage(hash_object_usage);
 		}
-- 
1.6.0.rc1.32.gc84cb
Previous: Dmitry PotapovNext: Alexander Litvinov
Message 21 of 45 in “git-svn does not seems to work with crlf convertion enabled.”
  1. Alexander LitvinovJul 23, 2008
  2. Johannes SchindelinJul 23, 2008
  3. Alexander LitvinovJul 23, 2008
  4. Johannes SchindelinJul 23, 2008
  5. Avery PennarunJul 23, 2008
  6. Johannes SchindelinJul 23, 2008
  7. Alexander LitvinovJul 24, 2008
  8. Petr BaudisAug 6, 2008
  9. Peter HarrisAug 6, 2008
  10. Johannes SchindelinAug 6, 2008
  11. git-svn on MSysGit and why is it (going to be?) unsupportedPetr Baudis, Aug 6, 2008
  12. Avery PennarunAug 6, 2008
  13. Dmitry PotapovAug 6, 2008
  14. Dmitry PotapovJul 24, 2008
  15. Johannes SchindelinJul 24, 2008
  16. Avery PennarunJul 24, 2008
  17. Alexander LitvinovJul 30, 2008
  18. git-svn now work with crlf convertion enabled.Alexander Litvinov, Jul 31, 2008
  19. Alexander LitvinovJul 31, 2008
  20. Dmitry PotapovJul 31, 2008
  21. [RFC] hash-object --no-filtersDmitry Potapov, Jul 31, 2008
  22. Alexander LitvinovAug 1, 2008
  23. Junio C HamanoAug 1, 2008
  24. Dmitry PotapovAug 1, 2008
  25. Alexander LitvinovAug 1, 2008
  26. Dmitry PotapovAug 1, 2008
  27. Junio C HamanoAug 1, 2008
  28. Dmitry PotapovAug 1, 2008
  29. Junio C HamanoAug 1, 2008
  30. Dmitry PotapovAug 1, 2008
  31. Junio C HamanoAug 1, 2008
  32. Dmitry PotapovAug 1, 2008
  33. Junio C HamanoAug 2, 2008
  34. Dmitry PotapovAug 3, 2008
  35. Dmitry PotapovAug 3, 2008
  36. 1/5 correct argument checking test for git hash-objectDmitry Potapov, Aug 3, 2008
  37. 2/5 correct usage help string for git-hash-objectDmitry Potapov, Aug 3, 2008
  38. 3/5 use parse_options() in git hash-objectDmitry Potapov, Aug 3, 2008
  39. 4/5 add --path option to git hash-objectDmitry Potapov, Aug 3, 2008
  40. 5/5 add --no-filters option to git hash-objectDmitry Potapov, Aug 3, 2008
  41. Junio C HamanoAug 3, 2008
  42. Alexander LitvinovAug 1, 2008
  43. Dmitry PotapovAug 1, 2008
  44. Alexander LitvinovAug 4, 2008
  45. Eric WongAug 4, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.