On Wed, May 28, 2014 at 5:36 AM, Duy Nguyen <[email protected]> wrote:
> On Tue, May 27, 2014 at 10:56 AM, Pasha Bolokhov
> <[email protected]> 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")))"?
Then if "n_git" is "/ab" => coredump. But I agree there is logic to
this (if we check len >= 4 first). However, we still need the
basename. So I've just shortened it a bit, what do you think: (notice
the condition "i >= 0" btw)
for (i = len - 1; i >= 0 && n_git[i] != '/'; i--) ;
basename = n_git + i + 1;
if (strcmp(basename, ".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.
Reasonable
I'll send the all-updated patch including doc when ready
> --
> Duy
--
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