Re: [PATCH v4] Add an explicit GIT_DIR to the list of excludes
From: Duy Nguyen <hidden>
Date: 2016-06-15 23:01:24
On Tue, May 27, 2014 at 10:56 AM, Pasha Bolokhov [off-list ref] wrote:
quoted hunk ↗ jump to hunk
@@ -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