Thread (6 messages) flat view 6 messages, 2 authors, 2016-06-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help