[PATCH v2 0/9] [GSOC][RFC] cat-file: reuse ref-filter logic
- From
ZheNing Hu via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jun 15, 2021, 13:28 UTC
- Message-ID
- <pull.980.v2.git.1623763746.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.980.git.1623496458.gitgitgadget@gmail.com>
This patch series make cat-file reuse ref-filter logic, which based on 5a5b5f78 ([GSOC] ref-filter: add %(rest) atom)
Change from last version:
1. Use free_array_item_internal() to solve the memory leak problem.
2. Change commit message of ([GSOC] ref-filter: teach get_object() return
useful value).ZheNing Hu (9): [GSOC] ref-filter: add obj-type check in grab contents [GSOC] ref-filter: add %(raw) atom [GSOC] ref-filter: use non-const ref_format in *_atom_parser() [GSOC] ref-filter: add %(rest) atom [GSOC] ref-filter: teach get_object() return useful value [GSOC] ref-filter: introduce free_array_item_internal() function [GSOC] cat-file: reuse ref-filter logic [GSOC] cat-file: reuse err buf in batch_objet_write() [GSOC] cat-file: re-implement --textconv, --filters options
Documentation/git-cat-file.txt | 6 + Documentation/git-for-each-ref.txt | 9 + builtin/cat-file.c | 267 ++++++----------------- builtin/tag.c | 2 +- ref-filter.c | 331 ++++++++++++++++++++++------- ref-filter.h | 14 +- t/t1006-cat-file.sh | 252 ++++++++++++++++++++++ t/t3203-branch-output.sh | 4 + t/t6300-for-each-ref.sh | 211 ++++++++++++++++++ t/t6301-for-each-ref-errors.sh | 2 +- t/t7004-tag.sh | 4 + t/t7030-verify-tag.sh | 4 + 12 files changed, 829 insertions(+), 277 deletions(-)
base-commit: 1197f1a46360d3ae96bd9c15908a3a6f8e562207 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-980%2Fadlternative%2Fcat-file-batch-refactor-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-980/adlternative/cat-file-batch-refactor-v2 Pull-Request: https://github.com/gitgitgadget/git/pull/980
Range-diff vs v1:
1: 48d256db5c34 = 1: 48d256db5c34 [GSOC] ref-filter: add obj-type check in grab contents
2: abee6a03becb = 2: abee6a03becb [GSOC] ref-filter: add %(raw) atom
3: c99d1d070a18 = 3: c99d1d070a18 [GSOC] ref-filter: use non-const ref_format in *_atom_parser()
4: 5a5b5f78aeea = 4: 5a5b5f78aeea [GSOC] ref-filter: add %(rest) atom
5: c208b8a45d66 ! 5: 49063372e003 [GSOC] ref-filter: teach get_object() return useful value
@@ Commit message
[GSOC] ref-filter: teach get_object() return useful value
Let `populate_value()`, `get_ref_atom_value()` and
- `format_ref_array_item()` get the return value of `get_value()`
+ `format_ref_array_item()` get the return value of `get_object()`
correctly. This can help us later let `cat-file --batch` get the
- correct error message and return value of `get_value()`.
+ correct error message and return value of `get_object()`.
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Hariom Verma <hariom18599@gmail.com>
-: ------------ > 6: d2f2563eb76a [GSOC] ref-filter: introduce free_array_item_internal() function
6: 44ebf75e2e93 ! 7: 765337a46ab0 [GSOC] cat-file: reuse ref-filter logic
@@ builtin/cat-file.c: static void batch_write(struct batch_options *opt, const voi
+ if (!ret) {
+ strbuf_addch(scratch, '\n');
+ batch_write(opt, scratch->buf, scratch->len);
-+ strbuf_release(&err);
+ } else if (ret < 0) {
+ die("%s\n", err.buf);
-+ strbuf_release(&err);
+ } else {
+ /* when ret > 0 , don't call die and print the err to stdout*/
+ printf("%s\n", err.buf);
+ fflush(stdout);
-+ strbuf_release(&err);
}
++ free_array_item_internal(&item);
++ strbuf_release(&err);
}
+ static void batch_one_object(const char *obj_name,
@@ builtin/cat-file.c: static void batch_one_object(const char *obj_name,
return;
}
@@ builtin/cat-file.c: static int batch_objects(struct batch_options *opt)
return 0;
}
@@ builtin/cat-file.c: static int batch_objects(struct batch_options *opt)
-
batch_one_object(input.buf, &output, opt, &data);
}
--
+
+ strbuf_release(&format);
strbuf_release(&input);
strbuf_release(&output);
7: d31059c391d0 ! 8: 058b304686fd [GSOC] cat-file: reuse err buf in batch_objet_write()
@@ builtin/cat-file.c: static void batch_write(struct batch_options *opt, const voi
if (!ret) {
strbuf_addch(scratch, '\n');
batch_write(opt, scratch->buf, scratch->len);
-- strbuf_release(&err);
} else if (ret < 0) {
- die("%s\n", err.buf);
-- strbuf_release(&err);
+ die("%s\n", err->buf);
} else {
/* when ret > 0 , don't call die and print the err to stdout*/
- printf("%s\n", err.buf);
+ printf("%s\n", err->buf);
fflush(stdout);
-- strbuf_release(&err);
}
+ free_array_item_internal(&item);
+- strbuf_release(&err);
}
static void batch_one_object(const char *obj_name,
@@ builtin/cat-file.c: static int batch_objects(struct batch_options *opt, const st
- batch_one_object(input.buf, &output, opt, &data);
+ batch_one_object(input.buf, &output, &err, opt, &data);
}
+
strbuf_release(&format);
strbuf_release(&input);
strbuf_release(&output);
8: 0004d5b24a0f ! 9: cbf7d51933ea [GSOC] cat-file: re-implement --textconv, --filters options
@@ ref-filter.h: struct ref_format {
+ int use_filters;
int use_rest;
int use_color;
--
- /* Internal state to ref-filter */
+
+@@ ref-filter.h: struct ref_format {
int need_color_reset_at_eol;
};
-- gitgitgadget