about summary refs log tree commit diff
path: root/third_party/git/convert.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/convert.c')
-rw-r--r--third_party/git/convert.c49
1 files changed, 18 insertions, 31 deletions
diff --git a/third_party/git/convert.c b/third_party/git/convert.c
index 5ead3ce678..94ff837649 100644
--- a/third_party/git/convert.c
+++ b/third_party/git/convert.c
@@ -8,7 +8,6 @@
 #include "pkt-line.h"
 #include "sub-process.h"
 #include "utf8.h"
-#include "ll-merge.h"
 
 /*
  * convert.c - convert a file when checking it out and checking it in.
@@ -270,12 +269,8 @@ static int will_convert_lf_to_crlf(struct text_stat *stats,
 static int validate_encoding(const char *path, const char *enc,
 		      const char *data, size_t len, int die_on_error)
 {
-	const char *stripped;
-
 	/* We only check for UTF here as UTF?? can be an alias for UTF-?? */
-	if (skip_iprefix(enc, "UTF", &stripped)) {
-		skip_prefix(stripped, "-", &stripped);
-
+	if (istarts_with(enc, "UTF")) {
 		/*
 		 * Check for detectable errors in UTF encodings
 		 */
@@ -289,10 +284,15 @@ static int validate_encoding(const char *path, const char *enc,
 			 */
 			const char *advise_msg = _(
 				"The file '%s' contains a byte order "
-				"mark (BOM). Please use UTF-%.*s as "
+				"mark (BOM). Please use UTF-%s as "
 				"working-tree-encoding.");
-			int stripped_len = strlen(stripped) - strlen("BE");
-			advise(advise_msg, path, stripped_len, stripped);
+			const char *stripped = NULL;
+			char *upper = xstrdup_toupper(enc);
+			upper[strlen(upper)-2] = '\0';
+			if (!skip_prefix(upper, "UTF-", &stripped))
+				skip_prefix(stripped, "UTF", &stripped);
+			advise(advise_msg, path, stripped);
+			free(upper);
 			if (die_on_error)
 				die(error_msg, path, enc);
 			else {
@@ -307,7 +307,12 @@ static int validate_encoding(const char *path, const char *enc,
 				"mark (BOM). Please use UTF-%sBE or UTF-%sLE "
 				"(depending on the byte order) as "
 				"working-tree-encoding.");
+			const char *stripped = NULL;
+			char *upper = xstrdup_toupper(enc);
+			if (!skip_prefix(upper, "UTF-", &stripped))
+				skip_prefix(stripped, "UTF", &stripped);
 			advise(advise_msg, path, stripped, stripped);
+			free(upper);
 			if (die_on_error)
 				die(error_msg, path, enc);
 			else {
@@ -412,7 +417,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
 	if (!dst) {
 		/*
 		 * We could add the blob "as-is" to Git. However, on checkout
-		 * we would try to re-encode to the original encoding. This
+		 * we would try to reencode to the original encoding. This
 		 * would fail and we would leave the user with a messed-up
 		 * working tree. Let's try to avoid this by screaming loud.
 		 */
@@ -1146,7 +1151,7 @@ static int ident_to_worktree(const char *src, size_t len,
 	/* are we "faking" in place editing ? */
 	if (src == buf->buf)
 		to_free = strbuf_detach(buf, NULL);
-	hash_object_file(the_hash_algo, src, len, "blob", &oid);
+	hash_object_file(src, len, "blob", &oid);
 
 	strbuf_grow(buf, len + cnt * (the_hash_algo->hexsz + 3));
 	for (;;) {
@@ -1288,11 +1293,10 @@ struct conv_attrs {
 	const char *working_tree_encoding; /* Supported encoding or default encoding if NULL */
 };
 
-static struct attr_check *check;
-
 static void convert_attrs(const struct index_state *istate,
 			  struct conv_attrs *ca, const char *path)
 {
+	static struct attr_check *check;
 	struct attr_check_item *ccheck = NULL;
 
 	if (!check) {
@@ -1335,23 +1339,6 @@ static void convert_attrs(const struct index_state *istate,
 		ca->crlf_action = CRLF_AUTO_INPUT;
 }
 
-void reset_parsed_attributes(void)
-{
-	struct convert_driver *drv, *next;
-
-	attr_check_free(check);
-	check = NULL;
-	reset_merge_attributes();
-
-	for (drv = user_convert; drv; drv = next) {
-		next = drv->next;
-		free((void *)drv->name);
-		free(drv);
-	}
-	user_convert = NULL;
-	user_convert_tail = NULL;
-}
-
 int would_convert_to_git_filter_fd(const struct index_state *istate, const char *path)
 {
 	struct conv_attrs ca;
@@ -1940,7 +1927,7 @@ static struct stream_filter *ident_filter(const struct object_id *oid)
  * the contents cannot be filtered without reading the whole thing
  * in-core.
  *
- * Note that you would be crazy to set CRLF, smudge/clean or ident to a
+ * Note that you would be crazy to set CRLF, smuge/clean or ident to a
  * large binary blob you would want us not to slurp into the memory!
  */
 struct stream_filter *get_stream_filter(const struct index_state *istate,