The amount of tweaks seemed deserving of a reroll, so here it is:
* Added your test Junio, with what I figured was an appropriate commit
message describing the user-visible effect (to git-add since I think it's the
simplest to explain), the commit message for the second commit has been
reduced somewhat, to not duplicate the message completely.
* Duplicated quite a bit of the explanation from this first commit into
the last commit, in order to be more obvious about the issue it fixes, I'm
not sure if it's a bit too much?
* Reworded the last commit to not mention the full-path special case, and
replaced all occurences of in-repo with "inside work tree" or similar.
* Content-wise compared to 'pu' I've tweaked a few comments, un-inlined and
added the wtlen <= len check (and the ls-files test is new of course):
diff --git a/setup.c b/setup.c
index 32a6f6b..ba08885 100644
--- a/setup.c
+++ b/setup.c
@@ -6,8 +6,8 @@ static int inside_git_dir = -1;
static int inside_work_tree = -1;
/*
- * No checking if the path is in fact an absolute path is done, and it must
- * already be normalized.
+ * The input parameter must contain an absolute path, and it must already be
+ * normalized.
*
* Find the part of an absolute path that lies inside the work tree by
* dereferencing symlinks outside the work tree, for example:
@@ -17,7 +17,7 @@ static int inside_work_tree = -1;
* /dir/repolink/file (repolink points to /dir/repo) -> file
* /dir/repo (exactly equal to work tree) -> (empty string)
*/
-static inline int abspath_part_inside_repo(char *path)
+static int abspath_part_inside_repo(char *path)
{
size_t len;
size_t wtlen;
@@ -32,7 +32,7 @@ static inline int abspath_part_inside_repo(char *path)
off = 0;
/* check if work tree is already the prefix */
- if (strncmp(path, work_tree, wtlen) == 0) {
+ if (wtlen <= len && !strncmp(path, work_tree, wtlen)) {
if (path[wtlen] == '/') {
memmove(path, path + wtlen + 1, len - wtlen);
return 0;
@@ -47,7 +47,7 @@ static inline int abspath_part_inside_repo(char *path)
path0 = path;
path += offset_1st_component(path) + off;
- /* check each level */
+ /* check each '/'-terminated level */
while (*path) {
path++;
if (*path == '/') {
Junio C Hamano (1):
t3004: Add test for ls-files on symlinks via absolute paths
Martin Erik Werner (5):
t0060: Add test for prefix_path on symlinks via absolute paths
t0060: Add test for prefix_path when path == work tree
t0060: Add tests for prefix_path when path begins with work tree
setup: Add 'abspath_part_inside_repo' function
setup: Don't dereference in-tree symlinks for absolute paths
setup.c | 94 +++++++++++++++++++++++++++++++++++++----------
t/t0060-path-utils.sh | 21 +++++++++++
t/t3004-ls-files-basic.sh | 17 +++++++++
3 files changed, 112 insertions(+), 20 deletions(-)
--
1.8.5.2
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html