* [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
* 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
* [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 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 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 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 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 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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.