| #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; | 
 | } |