You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
#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; |
|
}
|
|
|