From: Teng Long <dyroneteng@gmail.com>
To: dyroneteng@gmail.com
Cc: avarab@gmail.com, congdanhqx@gmail.com, git@vger.kernel.org,
gitster@pobox.com, peff@peff.net, tenglong.tl@alibaba-inc.com,
Johannes.Schindelin@gmx.de
Subject: [PATCH v9 0/9] ls-tree.c: introduce "--format" option
Date: Thu, 6 Jan 2022 12:31:23 +0800 [thread overview]
Message-ID: <cover.1641440700.git.dyroneteng@gmail.com> (raw)
In-Reply-To: <cover.1641043500.git.dyroneteng@gmail.com>
Diff from v8:
1). [Delete] ls-tree: split up the "init" part of show_tree()
2). [New] ls-tree: optimize naming and handling of "return" in show_tree()
In last patch v8, I use commit "ls-tree: split up the "init" part of show_tree()"
(d77c895a4b) from RFC patch v7 [1] and I did not notice the handling of return
value which was called "retval" in it. As Junio mentioned in his reply [2], I
took a look about the "retval" and found it needs to be handled with care.
So, instead I introduced this new commit (instead of the old commit) to take
responsiblies for renaming "retval" and try to let the relevant codes maybe
more easier to understand.
3). [Append] ls-tree.c: support --object-only option for "git-ls-tree"
Junio pointed out that some of these fields are ambiguous [2] and on the
necessary of using xOR.
I modified the commit and it's basically according to the steps I replied
in [3], except the issue of using xOR, Junio suggest me to use
"if ((shown_fields & FILE_NAME_FIELD) == FILE_NAME_FIELD)" instead, but
in here I think use "if (shown_fields == FILE_NAME_FIELD)" is enough.
4). [Append] ls-tree.c: introduce struct "show_tree_data"
I had a spelling mistake which was found by Junio ("show_data" should be
"shown_data"), that reminded me the "show_data" is a little abtract, so I
rename it to "show_tree_data" which is the data struct used in function
"show_tree", I think it's a bit better than before.
5). [Append] ls-tree.c: introduce "--format" option
Doc format modifications. Fix strbuf leaks and some other non-functional
modifications in "ls-tree.c"
6). [New] cocci: allow padding with `strbuf_addf()`
Fix the static-analysis issue[4] which found by Johannes Schindelin.
Thanks.
[1] https://public-inbox.org/git/xmqqwnjgfe4t.fsf@gitster.g/
[2] https://public-inbox.org/git/xmqqwnjgfe4t.fsf@gitster.g/
[3] https://public-inbox.org/git/20220104072951.10153-1-dyroneteng@gmail.com/#t
[4] https://public-inbox.org/git/nycvar.QRO.7.76.6.2201051348050.7076@tvgsbejvaqbjf.bet/
Teng Long (5):
ls-tree: optimize naming and handling of "return" in show_tree()
ls-tree.c: support --object-only option for "git-ls-tree"
ls-tree.c: introduce struct "show_tree_data"
ls-tree.c: introduce "--format" option
cocci: allow padding with `strbuf_addf()`
Ævar Arnfjörð Bjarmason (4):
ls-tree: remove commented-out code
ls-tree: add missing braces to "else" arms
ls-tree: use "enum object_type", not {blob,tree,commit}_type
ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
Documentation/git-ls-tree.txt | 55 +++++-
builtin/ls-tree.c | 332 ++++++++++++++++++++++++++------
contrib/coccinelle/strbuf.cocci | 2 +-
t/t3104-ls-tree-oid.sh | 51 +++++
t/t3105-ls-tree-format.sh | 55 ++++++
5 files changed, 427 insertions(+), 68 deletions(-)
create mode 100755 t/t3104-ls-tree-oid.sh
create mode 100755 t/t3105-ls-tree-format.sh
Range-diff against v8:
1: d77c895a4b < -: ---------- ls-tree: split up the "init" part of show_tree()
-: ---------- > 1: 2fcff7e0d4 ls-tree: remove commented-out code
-: ---------- > 2: 6fd1dd9383 ls-tree: add missing braces to "else" arms
-: ---------- > 3: 208654b5e2 ls-tree: use "enum object_type", not {blob,tree,commit}_type
-: ---------- > 4: 2637464fd8 ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
-: ---------- > 5: 75503c41a7 ls-tree: optimize naming and handling of "return" in show_tree()
2: cb881183cb ! 6: e0274f079a ls-tree.c: support --object-only option for "git-ls-tree"
@@ builtin/ls-tree.c
static struct pathspec pathspec;
static int chomp_prefix;
static const char *ls_tree_prefix;
-+static unsigned int shown_bits;
-+#define SHOW_FILE_NAME 1
-+#define SHOW_SIZE (1 << 1)
-+#define SHOW_OBJECT_NAME (1 << 2)
-+#define SHOW_TYPE (1 << 3)
-+#define SHOW_MODE (1 << 4)
-+#define SHOW_DEFAULT 29 /* 11101 size is not shown to output by default */
++static unsigned int shown_fields;
++#define FIELD_FILE_NAME 1
++#define FIELD_SIZE (1 << 1)
++#define FIELD_OBJECT_NAME (1 << 2)
++#define FIELD_TYPE (1 << 3)
++#define FIELD_MODE (1 << 4)
++#define FIELD_DEFAULT 29 /* 11101 size is not shown to output by default */
++#define FIELD_LONG_DEFAULT (FIELD_DEFAULT | FIELD_SIZE)
static const char * const ls_tree_usage[] = {
N_("git ls-tree [<options>] <tree-ish> [<path>...]"),
@@ builtin/ls-tree.c
+static int parse_shown_fields(void)
+{
+ if (cmdmode == MODE_NAME_ONLY) {
-+ shown_bits = SHOW_FILE_NAME;
++ shown_fields = FIELD_FILE_NAME;
+ return 0;
+ }
+ if (cmdmode == MODE_OBJECT_ONLY) {
-+ shown_bits = SHOW_OBJECT_NAME;
++ shown_fields = FIELD_OBJECT_NAME;
+ return 0;
+ }
+ if (!ls_options || (ls_options & LS_RECURSIVE)
+ || (ls_options & LS_SHOW_TREES)
+ || (ls_options & LS_TREE_ONLY))
-+ shown_bits = SHOW_DEFAULT;
++ shown_fields = FIELD_DEFAULT;
+ if (cmdmode == MODE_LONG)
-+ shown_bits = SHOW_DEFAULT | SHOW_SIZE;
++ shown_fields = FIELD_LONG_DEFAULT;
+ return 1;
+}
+
@@ builtin/ls-tree.c: static int show_recursive(const char *base, size_t baselen, c
+{
+ size_t baselen = base->len;
+
-+ if (shown_bits & SHOW_SIZE) {
++ if (shown_fields & FIELD_SIZE) {
+ char size_text[24];
+ if (type == OBJ_BLOB) {
+ unsigned long size;
@@ builtin/ls-tree.c: static int show_recursive(const char *base, size_t baselen, c
+ return 1;
+}
+
- static int show_tree_init(enum object_type *type, struct strbuf *base,
- const char *pathname, unsigned mode, int *retval)
+ static void init_type(unsigned mode, enum object_type *type)
{
+ if (S_ISGITLINK(mode))
@@ builtin/ls-tree.c: static int show_tree(const struct object_id *oid, struct strbuf *base,
- if (show_tree_init(&type, base, pathname, mode, &retval))
- return retval;
+ if (type == OBJ_BLOB && (ls_options & LS_TREE_ONLY))
+ return !READ_TREE_RECURSIVE;
- if (!(ls_options & LS_NAME_ONLY)) {
- if (ls_options & LS_SHOW_SIZE) {
@@ builtin/ls-tree.c: static int show_tree(const struct object_id *oid, struct strb
- printf("%06o %s %s\t", mode, type_name(type),
- find_unique_abbrev(oid, abbrev));
- }
-+ if (!(shown_bits ^ SHOW_OBJECT_NAME)) {
++ if (shown_fields == FIELD_OBJECT_NAME) {
+ printf("%s%c", find_unique_abbrev(oid, abbrev), line_termination);
-+ return retval;
++ return recursive;
}
- baselen = base->len;
- strbuf_addstr(base, pathname);
@@ builtin/ls-tree.c: static int show_tree(const struct object_id *oid, struct strb
- stdout, line_termination);
- strbuf_setlen(base, baselen);
+
-+ if (!(shown_bits ^ SHOW_FILE_NAME)) {
++ if (shown_fields == FIELD_FILE_NAME) {
+ baselen = base->len;
+ strbuf_addstr(base, pathname);
+ write_name_quoted_relative(base->buf,
+ chomp_prefix ? ls_tree_prefix : NULL,
+ stdout, line_termination);
+ strbuf_setlen(base, baselen);
++ return recursive;
+ }
+
-+ if (!(shown_bits ^ SHOW_DEFAULT) ||
-+ !(shown_bits ^ (SHOW_DEFAULT | SHOW_SIZE)))
++ if (shown_fields >= FIELD_DEFAULT)
+ show_default(oid, type, pathname, mode, base);
+
- return retval;
+ return recursive;
}
@@ builtin/ls-tree.c: int cmd_ls_tree(int argc, const char **argv, const char *prefix)
3: 296ebacafe ! 7: 725c4d0187 ls-tree.c: introduce struct "shown_data"
@@ Metadata
Author: Teng Long <dyroneteng@gmail.com>
## Commit message ##
- ls-tree.c: introduce struct "shown_data"
+ ls-tree.c: introduce struct "show_tree_data"
- "show_data" is a struct that packages the necessary fields for
- reusing. This commit is a front-loaded commit for support
- "--format" argument and does not affect any existing functionality.
+ "show_tree_data" is a struct that packages the necessary fields for
+ "show_tree()". This commit is a pre-prepared commit for supporting
+ "--format" option and it does not affect any existing functionality.
Signed-off-by: Teng Long <dyroneteng@gmail.com>
## builtin/ls-tree.c ##
-@@ builtin/ls-tree.c: static unsigned int shown_bits;
- #define SHOW_MODE (1 << 4)
- #define SHOW_DEFAULT 29 /* 11101 size is not shown to output by default */
+@@ builtin/ls-tree.c: static unsigned int shown_fields;
+ #define FIELD_DEFAULT 29 /* 11101 size is not shown to output by default */
+ #define FIELD_LONG_DEFAULT (FIELD_DEFAULT | FIELD_SIZE)
-+struct shown_data {
++struct show_tree_data {
+ unsigned mode;
+ enum object_type type;
+ const struct object_id *oid;
@@ builtin/ls-tree.c: static int show_recursive(const char *base, size_t baselen,
-static int show_default(const struct object_id *oid, enum object_type type,
- const char *pathname, unsigned mode,
- struct strbuf *base)
-+static int show_default(struct shown_data *data)
++static int show_default(struct show_tree_data *data)
{
- size_t baselen = base->len;
+ size_t baselen = data->base->len;
- if (shown_bits & SHOW_SIZE) {
+ if (shown_fields & FIELD_SIZE) {
char size_text[24];
- if (type == OBJ_BLOB) {
+ if (data->type == OBJ_BLOB) {
@@ builtin/ls-tree.c: static int show_default(const struct object_id *oid, enum obj
@@ builtin/ls-tree.c: static int show_tree(const struct object_id *oid, struct strbuf *base,
{
- int retval = 0;
+ int recursive = 0;
size_t baselen;
- enum object_type type = OBJ_BLOB;
-+ struct shown_data data = {
++ struct show_tree_data data = {
+ .mode = mode,
+ .type = OBJ_BLOB,
+ .oid = oid,
@@ builtin/ls-tree.c: static int show_tree(const struct object_id *oid, struct strb
+ .base = base,
+ };
-- if (show_tree_init(&type, base, pathname, mode, &retval))
-+ if (show_tree_init(&data.type, base, pathname, mode, &retval))
- return retval;
--
- if (!(shown_bits ^ SHOW_OBJECT_NAME)) {
- printf("%s%c", find_unique_abbrev(oid, abbrev), line_termination);
- return retval;
+- init_type(mode, &type);
++ init_type(mode, &data.type);
+ init_recursive(base, pathname, &recursive);
+
+- if (type == OBJ_TREE && recursive && !(ls_options & LS_SHOW_TREES))
++ if (data.type == OBJ_TREE && recursive && !(ls_options & LS_SHOW_TREES))
+ return recursive;
+- if (type == OBJ_BLOB && (ls_options & LS_TREE_ONLY))
++ if (data.type == OBJ_BLOB && (ls_options & LS_TREE_ONLY))
+ return !READ_TREE_RECURSIVE;
+
+ if (shown_fields == FIELD_OBJECT_NAME) {
@@ builtin/ls-tree.c: static int show_tree(const struct object_id *oid, struct strbuf *base,
+ }
- if (!(shown_bits ^ SHOW_DEFAULT) ||
- !(shown_bits ^ (SHOW_DEFAULT | SHOW_SIZE)))
+ if (shown_fields >= FIELD_DEFAULT)
- show_default(oid, type, pathname, mode, base);
+ show_default(&data);
- return retval;
+ return recursive;
}
4: e0add802fb ! 8: 7df58483a4 ls-tree.c: introduce "--format" option
@@ Commit message
Range (min … max): 328.8 ms … 349.4 ms 10 runs
Links:
- [1] https://public-inbox.org/git/RFC-patch-6.7-eac299f06ff-20211217T131635Z-avarab@gmail.com/
+ [1] https://public-inbox.org/git/RFC-patch-6.7-eac299f06ff-20211217T131635Z-avarab@gmail.com/
Signed-off-by: Teng Long <dyroneteng@gmail.com>
@@ Documentation/git-ls-tree.txt: quoted as explained for the configuration variabl
+For example, if you want to only print the <object> and <file> fields with a
+JSON style, executing with a specific "--format" like
+
-+ git ls-tree --format='{"object":"%(object)", "file":"%(file)"}' <tree-ish>
++ git ls-tree --format='{"object":"%(object)", "file":"%(file)"}' <tree-ish>
+
+The output format changes to:
+
-+ {"object":"<object>", "file":"<file>"}
++ {"object":"<object>", "file":"<file>"}
+
+FIELD NAMES
+-----------
@@ builtin/ls-tree.c: enum {
static int cmdmode = MODE_UNSPECIFIED;
--static int parse_shown_fields(void)
+static const char *format;
+static const char *default_format = "%(mode) %(type) %(object)%x09%(file)";
+static const char *long_format = "%(mode) %(type) %(object) %(size:padded)%x09%(file)";
+static const char *name_only_format = "%(file)";
+static const char *object_only_format = "%(object)";
+
+ static int parse_shown_fields(void)
+ {
+ if (cmdmode == MODE_NAME_ONLY) {
+@@ builtin/ls-tree.c: static int parse_shown_fields(void)
+ return 1;
+ }
+
+static void expand_objectsize(struct strbuf *line, const struct object_id *oid,
+ const enum object_type type, unsigned int padded)
- {
-- if (cmdmode == MODE_NAME_ONLY) {
-- shown_bits = SHOW_FILE_NAME;
-- return 0;
++{
+ if (type == OBJ_BLOB) {
+ unsigned long size;
+ if (oid_object_info(the_repository, oid, &size) < 0)
@@ builtin/ls-tree.c: enum {
+ strbuf_addf(line, "%7s", "-");
+ } else {
+ strbuf_addstr(line, "-");
- }
-- if (cmdmode == MODE_OBJECT_ONLY) {
-- shown_bits = SHOW_OBJECT_NAME;
-- return 0;
++ }
+}
+
+static size_t expand_show_tree(struct strbuf *line, const char *start,
+ void *context)
+{
-+ struct shown_data *data = context;
++ struct show_tree_data *data = context;
+ const char *end;
+ const char *p;
+ unsigned int errlen;
-+ size_t len;
-+ len = strbuf_expand_literal_cb(line, start, NULL);
++ size_t len = strbuf_expand_literal_cb(line, start, NULL);
++
+ if (len)
+ return len;
-+
+ if (*start != '(')
+ die(_("bad ls-tree format: as '%s'"), start);
+
@@ builtin/ls-tree.c: enum {
+ } else if (skip_prefix(start, "(size)", &p)) {
+ expand_objectsize(line, data->oid, data->type, 0);
+ } else if (skip_prefix(start, "(object)", &p)) {
-+ strbuf_addstr(line, find_unique_abbrev(data->oid, abbrev));
++ strbuf_add_unique_abbrev(line, data->oid, abbrev);
+ } else if (skip_prefix(start, "(file)", &p)) {
+ const char *name = data->base->buf;
+ const char *prefix = chomp_prefix ? ls_tree_prefix : NULL;
@@ builtin/ls-tree.c: enum {
+ strbuf_addstr(data->base, data->pathname);
+ name = relative_path(data->base->buf, prefix, &sb);
+ quote_c_style(name, "ed, NULL, 0);
-+ strbuf_addstr(line, quoted.buf);
++ strbuf_addbuf(line, "ed);
++ strbuf_release(&sb);
++ strbuf_release("ed);
+ } else {
+ errlen = (unsigned long)len;
+ die(_("bad ls-tree format: %%%.*s"), errlen, start);
- }
-- if (!ls_options || (ls_options & LS_RECURSIVE)
-- || (ls_options & LS_SHOW_TREES)
-- || (ls_options & LS_TREE_ONLY))
-- shown_bits = SHOW_DEFAULT;
-- if (cmdmode == MODE_LONG)
-- shown_bits = SHOW_DEFAULT | SHOW_SIZE;
-- return 1;
++ }
+ return len;
- }
-
++}
++
static int show_recursive(const char *base, size_t baselen,
+ const char *pathname)
+ {
@@ builtin/ls-tree.c: static int show_recursive(const char *base, size_t baselen,
return 0;
}
-+static int show_tree_init(enum object_type *type, struct strbuf *base,
-+ const char *pathname, unsigned mode, int *retval)
++static void init_recursive(struct strbuf *base, const char *pathname,
++ int *recursive)
+{
-+ if (S_ISGITLINK(mode)) {
++ if (show_recursive(base->buf, base->len, pathname))
++ *recursive = READ_TREE_RECURSIVE;
++}
++
++static void init_type(unsigned mode, enum object_type *type)
++{
++ if (S_ISGITLINK(mode))
+ *type = OBJ_COMMIT;
-+ } else if (S_ISDIR(mode)) {
-+ if (show_recursive(base->buf, base->len, pathname)) {
-+ *retval = READ_TREE_RECURSIVE;
-+ if (!(ls_options & LS_SHOW_TREES))
-+ return 1;
-+ }
++ else if (S_ISDIR(mode))
+ *type = OBJ_TREE;
-+ }
-+ else if (ls_options & LS_TREE_ONLY)
-+ return 1;
-+ return 0;
+}
+
+static int show_tree_fmt(const struct object_id *oid, struct strbuf *base,
+ const char *pathname, unsigned mode, void *context)
+{
+ size_t baselen;
-+ int retval = 0;
++ int recursive = 0;
+ struct strbuf line = STRBUF_INIT;
-+ struct shown_data data = {
++ struct show_tree_data data = {
+ .mode = mode,
+ .type = OBJ_BLOB,
+ .oid = oid,
@@ builtin/ls-tree.c: static int show_recursive(const char *base, size_t baselen,
+ .base = base,
+ };
+
-+ if (show_tree_init(&data.type, base, pathname, mode, &retval))
-+ return retval;
++ init_type(mode, &data.type);
++ init_recursive(base, pathname, &recursive);
++
++ if (data.type == OBJ_TREE && recursive && !(ls_options & LS_SHOW_TREES))
++ return recursive;
++ if (data.type == OBJ_BLOB && (ls_options & LS_TREE_ONLY))
++ return !READ_TREE_RECURSIVE;
+
+ baselen = base->len;
+ strbuf_expand(&line, format, expand_show_tree, &data);
+ strbuf_addch(&line, line_termination);
+ fwrite(line.buf, line.len, 1, stdout);
++ strbuf_release(&line);
+ strbuf_setlen(base, baselen);
-+ return retval;
++ return recursive;
+}
+
-+static int parse_shown_fields(void)
-+{
-+ if (cmdmode == MODE_NAME_ONLY ||
-+ (format && !strcmp(format, name_only_format))) {
-+ shown_bits = SHOW_FILE_NAME;
-+ return 1;
-+ }
-+
-+ if (cmdmode == MODE_OBJECT_ONLY ||
-+ (format && !strcmp(format, object_only_format))) {
-+ shown_bits = SHOW_OBJECT_NAME;
-+ return 1;
-+ }
-+
-+ if (!ls_options || (ls_options & LS_RECURSIVE)
-+ || (ls_options & LS_SHOW_TREES)
-+ || (ls_options & LS_TREE_ONLY)
-+ || (format && !strcmp(format, default_format)))
-+ shown_bits = SHOW_DEFAULT;
-+
-+ if (cmdmode == MODE_LONG ||
-+ (format && !strcmp(format, long_format)))
-+ shown_bits = SHOW_DEFAULT | SHOW_SIZE;
-+ return 1;
-+}
-+
- static int show_default(struct shown_data *data)
+ static int show_default(struct show_tree_data *data)
{
size_t baselen = data->base->len;
-@@ builtin/ls-tree.c: static int show_default(struct shown_data *data)
+@@ builtin/ls-tree.c: static int show_default(struct show_tree_data *data)
return 1;
}
--static int show_tree_init(enum object_type *type, struct strbuf *base,
-- const char *pathname, unsigned mode, int *retval)
+-static void init_type(unsigned mode, enum object_type *type)
-{
-- if (S_ISGITLINK(mode)) {
+- if (S_ISGITLINK(mode))
- *type = OBJ_COMMIT;
-- } else if (S_ISDIR(mode)) {
-- if (show_recursive(base->buf, base->len, pathname)) {
-- *retval = READ_TREE_RECURSIVE;
-- if (!(ls_options & LS_SHOW_TREES))
-- return 1;
-- }
+- else if (S_ISDIR(mode))
- *type = OBJ_TREE;
-- }
-- else if (ls_options & LS_TREE_ONLY)
-- return 1;
-- return 0;
+-}
+-
+-static void init_recursive(struct strbuf *base, const char *pathname,
+- int *recursive)
+-{
+- if (show_recursive(base->buf, base->len, pathname))
+- *recursive = READ_TREE_RECURSIVE;
-}
-
static int show_tree(const struct object_id *oid, struct strbuf *base,
@@ builtin/ls-tree.c: int cmd_ls_tree(int argc, const char **argv, const char *pref
+ * The generic show_tree_fmt() is slower than show_tree(), so
+ * take the fast path if possible.
+ */
-+ if (format && (!strcmp(format, default_format) ||
-+ !strcmp(format, long_format) ||
-+ !strcmp(format, name_only_format) ||
-+ !strcmp(format, object_only_format)))
++ if (format &&
++ (!strcmp(format, default_format) ||
++ !strcmp(format, long_format) ||
++ !strcmp(format, name_only_format) ||
++ !strcmp(format, object_only_format)))
+ fn = show_tree;
+ else if (format)
+ fn = show_tree_fmt;
-: ---------- > 9: 8dafb2b377 cocci: allow padding with `strbuf_addf()`
--
2.33.0.rc1.1794.g2ae0a9cb82
next prev parent reply other threads:[~2022-01-06 4:31 UTC|newest]
Thread overview: 236+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-15 11:51 [PATCH 0/3] support `--oid-only` in `ls-tree` Teng Long
2021-11-15 11:51 ` [PATCH 1/3] ls-tree.c: support `--oid-only` option for "git-ls-tree" Teng Long
2021-11-15 15:12 ` Ævar Arnfjörð Bjarmason
2021-11-18 9:28 ` Teng Long
2021-11-18 11:00 ` Ævar Arnfjörð Bjarmason
2021-11-15 19:16 ` Jeff King
2021-11-15 19:25 ` Jeff King
2021-11-18 11:23 ` Teng Long
2021-11-15 11:51 ` [PATCH 2/3] t3104: add related tests for `--oid-only` option Teng Long
2021-11-15 15:54 ` Đoàn Trần Công Danh
2021-11-18 8:45 ` Teng Long
2021-11-15 11:51 ` [PATCH 3/3] git-ls-tree.txt: description of the 'oid-only' option Teng Long
2021-11-15 15:13 ` [PATCH 0/3] support `--oid-only` in `ls-tree` Ævar Arnfjörð Bjarmason
2021-11-15 19:09 ` Jeff King
2021-11-15 21:50 ` Ævar Arnfjörð Bjarmason
2021-11-19 2:57 ` Teng Long
2021-11-15 19:23 ` Jeff King
2021-11-19 12:09 ` [PATCH v2 0/1] " Teng Long
2021-11-19 12:09 ` [PATCH v2 1/1] ls-tree.c: support `--oid-only` option for "git-ls-tree" Teng Long
2021-11-19 13:30 ` Ævar Arnfjörð Bjarmason
2021-11-19 17:32 ` Junio C Hamano
2021-11-22 7:45 ` Teng Long
2021-11-22 11:14 ` Ævar Arnfjörð Bjarmason
2021-11-22 8:07 ` [PATCH v3 0/1] ls-tree.c: support `--oid-only` option Teng Long
2021-11-22 8:07 ` [PATCH v3 1/1] ls-tree.c: support `--oid-only` option for "git-ls-tree" Teng Long
2021-11-22 18:11 ` Peter Baumann
2021-11-22 18:54 ` Junio C Hamano
2021-11-23 1:09 ` Ævar Arnfjörð Bjarmason
2021-11-23 1:26 ` Junio C Hamano
2021-11-23 2:28 ` Ævar Arnfjörð Bjarmason
2021-11-23 2:55 ` Junio C Hamano
2021-11-23 3:35 ` Junio C Hamano
2021-11-23 11:04 ` Ævar Arnfjörð Bjarmason
2021-11-23 0:14 ` Đoàn Trần Công Danh
2021-11-23 4:58 ` [PATCH v4 0/1] ls-tree.c: support `--oid-only` option Teng Long
2021-11-23 4:58 ` [PATCH v4 1/1] ls-tree.c: support `--oid-only` option for "git-ls-tree" Teng Long
2021-11-23 22:32 ` Junio C Hamano
2021-12-06 7:52 ` Teng Long
2021-12-08 2:08 ` [PATCH v5 0/1] support `--object-only` " Teng Long
2021-12-08 2:08 ` [PATCH v5 1/1] ls-tree.c: " Teng Long
2021-12-15 19:25 ` Junio C Hamano
2021-12-16 12:16 ` Teng Long
2021-12-16 21:26 ` Junio C Hamano
2021-12-16 21:29 ` Ævar Arnfjörð Bjarmason
2021-12-17 6:57 ` [PATCH v6 0/1] " Teng Long
2021-12-17 6:57 ` [PATCH v6 1/1] ls-tree.c: " Teng Long
2021-12-17 13:09 ` Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 0/7] ls-tree --format Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 1/7] ls-tree: remove commented-out code Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 2/7] ls-tree: add missing braces to "else" arms Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 3/7] ls-tree: use "enum object_type", not {blob,tree,commit}_type Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 4/7] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 5/7] ls-tree: split up the "init" part of show_tree() Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 6/7] ls-tree: add a --format=<fmt> option Ævar Arnfjörð Bjarmason
2021-12-17 13:30 ` [RFC PATCH 7/7] ls-tree.c: support `--object-only` option for "git-ls-tree" Ævar Arnfjörð Bjarmason
2022-01-01 13:50 ` [PATCH v8 0/8] ls-tree: "--object-only" and "--format" opts Teng Long
2022-01-01 13:50 ` [PATCH v8 1/8] ls-tree: remove commented-out code Teng Long
2022-01-01 13:50 ` [PATCH v8 2/8] ls-tree: add missing braces to "else" arms Teng Long
2022-01-01 13:50 ` [PATCH v8 3/8] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-01-01 13:50 ` [PATCH v8 4/8] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-01-01 13:50 ` [PATCH v8 5/8] ls-tree: split up the "init" part of show_tree() Teng Long
2022-01-04 2:06 ` Junio C Hamano
2022-01-04 9:49 ` Teng Long
2022-01-01 13:50 ` [PATCH v8 6/8] ls-tree.c: support --object-only option for "git-ls-tree" Teng Long
2022-01-04 1:21 ` Junio C Hamano
2022-01-04 7:29 ` Teng Long
2022-01-01 13:50 ` [PATCH v8 7/8] ls-tree.c: introduce struct "shown_data" Teng Long
2022-01-03 23:21 ` Junio C Hamano
2022-01-04 2:02 ` Teng Long
2022-01-01 13:50 ` [PATCH v8 8/8] ls-tree.c: introduce "--format" option Teng Long
2022-01-04 14:38 ` Johannes Schindelin
2022-01-04 15:17 ` Johannes Schindelin
2022-01-05 9:40 ` Teng Long
2022-01-05 9:58 ` Teng Long
2022-01-05 13:09 ` Johannes Schindelin
2022-01-05 16:44 ` Teng Long
2022-01-06 4:31 ` Teng Long [this message]
2022-01-06 4:31 ` [PATCH v9 1/9] ls-tree: remove commented-out code Teng Long
2022-01-06 4:31 ` [PATCH v9 2/9] ls-tree: add missing braces to "else" arms Teng Long
2022-01-06 4:31 ` [PATCH v9 3/9] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-01-06 4:31 ` [PATCH v9 4/9] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-01-06 4:31 ` [PATCH v9 5/9] ls-tree: optimize naming and handling of "return" in show_tree() Teng Long
2022-01-06 20:44 ` Junio C Hamano
2022-01-11 9:14 ` Teng Long
2022-01-06 4:31 ` [PATCH v9 6/9] ls-tree.c: support --object-only option for "git-ls-tree" Teng Long
2022-01-06 4:31 ` [PATCH v9 7/9] ls-tree.c: introduce struct "show_tree_data" Teng Long
2022-01-06 4:31 ` [PATCH v9 8/9] ls-tree.c: introduce "--format" option Teng Long
2022-01-10 19:41 ` Martin Ågren
2022-01-11 9:34 ` Teng Long
2022-01-06 4:31 ` [PATCH v9 9/9] cocci: allow padding with `strbuf_addf()` Teng Long
2022-01-07 13:03 ` Johannes Schindelin
2022-01-10 8:22 ` Teng Long
2022-01-10 12:49 ` Johannes Schindelin
2022-01-10 14:40 ` Teng Long
2022-01-10 17:47 ` Junio C Hamano
2022-01-10 18:02 ` Ævar Arnfjörð Bjarmason
2022-01-10 18:34 ` Junio C Hamano
2022-01-10 18:00 ` Ævar Arnfjörð Bjarmason
2022-01-11 10:37 ` Teng Long
2022-01-11 16:42 ` Taylor Blau
2022-01-11 19:06 ` René Scharfe
2022-01-11 20:11 ` Taylor Blau
2022-01-13 3:34 ` Teng Long
2022-01-11 20:39 ` Ævar Arnfjörð Bjarmason
2022-01-13 3:35 ` Teng Long
2022-01-13 3:28 ` Teng Long
2022-01-13 3:42 ` [PATCH v10 0/9] ls-tree: "--object-only" and "--format" opts Teng Long
2022-01-13 3:42 ` [PATCH v10 1/9] ls-tree: remove commented-out code Teng Long
2022-01-13 3:42 ` [PATCH v10 2/9] ls-tree: add missing braces to "else" arms Teng Long
2022-01-13 3:42 ` [PATCH v10 3/9] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-01-13 3:42 ` [PATCH v10 4/9] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-01-13 3:42 ` [PATCH v10 5/9] ls-tree: optimize naming and handling of "return" in show_tree() Teng Long
2022-01-13 6:49 ` Ævar Arnfjörð Bjarmason
2022-01-14 7:59 ` Teng Long
2022-01-14 12:00 ` Ævar Arnfjörð Bjarmason
2022-01-13 3:42 ` [PATCH v10 6/9] ls-tree.c: support --object-only option for "git-ls-tree" Teng Long
2022-01-13 6:59 ` Ævar Arnfjörð Bjarmason
2022-01-14 8:18 ` Teng Long
2022-01-14 11:47 ` Ævar Arnfjörð Bjarmason
2022-01-18 9:55 ` Teng Long
2022-02-04 12:58 ` Ævar Arnfjörð Bjarmason
2022-02-07 2:22 ` Teng Long
2022-01-13 3:42 ` [PATCH v10 7/9] ls-tree.c: introduce struct "show_tree_data" Teng Long
2022-01-13 7:03 ` Ævar Arnfjörð Bjarmason
2022-01-14 9:12 ` Teng Long
2022-01-13 3:42 ` [PATCH v10 8/9] cocci: allow padding with `strbuf_addf()` Teng Long
2022-01-13 3:42 ` [PATCH v10 9/9] ls-tree.c: introduce "--format" option Teng Long
2022-01-13 7:16 ` Ævar Arnfjörð Bjarmason
2022-01-18 12:59 ` Teng Long
2022-02-08 12:14 ` [PATCH v11 00/13] ls-tree: "--object-only" and "--format" opts Teng Long
2022-02-08 12:14 ` [PATCH v11 01/13] ls-tree: remove commented-out code Teng Long
2022-02-08 12:14 ` [PATCH v11 02/13] ls-tree: add missing braces to "else" arms Teng Long
2022-02-08 12:14 ` [PATCH v11 03/13] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-02-08 12:14 ` [PATCH v11 04/13] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-02-08 12:14 ` [PATCH v11 05/13] ls-tree: rename "retval" to "recurse" in "show_tree()" Teng Long
2022-02-08 12:14 ` [PATCH v11 06/13] ls-tree: simplify nesting if/else logic " Teng Long
2022-02-19 6:06 ` Ævar Arnfjörð Bjarmason
2022-02-08 12:14 ` [PATCH v11 07/13] ls-tree: fix "--name-only" and "--long" combined use bug Teng Long
2022-02-19 6:04 ` Ævar Arnfjörð Bjarmason
2022-02-08 12:14 ` [PATCH v11 08/13] ls-tree: slightly refactor `show_tree()` Teng Long
2022-02-19 5:56 ` Ævar Arnfjörð Bjarmason
[not found] ` <CADMgQSRYKB1ybxZWxQQ3uVM71fmdbzHqcK-WUPNKm2HMxw2C2g@mail.gmail.com>
2022-02-28 16:18 ` Ævar Arnfjörð Bjarmason
2022-02-08 12:14 ` [PATCH v11 09/13] ls-tree: introduce struct "show_tree_data" Teng Long
2022-02-08 12:14 ` [PATCH v11 10/13] cocci: allow padding with `strbuf_addf()` Teng Long
2022-02-08 12:14 ` [PATCH v11 11/13] ls-tree.c: introduce "--format" option Teng Long
2022-02-19 5:44 ` Ævar Arnfjörð Bjarmason
2022-02-08 12:14 ` [PATCH v11 12/13] ls-tree: introduce function "fast_path()" Teng Long
2022-02-19 5:32 ` Ævar Arnfjörð Bjarmason
2022-02-08 12:14 ` [PATCH v11 13/13] ls-tree.c: support --object-only option for "git-ls-tree" Teng Long
2022-02-19 5:24 ` Ævar Arnfjörð Bjarmason
2022-03-04 10:42 ` [PATCH v12 00/12] ls-tree: "--object-only" and "--format" opts Teng Long
2022-03-04 10:42 ` [PATCH v12 01/12] ls-tree: remove commented-out code Teng Long
2022-03-04 10:42 ` [PATCH v12 02/12] ls-tree: add missing braces to "else" arms Teng Long
2022-03-04 10:42 ` [PATCH v12 03/12] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-03-04 10:42 ` [PATCH v12 04/12] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-03-04 10:42 ` [PATCH v12 05/12] ls-tree: rename "retval" to "recurse" in "show_tree()" Teng Long
2022-03-04 10:42 ` [PATCH v12 06/12] ls-tree: simplify nesting if/else logic " Teng Long
2022-03-04 10:42 ` [PATCH v12 07/12] ls-tree: fix "--name-only" and "--long" combined use bug Teng Long
2022-03-04 10:42 ` [PATCH v12 08/12] ls-tree: slightly refactor `show_tree()` Teng Long
2022-03-04 10:42 ` [PATCH v12 09/12] ls-tree: introduce struct "show_tree_data" Teng Long
2022-03-04 10:42 ` [PATCH v12 10/12] cocci: allow padding with `strbuf_addf()` Teng Long
2022-03-04 10:42 ` [PATCH v12 11/12] ls-tree: introduce "--format" option Teng Long
2022-03-04 10:42 ` [PATCH v12 12/12] ls-tree: support --object-only option for "git-ls-tree" Teng Long
2022-03-10 13:56 ` [RFC/REVIEW 0/7] fixups/suggestions/musings for tl/ls-tree-oid-only Ævar Arnfjörð Bjarmason
2022-03-10 13:56 ` [RFC/REVIEW 1/7] ls-tree tests: add tests for --name-status Ævar Arnfjörð Bjarmason
2022-03-10 13:56 ` [RFC/REVIEW 2/7] ls-tree tests: exhaustively test fast & slow path for --format Ævar Arnfjörð Bjarmason
2022-03-10 13:56 ` [RFC/REVIEW 3/7] ls-tree: remove dead labels Ævar Arnfjörð Bjarmason
2022-03-10 13:57 ` [RFC/REVIEW 4/7] ls-tree: remove unused "MODE_UNSPECIFIED" Ævar Arnfjörð Bjarmason
2022-03-10 13:57 ` [RFC/REVIEW 5/7] ls-tree: detect and error on --name-only --name-status Ævar Arnfjörð Bjarmason
2022-03-10 13:57 ` [RFC/REVIEW 6/7] ls-tree: remove FIELD_*, just use MODE_* Ævar Arnfjörð Bjarmason
2022-03-10 13:57 ` [RFC/REVIEW 7/7] ls-tree: split up "fast path" callbacks Ævar Arnfjörð Bjarmason
2022-03-17 9:51 ` [RFC/REVIEW 0/7] fixups/suggestions/musings for tl/ls-tree-oid-only Teng Long
2022-03-17 10:04 ` Ævar Arnfjörð Bjarmason
2022-03-21 7:33 ` [PATCH v13 00/16] ls-tree: "--object-only" and "--format" opts Teng Long
2022-03-21 7:33 ` [PATCH v13 01/16] ls-tree: remove commented-out code Teng Long
2022-03-21 7:33 ` [PATCH v13 02/16] ls-tree: add missing braces to "else" arms Teng Long
2022-03-21 7:33 ` [PATCH v13 03/16] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-03-21 7:33 ` [PATCH v13 04/16] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-03-21 7:33 ` [PATCH v13 05/16] ls-tree: rename "retval" to "recurse" in "show_tree()" Teng Long
2022-03-21 7:33 ` [PATCH v13 06/16] ls-tree: simplify nesting if/else logic " Teng Long
2022-03-21 7:33 ` [PATCH v13 07/16] ls-tree: fix "--name-only" and "--long" combined use bug Teng Long
2022-03-21 7:33 ` [PATCH v13 08/16] ls-tree: slightly refactor `show_tree()` Teng Long
2022-03-21 7:33 ` [PATCH v13 09/16] ls-tree: introduce struct "show_tree_data" Teng Long
2022-03-21 7:33 ` [PATCH v13 10/16] cocci: allow padding with `strbuf_addf()` Teng Long
2022-03-21 7:33 ` [PATCH v13 11/16] ls-tree: introduce "--format" option Teng Long
2022-03-21 9:22 ` Ævar Arnfjörð Bjarmason
2022-03-21 7:33 ` [PATCH v13 12/16] ls-tree: support --object-only option for "git-ls-tree" Teng Long
2022-03-21 7:33 ` [PATCH v13 13/16] ls-tree tests: add tests for --name-status Teng Long
2022-03-21 9:21 ` Ævar Arnfjörð Bjarmason
2022-03-21 7:33 ` [PATCH v13 14/16] ls-tree: detect and error on --name-only --name-status Teng Long
2022-03-21 7:33 ` [PATCH v13 15/16] ls-tree: remove FIELD_*, just use MODE_* Teng Long
2022-03-21 9:15 ` Ævar Arnfjörð Bjarmason
2022-03-21 7:33 ` [PATCH v13 16/16] ls-tree: split up "fast path" callbacks Teng Long
2022-03-21 9:20 ` Ævar Arnfjörð Bjarmason
2022-03-23 9:58 ` Teng Long
2022-03-21 19:07 ` [PATCH v13 00/16] ls-tree: "--object-only" and "--format" opts Junio C Hamano
2022-03-23 9:13 ` [PATCH v14 00/15] " Teng Long
2022-03-23 9:13 ` [PATCH v14 01/15] ls-tree tests: add tests for --name-status Teng Long
2022-03-23 9:13 ` [PATCH v14 02/15] ls-tree: remove commented-out code Teng Long
2022-03-23 9:13 ` [PATCH v14 03/15] ls-tree: add missing braces to "else" arms Teng Long
2022-03-23 9:13 ` [PATCH v14 04/15] ls-tree: use "enum object_type", not {blob,tree,commit}_type Teng Long
2022-03-23 9:13 ` [PATCH v14 05/15] ls-tree: use "size_t", not "int" for "struct strbuf"'s "len" Teng Long
2022-03-23 9:13 ` [PATCH v14 06/15] ls-tree: rename "retval" to "recurse" in "show_tree()" Teng Long
2022-03-23 9:13 ` [PATCH v14 07/15] ls-tree: simplify nesting if/else logic " Teng Long
2022-03-23 9:13 ` [PATCH v14 08/15] ls-tree: fix "--name-only" and "--long" combined use bug Teng Long
2022-03-23 9:13 ` [PATCH v14 09/15] ls-tree: slightly refactor `show_tree()` Teng Long
2022-03-23 9:13 ` [PATCH v14 10/15] ls-tree: introduce struct "show_tree_data" Teng Long
2022-03-23 9:13 ` [PATCH v14 11/15] cocci: allow padding with `strbuf_addf()` Teng Long
2022-03-23 9:13 ` [PATCH v14 12/15] ls-tree: introduce "--format" option Teng Long
2022-03-23 9:13 ` [PATCH v14 13/15] ls-tree: support --object-only option for "git-ls-tree" Teng Long
2022-03-23 9:13 ` [PATCH v14 14/15] ls-tree: detect and error on --name-only --name-status Teng Long
2022-03-23 9:13 ` [PATCH v14 15/15] ls-tree: split up "fast path" callbacks Teng Long
2022-04-04 20:06 ` Josh Steadmon
2022-04-04 22:42 ` [RFC PATCH] ls-tree: `-l` should not imply recursive listing Josh Steadmon
2022-04-04 23:45 ` [PATCH v2] ls-tree: fix --long implying -r regression in 9c4d58ff2c3 Ævar Arnfjörð Bjarmason
2022-04-06 17:56 ` Junio C Hamano
2022-04-06 20:36 ` Ævar Arnfjörð Bjarmason
2022-04-06 21:51 ` Junio C Hamano
2022-04-07 7:14 ` Ævar Arnfjörð Bjarmason
2022-04-07 18:40 ` Junio C Hamano
2022-05-31 17:21 ` [PATCH] ls-tree: test for the " Ævar Arnfjörð Bjarmason
2022-06-02 15:18 ` Johannes Schindelin
2022-06-02 17:48 ` Junio C Hamano
2022-06-03 9:54 ` js/ci-github-workflow-markup output regression (was: [PATCH] ls-tree: test for the regression in 9c4d58ff2c3) Ævar Arnfjörð Bjarmason
2022-06-03 19:27 ` js/ci-github-workflow-markup output regression Junio C Hamano
2022-06-03 23:13 ` Ævar Arnfjörð Bjarmason
2022-06-07 18:25 ` Junio C Hamano
2022-06-07 21:40 ` Ævar Arnfjörð Bjarmason
2022-06-08 8:04 ` Johannes Schindelin
2022-06-09 19:43 ` Ævar Arnfjörð Bjarmason
2022-06-03 10:23 ` [PATCH v2] ls-tree: test for the regression in 9c4d58ff2c3 Ævar Arnfjörð Bjarmason
2022-06-08 21:55 ` Johannes Schindelin
2022-04-07 9:29 ` [PATCH v2] ls-tree: fix --long implying -r " Teng Long
2022-04-06 15:41 ` [RFC PATCH] ls-tree: `-l` should not imply recursive listing Junio C Hamano
2022-03-23 19:54 ` [PATCH v14 00/15] ls-tree: "--object-only" and "--format" opts Junio C Hamano
2022-03-24 3:00 ` Teng Long
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1641440700.git.dyroneteng@gmail.com \
--to=dyroneteng@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=avarab@gmail.com \
--cc=congdanhqx@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=tenglong.tl@alibaba-inc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).