diff options
author | Junio C Hamano <junkio@cox.net> | 2005-11-06 17:26:31 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-11-06 17:26:31 -0800 |
commit | fcbc3083e37f3c025d85d7b2c8a1c53d07a81fac (patch) | |
tree | 49ac95e5ebfd28b32ec1a23a0982900426f0c06c | |
parent | 0cfddacdcca229deca9a1dcdf8628bf168171908 (diff) | |
download | git-fcbc3083e37f3c025d85d7b2c8a1c53d07a81fac.tar.gz git-fcbc3083e37f3c025d85d7b2c8a1c53d07a81fac.tar.xz |
ls-files: --others should not say unmerged paths are unknown.
Jon Loeliger noticed that an unmerged path appears as
"Untracked" in git-status output, even though we show the same
path as updated/changed. Since --others means "we have not told
git about that path", we should not show unmerged paths --
obviously, git knows about them; it just does not know what we
want to do about them yet.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | ls-files.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/ls-files.c b/ls-files.c index d9c8b215f..f7653e7d3 100644 --- a/ls-files.c +++ b/ls-files.c @@ -348,6 +348,29 @@ static void show_dir_entry(const char *tag, struct nond_on_fs *ent) putchar(line_terminator); } +static void show_other_files(void) +{ + int i; + for (i = 0; i < nr_dir; i++) { + /* We should not have a matching entry, but we + * may have an unmerged entry for this path. + */ + struct nond_on_fs *ent = dir[i]; + int pos = cache_name_pos(ent->name, ent->len); + struct cache_entry *ce; + if (0 <= pos) + die("bug in show-other-files"); + pos = -pos - 1; + if (pos < active_nr) { + ce = active_cache[pos]; + if (ce_namelen(ce) == ent->len && + !memcmp(ce->name, ent->name, ent->len)) + continue; /* Yup, this one exists unmerged */ + } + show_dir_entry(tag_other, ent); + } +} + static void show_killed_files(void) { int i; @@ -438,8 +461,7 @@ static void show_files(void) read_directory(path, base, baselen); qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name); if (show_others) - for (i = 0; i < nr_dir; i++) - show_dir_entry(tag_other, dir[i]); + show_other_files(); if (show_killed) show_killed_files(); } |