1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
--- subversion/svn/util.c.orig 2014-03-20 14:21:37.701997671 -0400
+++ subversion/svn/util.c 2014-03-20 14:21:56.023996839 -0400
@@ -664,6 +664,68 @@
}
+/*
+ * Since we're adding freebsd-specific tokens to the log message,
+ * clean out any leftovers to avoid accidently sending them to other
+ * projects that won't be expecting them.
+ */
+
+#define NPREFIX 7
+char *prefixes[NPREFIX] = {
+ "PR:",
+ "Submitted by:",
+ "Reviewed by:",
+ "Approved by:",
+ "Obtained from:",
+ "MFC after:",
+ "Relnotes:",
+ "Security:",
+};
+
+void
+cleanmsg(apr_size_t *l, char *s)
+{
+ int i;
+ char *pos;
+ char *kw;
+ char *p;
+ int empty;
+
+ for (i = 0; i < NPREFIX; i++) {
+ pos = s;
+ while ((kw = strstr(pos, prefixes[i])) != NULL) {
+ /* Check to see if keyword is at start of line (or buffer) */
+ if (!(kw == s || kw[-1] == '\r' || kw[-1] == '\n')) {
+ pos = kw + 1;
+ continue;
+ }
+ p = kw + strlen(prefixes[i]);
+ empty = 1;
+ while (1) {
+ if (*p == ' ' || *p == '\t') {
+ p++;
+ continue;
+ }
+ if (*p == '\0' || *p == '\r' || *p == '\n')
+ break;
+ empty = 0;
+ break;
+ }
+ if (empty && (*p == '\r' || *p == '\n')) {
+ memmove(kw, p + 1, strlen(p + 1) + 1);
+ if (l)
+ *l -= (p + 1 - kw);
+ } else if (empty) {
+ *kw = '\0';
+ if (l)
+ *l -= (p - kw);
+ } else {
+ pos = p;
+ }
+ }
+ }
+}
+
#define EDITOR_EOF_PREFIX _("--This line, and those below, will be ignored--")
svn_error_t *
@@ -679,8 +741,28 @@
/* Set default message. */
default_msg = svn_stringbuf_create(APR_EOL_STR, pool);
+ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "PR:\t\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "Submitted by:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "Reviewed by:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "Approved by:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "Obtained from:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "MFC after:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "Relnotes:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "Security:\t" APR_EOL_STR);
svn_stringbuf_appendcstr(default_msg, EDITOR_EOF_PREFIX);
- svn_stringbuf_appendcstr(default_msg, APR_EOL_STR APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Description of fields to fill in above: 76 columns --|" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> PR: If a GNATS PR is affected by the change." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Submitted by: If someone else sent in the change." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Reviewed by: If someone else reviewed your modification." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Approved by: If you needed approval for this commit." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Obtained from: If the change is from a third party." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> MFC after: N [day[s]|week[s]|month[s]]. Request a reminder email." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Relnotes: Set to 'yes' for mention in release notes." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Security: Vulnerability reference (one per line) or description." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, "> Empty fields above will be automatically removed." APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
*tmp_file = NULL;
if (lmb->message)
@@ -692,6 +774,7 @@
that follows it. */
truncate_buffer_at_prefix(&(log_msg_buf->len), log_msg_buf->data,
EDITOR_EOF_PREFIX);
+ cleanmsg(NULL, (char*)log_msg_buf->data);
/* Make a string from a stringbuf, sharing the data allocation. */
log_msg_str->data = log_msg_buf->data;
@@ -811,6 +894,13 @@
if (message)
truncate_buffer_at_prefix(&message->len, message->data,
EDITOR_EOF_PREFIX);
+ /*
+ * Since we're adding freebsd-specific tokens to the log message,
+ * clean out any leftovers to avoid accidently sending them to other
+ * projects that won't be expecting them.
+ */
+ if (message)
+ cleanmsg(&message->len, message->data);
if (message)
{
|