|  | #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[] = { | 
|  | N_("git stripspace [-s | --strip-comments]"), | 
|  | N_("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; | 
|  | } |