On Thu, May 29, 2014 at 4:42 AM, Duy Nguyen <pclouds@xxxxxxxxx> wrote: >>>> + const char *worktree = get_git_work_tree(); >>>> + >>>> + if (worktree == NULL || >>>> + dir_inside_of(n_git, get_git_work_tree()) >= 0) { >>>> + struct exclude_list *el = add_exclude_list(dir, EXC_CMDL, >>>> + "GIT_DIR setup"); >>>> + >>>> + /* append a trailing slash to exclude directories */ >>>> + n_git[len] = '/'; >>>> + n_git[len + 1] = '\0'; >>>> + add_exclude(basename, "", 0, el, 0); > > Hmm.. I overlooked this bit before. So if $GIT_DIR is /something/foo, > we set to ignore "foo/". Because we know n_git must be part of > (normalized) get_git_work_tree() at this point, could we path n_git + > strlen(get_git_work_tree()) to add_exclude() instead of basename? Full > path makes sure we don't accidentally exclude too much. I guess so. In fact, dir_inside_of() already returns the relative position, can reuse that (however, that function doesn't include the leading path, making it a relative path; but it's not difficult to work around). The only uncovered situation is when GIT_DIR=WORK_TREE. But that's user's fault and I don't think we need to guarantee that GIT_DIR will be excluded then > > The case when $GIT_DIR points to a _file_ seems uncovered. > setup_git_directory() will transform the file to the directory > internally and we never know the .git file's path (so we can't exclude > it). So people could accidentally add the .git file in, then remove it > from from work tree and suddenly the work tree becomes repo-less. It's > not as bad as .git _directory_ because we don't lose valuable data. I > don't know if you want to cover this too. That's right, there is no way of knowing what the original .git file was. I guess the only way to work around this problem is to modify "read_gitfile()" so it saves the name of the original file. Then we can add both that .git-file and GIT_DIR to the exclude list. Not a big problem with me, but need to see what you guys think -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html