Re: [PATCH 2/2] dir: test_one_path: fix inconsistent behavior due to missing '/'

2013-08-25 Thread Jonathan Nieder
Eric Sunshine wrote:

 Although undocumented, directory_exists_in_index_icase(dirname,len)
 unconditionally assumes the presence of a '/' at dirname[len] (despite
 being past the end-of-string). Callers are expected to respect
[...]
Fix this problem.

So, does this fix the problem by changing
directory_exists_in_index_icase() to be more liberal in what it
accepts, or callers to be more conservative in what they pass in?

Please forgive my laziness.  I ask in order to save future readers the
time of digging into the code.

Thanks,
Jonathan
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] dir: test_one_path: fix inconsistent behavior due to missing '/'

2013-08-25 Thread Eric Sunshine
On Sun, Aug 25, 2013 at 2:00 AM, Jonathan Nieder jrnie...@gmail.com wrote:
 Eric Sunshine wrote:

 Although undocumented, directory_exists_in_index_icase(dirname,len)
 unconditionally assumes the presence of a '/' at dirname[len] (despite
 being past the end-of-string). Callers are expected to respect
 [...]
Fix this problem.

 So, does this fix the problem by changing
 directory_exists_in_index_icase() to be more liberal in what it
 accepts, or callers to be more conservative in what they pass in?

It places the onus upon the caller. As mentioned in the cover letter
[1], I was not happy with this solution. Junio felt likewise. A
follow-up series [2] fixes both directory_exists_in_index() and
directory_exists_in_index_icase() to be more liberal in what they
accept, relieving the caller of the burden. By the time that series
was posted, however, Junio and Peff had decided that a fix at a more
fundamental level would be better (a conclusion with which I agree,
but for which I do not yet have sufficient knowledge about git
internals to implement). In the meantime, as an interim bug fix, Junio
decided [3] to apply the patch to which you responded (but with an
updated commit message).

[1]: http://thread.gmane.org/gmane.comp.version-control.git/232796
[2]: http://thread.gmane.org/gmane.comp.version-control.git/232833
[3]: http://thread.gmane.org/gmane.comp.version-control.git/232833/focus=232837

 Please forgive my laziness.  I ask in order to save future readers the
 time of digging into the code.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] dir: test_one_path: fix inconsistent behavior due to missing '/'

2013-08-25 Thread Junio C Hamano
Eric Sunshine sunsh...@sunshineco.com writes:

 ... A
 follow-up series [2] fixes both directory_exists_in_index() and
 directory_exists_in_index_icase() to be more liberal in what they
 accept, relieving the caller of the burden. By the time that series
 was posted, however, Junio and Peff had decided that a fix at a more
 fundamental level would be better (a conclusion with which I agree,

Thanks for a summary; the last would be better is a qualified one,
though.

My understanding is that we agreed that it would be better *if* we
can fix it at a more fundamental level. I looked at the codepaths
involved just enough to make that off the cuff suggestion and no
deeper than that, and I suspect neither did Peff.

If any of us looked at the problem deep enough, we may realize that
it would affect too many things, and $gmane/232833/focus=232835
(your second round) may turn out to be a better solution.  I think
none of us know yet.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] dir: test_one_path: fix inconsistent behavior due to missing '/'

2013-08-22 Thread Eric Sunshine
Although undocumented, directory_exists_in_index_icase(dirname,len)
unconditionally assumes the presence of a '/' at dirname[len] (despite
being past the end-of-string). Callers are expected to respect this
assumption by ensuring that a '/' is present beyond the last character
of the passed path. directory_exists_in_index(), on the other hand,
does not assume nor care about a trailing '/' beyond end-of-string.

2eac2a4cc4bdc8d7 (ls-files -k: a directory only can be killed if the
index has a non-directory; 2013-08-15) adds a caller which forgets to
ensure the trailing '/', thus leading to inconsistent behavior between
directory_exists_in_index() and directory_exists_in_index_icase()
depending upon the setting of core.ignorecase. Fix this problem.

This also fixes an initially-unnoticed failure in a t3010 test added by
3c56875176390eee (t3010: update to demonstrate ls-files -k
optimization pitfalls; 2013-08-15) when core.ignorecase is true.

Signed-off-by: Eric Sunshine sunsh...@sunshineco.com
---
 dir.c   | 12 +---
 t/t3103-ls-tree-misc.sh |  2 +-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/dir.c b/dir.c
index edd666a..a52c6f9 100644
--- a/dir.c
+++ b/dir.c
@@ -1160,9 +1160,15 @@ static enum path_treatment treat_one_path(struct 
dir_struct *dir,
 */
if ((dir-flags  DIR_COLLECT_KILLED_ONLY) 
(dtype == DT_DIR) 
-   !has_path_in_index 
-   (directory_exists_in_index(path-buf, path-len) == 
index_nonexistent))
-   return path_none;
+   !has_path_in_index) {
+   strbuf_addch(path, '/');
+   if (directory_exists_in_index(path-buf, path-len - 1) ==
+   index_nonexistent) {
+   strbuf_setlen(path, path-len - 1);
+   return path_none;
+   }
+   strbuf_setlen(path, path-len - 1);
+   }
 
exclude = is_excluded(dir, path-buf, dtype);
 
diff --git a/t/t3103-ls-tree-misc.sh b/t/t3103-ls-tree-misc.sh
index fd95991..9fb1706 100755
--- a/t/t3103-ls-tree-misc.sh
+++ b/t/t3103-ls-tree-misc.sh
@@ -22,7 +22,7 @@ test_expect_success 'ls-tree fails with non-zero exit code on 
broken tree' '
test_must_fail git ls-tree -r HEAD
 '
 
-test_expect_failure 'ls-tree directory core.ignorecase' '
+test_expect_success 'ls-tree directory core.ignorecase' '
cat expect -\EOF 
d/e/f
EOF
-- 
1.8.4.rc4.529.g78818d7

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html