aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-11-06 17:26:31 -0800
committerJunio C Hamano <junkio@cox.net>2005-11-06 17:26:31 -0800
commitfcbc3083e37f3c025d85d7b2c8a1c53d07a81fac (patch)
tree49ac95e5ebfd28b32ec1a23a0982900426f0c06c
parent0cfddacdcca229deca9a1dcdf8628bf168171908 (diff)
downloadgit-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.c26
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();
}