diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:47:53 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:47:53 +0000 |
commit | c8bae7493d2f2910b57f13ded012e86bdcfb0532 (patch) | |
tree | 24e09d9f84dec336720cf393e156089ca2835791 /builtin/stripspace.c | |
parent | Initial commit. (diff) | |
download | git-upstream.tar.xz git-upstream.zip |
Adding upstream version 1:2.39.2.upstream/1%2.39.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'builtin/stripspace.c')
-rw-r--r-- | builtin/stripspace.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/builtin/stripspace.c b/builtin/stripspace.c new file mode 100644 index 0000000..1e34cf2 --- /dev/null +++ b/builtin/stripspace.c @@ -0,0 +1,65 @@ +#include "builtin.h" +#include "cache.h" +#include "config.h" +#include "parse-options.h" +#include "strbuf.h" + +static void comment_lines(struct strbuf *buf) +{ + char *msg; + size_t len; + + msg = strbuf_detach(buf, &len); + strbuf_add_commented_lines(buf, msg, len); + free(msg); +} + +static const char * const stripspace_usage[] = { + "git stripspace [-s | --strip-comments]", + "git stripspace [-c | --comment-lines]", + NULL +}; + +enum stripspace_mode { + STRIP_DEFAULT = 0, + STRIP_COMMENTS, + COMMENT_LINES +}; + +int cmd_stripspace(int argc, const char **argv, const char *prefix) +{ + struct strbuf buf = STRBUF_INIT; + enum stripspace_mode mode = STRIP_DEFAULT; + int nongit; + + const struct option options[] = { + OPT_CMDMODE('s', "strip-comments", &mode, + N_("skip and remove all lines starting with comment character"), + STRIP_COMMENTS), + OPT_CMDMODE('c', "comment-lines", &mode, + N_("prepend comment character and space to each line"), + COMMENT_LINES), + OPT_END() + }; + + argc = parse_options(argc, argv, prefix, options, stripspace_usage, 0); + if (argc) + usage_with_options(stripspace_usage, options); + + if (mode == STRIP_COMMENTS || mode == COMMENT_LINES) { + setup_git_directory_gently(&nongit); + git_config(git_default_config, NULL); + } + + if (strbuf_read(&buf, 0, 1024) < 0) + die_errno("could not read the input"); + + if (mode == STRIP_DEFAULT || mode == STRIP_COMMENTS) + strbuf_stripspace(&buf, mode == STRIP_COMMENTS); + else + comment_lines(&buf); + + write_or_die(1, buf.buf, buf.len); + strbuf_release(&buf); + return 0; +} |