1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-30 05:40:06 +00:00
freebsd-ports/net/cvsync/files/patch-common_rcslib_c
Hiroki Sato b851d6ed3c Update to 0.25.0. It supports commitid.
Obtained from:	OpenBSD
2014-07-21 21:07:16 +00:00

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);