* [PATCH] Add an explicit GIT_DIR to the list of excludes
@ 2014-05-20 23:26 Pasha Bolokhov
0 siblings, 0 replies; only message in thread
From: Pasha Bolokhov @ 2014-05-20 23:26 UTC (permalink / raw)
To: pclouds; +Cc: jrnieder, git, Pasha Bolokhov
When an explicit '--git-dir' option points to a directory inside
the work tree, git treats it as if it were any other directory.
In particular, 'git status' lists it as untracked, while 'git add -A'
stages the metadata directory entirely
Add GIT_DIR to the list of excludes in setup_standard_excludes(),
while checking that GIT_DIR is not just '.git', in which case it
would be ignored by default, and that GIT_DIR is inside GIT_WORK_TREE
Although an analogous comparison of any given path against '.git'
is done in treat_path(), this does not seem to be the right place
to compare against GIT_DIR. Instead, the excludes provide an
effective mechanism of ignoring a file/directory, and adding GIT_DIR
as an exclude is equivalent of putting it into '.gitignore'. Function
setup_standard_excludes() was chosen because that is the place where
the excludes are initialized by the commands that are concerned about
excludes
Signed-off-by: Pasha Bolokhov <pasha.bolokhov@gmail.com>
---
dir.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/dir.c b/dir.c
index 98bb50f..07e36f3 100644
--- a/dir.c
+++ b/dir.c
@@ -1588,6 +1588,26 @@ void setup_standard_excludes(struct dir_struct *dir)
{
const char *path;
char *xdg_path;
+ const char *gitdir = get_git_dir();
+
+ /* Add git directory to the ignores first */
+ if (strcmp(gitdir, ".git") != 0) { /* "--git-dir" has been given */
+ char ngit[PATH_MAX + 1];
+
+ /*
+ * See if GIT_DIR is inside the work tree; need to normalize
+ * 'gitdir' but 'get_git_work_tree()' always appears absolute
+ * and normalized
+ */
+ normalize_path_copy(ngit, real_path(absolute_path(gitdir)));
+
+ if (dir_inside_of(ngit, get_git_work_tree()) >= 0) {
+ struct exclude_list *el = add_exclude_list(dir, EXC_CMDL,
+ "--git-dir option");
+
+ add_exclude(gitdir, "", 0, el, 0);
+ }
+ }
dir->exclude_per_dir = ".gitignore";
path = git_path("info/exclude");
--
1.9.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2014-05-20 23:27 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-20 23:26 [PATCH] Add an explicit GIT_DIR to the list of excludes Pasha Bolokhov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).