From: Lukas Sandström Date: Tue, 13 Jun 2006 20:21:53 +0000 (+0200) Subject: Make git-stripspace a builtin X-Git-Tag: v1.4.1-rc1~18^2~3 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=7499c996156ea99702fe13e203b97ae60d8868ad;p=git.git Make git-stripspace a builtin Signed-off-by: Lukas Sandström Signed-off-by: Junio C Hamano --- diff --git a/Makefile b/Makefile index 18bd94074..2e093af6a 100644 --- a/Makefile +++ b/Makefile @@ -144,7 +144,7 @@ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \ # The ones that do not have to link with lcrypto, lz nor xdiff. SIMPLE_PROGRAMS = \ - git-stripspace$X git-daemon$X + git-daemon$X # ... and all the rest that could be moved out of bindir to gitexecdir PROGRAMS = \ @@ -165,7 +165,7 @@ PROGRAMS = \ BUILT_INS = git-log$X git-whatchanged$X git-show$X \ git-count-objects$X git-diff$X git-push$X git-mailsplit$X \ - git-grep$X git-add$X git-rm$X git-rev-list$X \ + git-grep$X git-add$X git-rm$X git-rev-list$X git-stripspace$X \ git-check-ref-format$X git-rev-parse$X git-mailinfo$X \ git-init-db$X git-tar-tree$X git-upload-tar$X git-format-patch$X \ git-ls-files$X git-ls-tree$X git-get-tar-commit-id$X \ @@ -226,7 +226,7 @@ BUILTIN_OBJS = \ builtin-read-tree.o builtin-commit-tree.o builtin-mailinfo.o \ builtin-apply.o builtin-show-branch.o builtin-diff-files.o \ builtin-diff-index.o builtin-diff-stages.o builtin-diff-tree.o \ - builtin-cat-file.o builtin-mailsplit.o + builtin-cat-file.o builtin-mailsplit.o builtin-stripspace.o GITLIBS = $(LIB_FILE) $(XDIFF_LIB) LIBS = $(GITLIBS) -lz diff --git a/builtin-stripspace.c b/builtin-stripspace.c new file mode 100644 index 000000000..2ce1264f7 --- /dev/null +++ b/builtin-stripspace.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include "builtin.h" + +/* + * Remove empty lines from the beginning and end. + * + * Turn multiple consecutive empty lines into just one + * empty line. Return true if it is an incomplete line. + */ +static int cleanup(char *line) +{ + int len = strlen(line); + + if (len && line[len-1] == '\n') { + if (len == 1) + return 0; + do { + unsigned char c = line[len-2]; + if (!isspace(c)) + break; + line[len-2] = '\n'; + len--; + line[len] = 0; + } while (len > 1); + return 0; + } + return 1; +} + +void stripspace(FILE *in, FILE *out) +{ + int empties = -1; + int incomplete = 0; + char line[1024]; + + while (fgets(line, sizeof(line), in)) { + incomplete = cleanup(line); + + /* Not just an empty line? */ + if (line[0] != '\n') { + if (empties > 0) + fputc('\n', out); + empties = 0; + fputs(line, out); + continue; + } + if (empties < 0) + continue; + empties++; + } + if (incomplete) + fputc('\n', out); +} + +int cmd_stripspace(int argc, const char **argv, char **envp) +{ + stripspace(stdin, stdout); + return 0; +} diff --git a/builtin.h b/builtin.h index 46671e6ea..e50379d45 100644 --- a/builtin.h +++ b/builtin.h @@ -56,4 +56,7 @@ extern int split_mbox(const char **mbox, const char *dir, int allow_bare, int nr extern int cmd_mailinfo(int argc, const char **argv, char **envp); extern int mailinfo(FILE *in, FILE *out, int ks, const char *encoding, const char *msg, const char *patch); + +extern int cmd_stripspace(int argc, const char **argv, char **envp); +extern void stripspace(FILE *in, FILE *out); #endif diff --git a/git.c b/git.c index 89d4cd2e3..f00a07272 100644 --- a/git.c +++ b/git.c @@ -181,7 +181,8 @@ static void handle_internal_command(int argc, const char **argv, char **envp) { "rev-parse", cmd_rev_parse }, { "write-tree", cmd_write_tree }, { "mailsplit", cmd_mailsplit }, - { "mailinfo", cmd_mailinfo } + { "mailinfo", cmd_mailinfo }, + { "stripspace", cmd_stripspace } }; int i; diff --git a/stripspace.c b/stripspace.c deleted file mode 100644 index 65a634645..000000000 --- a/stripspace.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include - -/* - * Remove empty lines from the beginning and end. - * - * Turn multiple consecutive empty lines into just one - * empty line. Return true if it is an incomplete line. - */ -static int cleanup(char *line) -{ - int len = strlen(line); - - if (len && line[len-1] == '\n') { - if (len == 1) - return 0; - do { - unsigned char c = line[len-2]; - if (!isspace(c)) - break; - line[len-2] = '\n'; - len--; - line[len] = 0; - } while (len > 1); - return 0; - } - return 1; -} - -int main(int argc, char **argv) -{ - int empties = -1; - int incomplete = 0; - char line[1024]; - - while (fgets(line, sizeof(line), stdin)) { - incomplete = cleanup(line); - - /* Not just an empty line? */ - if (line[0] != '\n') { - if (empties > 0) - putchar('\n'); - empties = 0; - fputs(line, stdout); - continue; - } - if (empties < 0) - continue; - empties++; - } - if (incomplete) - putchar('\n'); - return 0; -}