Subject: [PATCH] check_file_directory_conflict path fix

From: David Meybohm <[email-masked]>
Date: Thu, 26 May 2005 22:59:10 -0400

check_file_directory_conflict can give the wrong answers. This is
because the wrong length is passed to cache_name_pos. The length
passed should be the length of the whole path from the root, not
the length of each path subcomponent.

	$ git-init-db
	defaulting to local storage area
	$ mkdir path && touch path/file
	$ git-update-cache --add path/file
	$ rm path/file
	$ mkdir path/file && touch path/file/f
	$ git-update-cache --add path/file/f  <-- Conflict ignored
	$

Signed-off-by: David Meybohm <[email-masked]>
---
Index: read-cache.c
===================================================================
--- ca5fef50fb68a3afbb35e1a48ac622f7a964f021/read-cache.c  (mode:100644)
+++ uncommitted/read-cache.c  (mode:100644)
@@ -172,11 +172,13 @@
 	cp = pathbuf;
 	while (1) {
 		char *ep = strchr(cp, '/');
+		int len;
 		if (!ep)
 			break;
 		*ep = 0;    /* first cut it at slash */
+		len = ep - pathbuf;
 		pos = cache_name_pos(pathbuf,
-				     htons(create_ce_flags(ep-cp, stage)));
+				     htons(create_ce_flags(len, stage)));
 		if (0 <= pos) {
 			/* Our leading path component is registered as a file,
 			 * and we are trying to make it a directory.  This is