On Tue, May 27, 2014 at 10:56 AM, Pasha Bolokhov <pasha.bolokhov@xxxxxxxxx> wrote: > @@ -1588,6 +1588,38 @@ void setup_standard_excludes(struct dir_struct *dir) > { > const char *path; > char *xdg_path; > + const char *r_git, *gitdir = get_git_dir(); > + char *n_git, *basename; > + int len, i; > + > + /* > + * Add git directory to the ignores; do this only if > + * GIT_DIR does not end with "/.git" > + */ > + r_git = real_path(absolute_path(gitdir)); > + n_git = xmalloc(strlen(r_git) + 1 + 1); > + normalize_path_copy(n_git, r_git); > + > + len = strlen(n_git); /* real_path() has stripped trailing slash */ > + for (i = len - 1; i > 0 && !is_dir_sep(n_git[i]); i--) ; > + basename = n_git + i; > + if (is_dir_sep(*basename)) > + basename++; > + if (strcmp(basename, ".git")) { I think normalize_path_copy makes sure that dir sep is '/', so this code may be simplified to "if (strcmp(n_git, .git") && (len == 4 || strcmp(n_git + len - 5, "/.git")))"? > + 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); > + } > + } > + free(n_git); All this add-only code makes me think it may be nice to make it a separate function. A good function name could replace the comment near the beginning of the block. -- Duy -- 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