git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Bringing git-ls-files to porcelain level
@ 2010-01-07 17:07 Nguyễn Thái Ngọc Duy
  2010-01-07 17:07 ` [PATCH 1/3] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2010-01-07 17:07 UTC (permalink / raw)
  To: git; +Cc: Nguyễn Thái Ngọc Duy

This is a hack, to scratch my itch. These patches add "git ls",
which is equivalent to "git ls-files --max-depth 1|column"

Anyone up for coloring? ;)

Nguyễn Thái Ngọc Duy (3):
  ls-files: support --max-depth
  ls-files: support -o --max-depth (more of a hack as fill_directory
    should support this)
  Add "ls", which is basically ls-files with user-friendly settings

 builtin-ls-files.c |   72 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 builtin.h          |    1 +
 git.c              |    1 +
 3 files changed, 74 insertions(+), 0 deletions(-)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/3] ls-files: support --max-depth
  2010-01-07 17:07 [PATCH 0/3] Bringing git-ls-files to porcelain level Nguyễn Thái Ngọc Duy
@ 2010-01-07 17:07 ` Nguyễn Thái Ngọc Duy
  2010-01-07 17:07 ` [PATCH 2/3] ls-files: support -o --max-depth (more of a hack as fill_directory should support this) Nguyễn Thái Ngọc Duy
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 13+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2010-01-07 17:07 UTC (permalink / raw)
  To: git; +Cc: Nguyễn Thái Ngọc Duy


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin-ls-files.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/builtin-ls-files.c b/builtin-ls-files.c
index 7382157..2bb851a 100644
--- a/builtin-ls-files.c
+++ b/builtin-ls-files.c
@@ -30,6 +30,7 @@ static int error_unmatch;
 static char *ps_matched;
 static const char *with_tree;
 static int exc_given;
+static int max_depth = 0;
 
 static const char *tag_cached = "";
 static const char *tag_unmerged = "";
@@ -232,6 +233,30 @@ static void prune_cache(const char *prefix)
 	active_nr = last;
 }
 
+/*
+ * It is assumed that prune_cache() as been called before this
+ */
+static void prune_cache_by_depth(const char *prefix, int max_depth)
+{
+	int i = active_nr-1;
+
+	while (i >= 0) {
+		int slashes = 0;
+		const char *entry = active_cache[i]->name + prefix_len;
+		while ((entry = strchr(entry, '/')) != NULL) {
+			slashes++;
+			if (slashes >= max_depth) {
+				memmove(active_cache + i, active_cache + i + 1,
+					(active_nr - i - 1) * sizeof(struct cache_entry *));
+				active_nr--;
+				break;
+			}
+			entry++;
+		}
+		i--;
+	}
+}
+
 static const char *verify_pathspec(const char *prefix)
 {
 	const char **p, *n, *prev;
@@ -476,6 +501,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 			"if any <file> is not in the index, treat this as an error"),
 		OPT_STRING(0, "with-tree", &with_tree, "tree-ish",
 			"pretend that paths removed since <tree-ish> are still present"),
+		OPT_INTEGER(0, "max-depth", &max_depth, "max recursive depth"),
 		OPT__ABBREV(&abbrev),
 		OPT_END()
 	};
@@ -541,6 +567,10 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 
 	if (prefix)
 		prune_cache(prefix);
+
+	if (max_depth)
+		prune_cache_by_depth(prefix, max_depth);
+
 	if (with_tree) {
 		/*
 		 * Basic sanity check; show-stages and show-unmerged
-- 
1.6.6.315.g1a406

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/3] ls-files: support -o --max-depth (more of a hack as fill_directory should support this)
  2010-01-07 17:07 [PATCH 0/3] Bringing git-ls-files to porcelain level Nguyễn Thái Ngọc Duy
  2010-01-07 17:07 ` [PATCH 1/3] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
@ 2010-01-07 17:07 ` Nguyễn Thái Ngọc Duy
  2010-01-07 18:01   ` Junio C Hamano
  2010-01-07 17:07 ` [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings Nguyễn Thái Ngọc Duy
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2010-01-07 17:07 UTC (permalink / raw)
  To: git; +Cc: Nguyễn Thái Ngọc Duy


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin-ls-files.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/builtin-ls-files.c b/builtin-ls-files.c
index 2bb851a..e16638e 100644
--- a/builtin-ls-files.c
+++ b/builtin-ls-files.c
@@ -51,6 +51,17 @@ static void show_dir_entry(const char *tag, struct dir_entry *ent)
 	if (!match_pathspec(pathspec, ent->name, ent->len, len, ps_matched))
 		return;
 
+	if (max_depth) {
+		int slashes = 0;
+		const char *entry = ent->name + prefix_offset;
+		while ((entry = strchr(entry, '/')) != NULL) {
+			slashes++;
+			if (slashes >= max_depth)
+				return;
+			entry++;
+		}
+	}
+
 	fputs(tag, stdout);
 	write_name_quoted(ent->name + offset, stdout, line_terminator);
 }
-- 
1.6.6.315.g1a406

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings
  2010-01-07 17:07 [PATCH 0/3] Bringing git-ls-files to porcelain level Nguyễn Thái Ngọc Duy
  2010-01-07 17:07 ` [PATCH 1/3] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
  2010-01-07 17:07 ` [PATCH 2/3] ls-files: support -o --max-depth (more of a hack as fill_directory should support this) Nguyễn Thái Ngọc Duy
@ 2010-01-07 17:07 ` Nguyễn Thái Ngọc Duy
  2010-01-07 18:01   ` Junio C Hamano
  2010-01-07 18:12   ` Matthieu Moy
  2010-01-07 17:40 ` [PATCH 0/3] Bringing git-ls-files to porcelain level Matthieu Moy
  2010-11-01 10:30 ` Kan-Ru Chen
  4 siblings, 2 replies; 13+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2010-01-07 17:07 UTC (permalink / raw)
  To: git; +Cc: Nguyễn Thái Ngọc Duy


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin-ls-files.c |   31 +++++++++++++++++++++++++++++++
 builtin.h          |    1 +
 git.c              |    1 +
 3 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/builtin-ls-files.c b/builtin-ls-files.c
index e16638e..f63b039 100644
--- a/builtin-ls-files.c
+++ b/builtin-ls-files.c
@@ -11,6 +11,7 @@
 #include "builtin.h"
 #include "tree.h"
 #include "parse-options.h"
+#include "run-command.h"
 
 static int abbrev;
 static int show_deleted;
@@ -31,6 +32,7 @@ static char *ps_matched;
 static const char *with_tree;
 static int exc_given;
 static int max_depth = 0;
+static int show_colums = 0;
 
 static const char *tag_cached = "";
 static const char *tag_unmerged = "";
@@ -461,6 +463,7 @@ static int option_parse_exclude_standard(const struct option *opt,
 
 int cmd_ls_files(int argc, const char **argv, const char *prefix)
 {
+	struct child_process cp;
 	int require_work_tree = 0, show_tag = 0;
 	struct dir_struct dir;
 	struct option builtin_ls_files_options[] = {
@@ -513,6 +516,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 		OPT_STRING(0, "with-tree", &with_tree, "tree-ish",
 			"pretend that paths removed since <tree-ish> are still present"),
 		OPT_INTEGER(0, "max-depth", &max_depth, "max recursive depth"),
+		OPT_BOOLEAN(0, "columns", &show_colums, "show in columns"),
 		OPT__ABBREV(&abbrev),
 		OPT_END()
 	};
@@ -591,6 +595,20 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 			die("ls-files --with-tree is incompatible with -s or -u");
 		overlay_tree_on_cache(with_tree, prefix);
 	}
+
+	if (show_colums) {
+		const char *argv[] = { "column", NULL };
+
+		memset(&cp, 0, sizeof(cp));
+		cp.in = -1;
+		cp.out = dup(1);
+		cp.argv = argv;
+		start_command(&cp);
+		close(1);
+		dup2(cp.in, 1);
+		close(cp.in);
+	}
+
 	show_files(&dir, prefix);
 
 	if (ps_matched) {
@@ -602,5 +620,18 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 		return bad ? 1 : 0;
 	}
 
+	if (show_colums) {
+		fflush(stdout);
+		close(1);
+		finish_command(&cp);
+	}
+
 	return 0;
 }
+
+int cmd_ls(int argc, const char **argv, const char *prefix)
+{
+	max_depth = 1;
+	show_colums = 1;
+	return cmd_ls_files(argc, argv, prefix);
+}
diff --git a/builtin.h b/builtin.h
index c3f83c0..d8980e5 100644
--- a/builtin.h
+++ b/builtin.h
@@ -61,6 +61,7 @@ extern int cmd_init_db(int argc, const char **argv, const char *prefix);
 extern int cmd_log(int argc, const char **argv, const char *prefix);
 extern int cmd_log_reflog(int argc, const char **argv, const char *prefix);
 extern int cmd_ls_files(int argc, const char **argv, const char *prefix);
+extern int cmd_ls(int argc, const char **argv, const char *prefix);
 extern int cmd_ls_tree(int argc, const char **argv, const char *prefix);
 extern int cmd_ls_remote(int argc, const char **argv, const char *prefix);
 extern int cmd_mailinfo(int argc, const char **argv, const char *prefix);
diff --git a/git.c b/git.c
index 11544cd..4aff5ec 100644
--- a/git.c
+++ b/git.c
@@ -323,6 +323,7 @@ static void handle_internal_command(int argc, const char **argv)
 		{ "init-db", cmd_init_db },
 		{ "log", cmd_log, RUN_SETUP | USE_PAGER },
 		{ "ls-files", cmd_ls_files, RUN_SETUP },
+		{ "ls", cmd_ls, RUN_SETUP },
 		{ "ls-tree", cmd_ls_tree, RUN_SETUP },
 		{ "ls-remote", cmd_ls_remote },
 		{ "mailinfo", cmd_mailinfo },
-- 
1.6.6.315.g1a406

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/3] Bringing git-ls-files to porcelain level
  2010-01-07 17:07 [PATCH 0/3] Bringing git-ls-files to porcelain level Nguyễn Thái Ngọc Duy
                   ` (2 preceding siblings ...)
  2010-01-07 17:07 ` [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings Nguyễn Thái Ngọc Duy
@ 2010-01-07 17:40 ` Matthieu Moy
  2010-01-07 17:47   ` Nguyen Thai Ngoc Duy
  2010-11-01 10:30 ` Kan-Ru Chen
  4 siblings, 1 reply; 13+ messages in thread
From: Matthieu Moy @ 2010-01-07 17:40 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy; +Cc: git

Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:

> This is a hack, to scratch my itch. These patches add "git ls",
> which is equivalent to "git ls-files --max-depth 1|column"

You also want --exclude-standard to be the default in porcelain.

I've had "alias.ls = ls-files --exclude-standard" for a while in my
~/.gitconfig ;-).

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/3] Bringing git-ls-files to porcelain level
  2010-01-07 17:40 ` [PATCH 0/3] Bringing git-ls-files to porcelain level Matthieu Moy
@ 2010-01-07 17:47   ` Nguyen Thai Ngoc Duy
  0 siblings, 0 replies; 13+ messages in thread
From: Nguyen Thai Ngoc Duy @ 2010-01-07 17:47 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: git

On 1/8/10, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
>
>  > This is a hack, to scratch my itch. These patches add "git ls",
>  > which is equivalent to "git ls-files --max-depth 1|column"
>
>
> You also want --exclude-standard to be the default in porcelain.
>
>  I've had "alias.ls = ls-files --exclude-standard" for a while in my
>  ~/.gitconfig ;-).

Yeah, just added that after realizing "git ls -o" is too annoying.
-- 
Duy

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] ls-files: support -o --max-depth (more of a hack as fill_directory should support this)
  2010-01-07 17:07 ` [PATCH 2/3] ls-files: support -o --max-depth (more of a hack as fill_directory should support this) Nguyễn Thái Ngọc Duy
@ 2010-01-07 18:01   ` Junio C Hamano
  0 siblings, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2010-01-07 18:01 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy; +Cc: git

Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:

> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---

Subject: Re: [PATCH 2/3] ls-files: support -o --max-depth (more of a hack
as fill_directory should support this)

Perhaps you would want to look at how builtin_grep()'s walker and the
walker in dir.c can be consolidated?  The former has support for
max_depth.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings
  2010-01-07 17:07 ` [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings Nguyễn Thái Ngọc Duy
@ 2010-01-07 18:01   ` Junio C Hamano
  2010-01-07 18:09     ` Nguyen Thai Ngoc Duy
  2010-01-07 18:12   ` Matthieu Moy
  1 sibling, 1 reply; 13+ messages in thread
From: Junio C Hamano @ 2010-01-07 18:01 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy; +Cc: git

Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:

> +
> +	if (show_colums) {
> +		const char *argv[] = { "column", NULL };
> +
> +		memset(&cp, 0, sizeof(cp));
> +		cp.in = -1;
> +		cp.out = dup(1);
> +		cp.argv = argv;
> +		start_command(&cp);
> +		close(1);
> +		dup2(cp.in, 1);
> +		close(cp.in);
> +	}

I think the code for columnar output used in producing "git help -a"
output should be reusable (if not, should be made reusable and reused
here).

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] Add "ls", which is basically ls-files with  user-friendly settings
  2010-01-07 18:01   ` Junio C Hamano
@ 2010-01-07 18:09     ` Nguyen Thai Ngoc Duy
  2010-01-08 14:16       ` Nguyen Thai Ngoc Duy
  0 siblings, 1 reply; 13+ messages in thread
From: Nguyen Thai Ngoc Duy @ 2010-01-07 18:09 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On 1/8/10, Junio C Hamano <gitster@pobox.com> wrote:
> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
>
>  > +
>  > +     if (show_colums) {
>  > +             const char *argv[] = { "column", NULL };
>  > +
>  > +             memset(&cp, 0, sizeof(cp));
>  > +             cp.in = -1;
>  > +             cp.out = dup(1);
>  > +             cp.argv = argv;
>  > +             start_command(&cp);
>  > +             close(1);
>  > +             dup2(cp.in, 1);
>  > +             close(cp.in);
>  > +     }
>
>
> I think the code for columnar output used in producing "git help -a"
>  output should be reusable (if not, should be made reusable and reused
>  here).

I saw that and even exported term_columns() but was too lazy to make
pretty_print_string_list() something reusable. Will think of it again
when I see this command is worth pushing forward.
-- 
Duy

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings
  2010-01-07 17:07 ` [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings Nguyễn Thái Ngọc Duy
  2010-01-07 18:01   ` Junio C Hamano
@ 2010-01-07 18:12   ` Matthieu Moy
  1 sibling, 0 replies; 13+ messages in thread
From: Matthieu Moy @ 2010-01-07 18:12 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy; +Cc: git

Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:

> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>

You should put the "which is equivalent to "git ls-files --max-depth
1|column"" part of your cover letter here I think to make the patch
self-contained.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] Add "ls", which is basically ls-files with  user-friendly settings
  2010-01-07 18:09     ` Nguyen Thai Ngoc Duy
@ 2010-01-08 14:16       ` Nguyen Thai Ngoc Duy
  0 siblings, 0 replies; 13+ messages in thread
From: Nguyen Thai Ngoc Duy @ 2010-01-08 14:16 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On 1/8/10, Nguyen Thai Ngoc Duy <pclouds@gmail.com> wrote:
> On 1/8/10, Junio C Hamano <gitster@pobox.com> wrote:
>  > I think the code for columnar output used in producing "git help -a"
>  >  output should be reusable (if not, should be made reusable and reused
>  >  here).
>
>
> I saw that and even exported term_columns() but was too lazy to make
>  pretty_print_string_list() something reusable. Will think of it again
>  when I see this command is worth pushing forward.

I think again. There are a few places that may benefit from column
display: git tag -l, git grep -l, git branch (if you have lots of
branches) and probably untracked part of "git status". Moreover, I
have to implement it anyway because Solaris does not have command
"column". How about an external "git-column"? This way we don't have
to modify lots of code for columnized output. We may want to name it
"git-pager" if we want an internal pager someday ;)
-- 
Duy

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/3] Bringing git-ls-files to porcelain level
  2010-01-07 17:07 [PATCH 0/3] Bringing git-ls-files to porcelain level Nguyễn Thái Ngọc Duy
                   ` (3 preceding siblings ...)
  2010-01-07 17:40 ` [PATCH 0/3] Bringing git-ls-files to porcelain level Matthieu Moy
@ 2010-11-01 10:30 ` Kan-Ru Chen
  2010-11-01 11:20   ` Nguyen Thai Ngoc Duy
  4 siblings, 1 reply; 13+ messages in thread
From: Kan-Ru Chen @ 2010-11-01 10:30 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy; +Cc: git

Hi,

Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:

> This is a hack, to scratch my itch. These patches add "git ls",
> which is equivalent to "git ls-files --max-depth 1|column"

What is the status of this patch?

I found it might be useful for zsh completion codes. Currently zsh _git
completion relies heavily on ls-files and can be very slow on large
repository like linux kernel.

If ls-files supports --max-depth then zsh can do incremental
completion. (hopefully)

  kanru

-- 
“A badly written book is only a blunder. A bad
 translation of a good book is a crime.” -- Gilbert Highet

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/3] Bringing git-ls-files to porcelain level
  2010-11-01 10:30 ` Kan-Ru Chen
@ 2010-11-01 11:20   ` Nguyen Thai Ngoc Duy
  0 siblings, 0 replies; 13+ messages in thread
From: Nguyen Thai Ngoc Duy @ 2010-11-01 11:20 UTC (permalink / raw)
  To: git, Kan-Ru Chen

2010/11/1 Kan-Ru Chen <kanru@kanru.info>:
> Hi,
>
> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
>
>> This is a hack, to scratch my itch. These patches add "git ls",
>> which is equivalent to "git ls-files --max-depth 1|column"
>
> What is the status of this patch?

Stalled. I found that there's some more to do. "ls" shows directories.
"git ls" may not.

There were suggestions on improving the columnization part. I should
have resubmitted the column patches because it's really useful. Will
try to make it before the original series celebrates one year old.
-- 
Duy

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-11-01 11:33 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-07 17:07 [PATCH 0/3] Bringing git-ls-files to porcelain level Nguyễn Thái Ngọc Duy
2010-01-07 17:07 ` [PATCH 1/3] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2010-01-07 17:07 ` [PATCH 2/3] ls-files: support -o --max-depth (more of a hack as fill_directory should support this) Nguyễn Thái Ngọc Duy
2010-01-07 18:01   ` Junio C Hamano
2010-01-07 17:07 ` [PATCH 3/3] Add "ls", which is basically ls-files with user-friendly settings Nguyễn Thái Ngọc Duy
2010-01-07 18:01   ` Junio C Hamano
2010-01-07 18:09     ` Nguyen Thai Ngoc Duy
2010-01-08 14:16       ` Nguyen Thai Ngoc Duy
2010-01-07 18:12   ` Matthieu Moy
2010-01-07 17:40 ` [PATCH 0/3] Bringing git-ls-files to porcelain level Matthieu Moy
2010-01-07 17:47   ` Nguyen Thai Ngoc Duy
2010-11-01 10:30 ` Kan-Ru Chen
2010-11-01 11:20   ` Nguyen Thai Ngoc Duy

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).