]>
git.proxmox.com Git - libgit2.git/blob - src/message.c
327b984fc7ce4df1993aafa2185aab91fe99621e
2 * Copyright (C) the libgit2 contributors. All rights reserved.
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
10 static size_t line_length_without_trailing_spaces(const char *line
, size_t len
)
13 unsigned char c
= line
[len
- 1];
22 /* Greatly inspired from git.git "stripspace" */
23 /* see https://github.com/git/git/blob/497215d8811ac7b8955693ceaad0899ecd894ed2/builtin/stripspace.c#L4-67 */
24 int git_message_prettify(git_buf
*message_out
, const char *message
, int strip_comments
, char comment_char
)
26 const size_t message_len
= strlen(message
);
28 int consecutive_empty_lines
= 0;
29 size_t i
, line_length
, rtrimmed_line_length
;
33 if ((error
= git_buf_sanitize(message_out
)) < 0)
36 for (i
= 0; i
< strlen(message
); i
+= line_length
) {
37 next_newline
= memchr(message
+ i
, '\n', message_len
- i
);
39 if (next_newline
!= NULL
) {
40 line_length
= next_newline
- (message
+ i
) + 1;
42 line_length
= message_len
- i
;
45 if (strip_comments
&& line_length
&& message
[i
] == comment_char
)
48 rtrimmed_line_length
= line_length_without_trailing_spaces(message
+ i
, line_length
);
50 if (!rtrimmed_line_length
) {
51 consecutive_empty_lines
++;
55 if (consecutive_empty_lines
> 0 && message_out
->size
> 0)
56 git_buf_putc(message_out
, '\n');
58 consecutive_empty_lines
= 0;
59 git_buf_put(message_out
, message
+ i
, rtrimmed_line_length
);
60 git_buf_putc(message_out
, '\n');
63 return git_buf_oom(message_out
) ? -1 : 0;