mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-30 05:40:06 +00:00
b851d6ed3c
Obtained from: OpenBSD
92 lines
2.3 KiB
Plaintext
92 lines
2.3 KiB
Plaintext
$OpenBSD: patch-common_rcslib_c,v 1.2 2014/06/25 17:54:07 naddy Exp $
|
|
--- common/rcslib.c.orig Mon Jul 18 16:34:30 2005
|
|
+++ common/rcslib.c Wed Jun 25 00:48:47 2014
|
|
@@ -64,6 +64,7 @@ static const struct rcs_keyword rcs_keywords[] = {
|
|
{ "strict", 6 },
|
|
{ "symbols", 7 },
|
|
{ "text", 4 },
|
|
+ { "commitid", 8 },
|
|
{ NULL, 0 }
|
|
};
|
|
|
|
@@ -83,7 +84,8 @@ enum {
|
|
RCS_STATE,
|
|
RCS_STRICT,
|
|
RCS_SYMBOLS,
|
|
- RCS_TEXT
|
|
+ RCS_TEXT,
|
|
+ RCS_COMMITID
|
|
};
|
|
|
|
#define RCS_SKIP(p, e) \
|
|
@@ -579,6 +581,40 @@ rcslib_parse_delta(struct rcslib_file *rcs, char *sp,
|
|
return (NULL);
|
|
}
|
|
|
|
+ /* commitid id; */
|
|
+ rcskey = &rcs_keywords[RCS_COMMITID];
|
|
+ if ((sp + rcskey->namelen > bp) ||
|
|
+ (memcmp(sp, rcskey->name, rcskey->namelen) != 0)) {
|
|
+ rev->commitid.i_id = NULL;
|
|
+ rev->commitid.i_len = 0;
|
|
+ } else {
|
|
+ sp += rcskey->namelen;
|
|
+
|
|
+ p = sp;
|
|
+ RCS_SKIP_NORET(sp, bp)
|
|
+ if ((sp > bp) || (sp == p)) {
|
|
+ free(delta->rd_rev);
|
|
+ return (NULL);
|
|
+ }
|
|
+
|
|
+ if ((sp = rcslib_parse_id(sp, bp, &rev->commitid)) == NULL) {
|
|
+ free(delta->rd_rev);
|
|
+ return (NULL);
|
|
+ }
|
|
+
|
|
+ RCS_SKIP_NORET(sp, bp)
|
|
+ if ((sp > bp) || (*sp++ != ';')) {
|
|
+ free(delta->rd_rev);
|
|
+ return (NULL);
|
|
+ }
|
|
+
|
|
+ RCS_SKIP_NORET(sp, bp)
|
|
+ if (sp > bp) {
|
|
+ free(delta->rd_rev);
|
|
+ return (NULL);
|
|
+ }
|
|
+ }
|
|
+
|
|
/* { newphrase }* */
|
|
p = sp;
|
|
if ((sp = rcslib_parse_newphrase(sp, bp)) == NULL) {
|
|
@@ -1522,10 +1558,24 @@ rcslib_write_delta(int fd, const struct rcslib_revisio
|
|
iov[0].iov_len = 7;
|
|
iov[1].iov_base = rev->next.n_str;
|
|
iov[1].iov_len = rev->next.n_len;
|
|
- iov[2].iov_base = ";\n\n";
|
|
- iov[2].iov_len = 3;
|
|
- len = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len;
|
|
- if ((wn = writev(fd, iov, 3)) == -1)
|
|
+ iov[2].iov_base = ";\n";
|
|
+ iov[2].iov_len = 2;
|
|
+ if (rev->commitid.i_len > 0) {
|
|
+ iov[3].iov_base ="commitid\t";
|
|
+ iov[3].iov_len = 9;
|
|
+ iov[4].iov_base = rev->commitid.i_id;
|
|
+ iov[4].iov_len = rev->commitid.i_len;
|
|
+ iov[5].iov_base = ";\n\n";
|
|
+ iov[5].iov_len = 3;
|
|
+ } else {
|
|
+ iov[3].iov_base = "\n";
|
|
+ iov[3].iov_len = 1;
|
|
+ iov[4].iov_base = iov[5].iov_base = NULL;
|
|
+ iov[4].iov_len = iov[5].iov_len = 0;
|
|
+ }
|
|
+ len = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len +
|
|
+ iov[3].iov_len + iov[4].iov_len + iov[5].iov_len;
|
|
+ if ((wn = writev(fd, iov, 6)) == -1)
|
|
return (false);
|
|
if ((size_t)wn != len)
|
|
return (false);
|