version 1.159, 2006/04/25 07:57:10 |
version 1.160, 2006/04/25 13:36:35 |
|
|
if (rcs_optarg == NULL) |
if (rcs_optarg == NULL) |
pb.date = DATE_MTIME; |
pb.date = DATE_MTIME; |
else if ((pb.date = cvs_date_parse(rcs_optarg)) <= 0) |
else if ((pb.date = cvs_date_parse(rcs_optarg)) <= 0) |
fatal("invalid date"); |
errx(1, "invalid date"); |
break; |
break; |
case 'f': |
case 'f': |
rcs_setrevstr(&rev_str, rcs_optarg); |
rcs_setrevstr(&rev_str, rcs_optarg); |
|
|
case 'm': |
case 'm': |
pb.rcs_msg = rcs_optarg; |
pb.rcs_msg = rcs_optarg; |
if (pb.rcs_msg == NULL) |
if (pb.rcs_msg == NULL) |
fatal("missing message for -m option"); |
errx(1, "missing message for -m option"); |
pb.flags &= ~INTERACTIVE; |
pb.flags &= ~INTERACTIVE; |
break; |
break; |
case 'N': |
case 'N': |
|
|
xfree(pb.symbol); |
xfree(pb.symbol); |
pb.symbol = xstrdup(rcs_optarg); |
pb.symbol = xstrdup(rcs_optarg); |
if (rcs_sym_check(pb.symbol) != 1) |
if (rcs_sym_check(pb.symbol) != 1) |
fatal("invalid symbol `%s'", pb.symbol); |
errx(1, "invalid symbol `%s'", pb.symbol); |
break; |
break; |
case 'q': |
case 'q': |
pb.flags |= QUIET; |
pb.flags |= QUIET; |
|
|
case 's': |
case 's': |
pb.state = rcs_optarg; |
pb.state = rcs_optarg; |
if (rcs_state_check(pb.state) < 0) |
if (rcs_state_check(pb.state) < 0) |
fatal("invalid state `%s'", pb.state); |
errx(1, "invalid state `%s'", pb.state); |
break; |
break; |
case 'T': |
case 'T': |
pb.flags |= PRESERVETIME; |
pb.flags |= PRESERVETIME; |
|
|
} |
} |
|
|
if ((pb.username = getlogin()) == NULL) |
if ((pb.username = getlogin()) == NULL) |
fatal("getlogin failed"); |
err(1, "getlogin"); |
|
|
|
|
for (i = 0; i < argc; i++) { |
for (i = 0; i < argc; i++) { |
pb.filename = argv[i]; |
pb.filename = argv[i]; |
|
|
if ((workfile_fd = open(pb.filename, O_RDONLY)) == -1) |
if ((workfile_fd = open(pb.filename, O_RDONLY)) == -1) |
fatal("%s: %s", pb.filename, strerror(errno)); |
err(1, "%s", pb.filename); |
|
|
/* |
/* |
* Test for existence of ,v file. If we are expected to |
* Test for existence of ,v file. If we are expected to |
|
|
|
|
pb.file = rcs_open(pb.fpath, pb.openflags, pb.fmode); |
pb.file = rcs_open(pb.fpath, pb.openflags, pb.fmode); |
if (pb.file == NULL) |
if (pb.file == NULL) |
fatal("failed to open rcsfile '%s'", pb.fpath); |
errx(1, "failed to open rcsfile '%s'", pb.fpath); |
|
|
if (pb.flags & DESCRIPTION) |
if (pb.flags & DESCRIPTION) |
rcs_set_description(pb.file, pb.description); |
rcs_set_description(pb.file, pb.description); |
|
|
if (rev_str != NULL) |
if (rev_str != NULL) |
if ((pb.newrev = rcs_getrevnum(rev_str, pb.file)) == |
if ((pb.newrev = rcs_getrevnum(rev_str, pb.file)) == |
NULL) |
NULL) |
fatal("invalid revision: %s", rev_str); |
errx(1, "invalid revision: %s", rev_str); |
|
|
if (!(pb.flags & NEWFILE)) |
if (!(pb.flags & NEWFILE)) |
pb.flags |= CI_SKIPDESC; |
pb.flags |= CI_SKIPDESC; |
|
|
t_head = localtime(&head_date); |
t_head = localtime(&head_date); |
strftime(dbuf2, sizeof(dbuf2), fmt, t_head); |
strftime(dbuf2, sizeof(dbuf2), fmt, t_head); |
|
|
fatal("%s: Date %s preceeds %s in revision %s.", |
errx(1, "%s: Date %s preceeds %s in revision %s.", |
pb->file->rf_path, dbuf1, dbuf2, |
pb->file->rf_path, dbuf1, dbuf2, |
rcsnum_tostr(pb->frev, numb2, sizeof(numb2))); |
rcsnum_tostr(pb->frev, numb2, sizeof(numb2))); |
} |
} |
|
|
|
|
/* Current head revision gets the RCS patch as rd_text */ |
/* Current head revision gets the RCS patch as rd_text */ |
if (rcs_deltatext_set(pb->file, pb->frev, pb->deltatext) == -1) |
if (rcs_deltatext_set(pb->file, pb->frev, pb->deltatext) == -1) |
fatal("failed to set new rd_text for head rev"); |
errx(1, "failed to set new rd_text for head rev"); |
|
|
/* Now add our new revision */ |
/* Now add our new revision */ |
if (rcs_rev_add(pb->file, |
if (rcs_rev_add(pb->file, |
|
|
*/ |
*/ |
if (pb->newrev != NULL) { |
if (pb->newrev != NULL) { |
if (rcs_head_set(pb->file, pb->newrev) < 0) |
if (rcs_head_set(pb->file, pb->newrev) < 0) |
fatal("rcs_head_set failed"); |
errx(1, "rcs_head_set failed"); |
} else |
} else |
pb->newrev = pb->file->rf_head; |
pb->newrev = pb->file->rf_head; |
|
|
/* New head revision has to contain entire file; */ |
/* New head revision has to contain entire file; */ |
if (rcs_deltatext_set(pb->file, pb->frev, filec) == -1) |
if (rcs_deltatext_set(pb->file, pb->frev, filec) == -1) |
fatal("failed to set new head revision"); |
errx(1, "failed to set new head revision"); |
|
|
/* Attach a symbolic name to this revision if specified. */ |
/* Attach a symbolic name to this revision if specified. */ |
if (pb->symbol != NULL && |
if (pb->symbol != NULL && |
|
|
|
|
/* Maintain RCSFILE permissions */ |
/* Maintain RCSFILE permissions */ |
if (fstat(workfile_fd, &st) == -1) |
if (fstat(workfile_fd, &st) == -1) |
fatal("%s: %s", pb->filename, strerror(errno)); |
err(1, "%s", pb->filename); |
|
|
/* Strip all the write bits */ |
/* Strip all the write bits */ |
pb->file->rf_mode = st.st_mode & |
pb->file->rf_mode = st.st_mode & |
|
|
*/ |
*/ |
if (pb->newrev != NULL) { |
if (pb->newrev != NULL) { |
if (rcs_head_set(pb->file, pb->newrev) < 0) |
if (rcs_head_set(pb->file, pb->newrev) < 0) |
fatal("rcs_head_set failed"); |
errx(1, "rcs_head_set failed"); |
} else |
} else |
pb->newrev = pb->file->rf_head; |
pb->newrev = pb->file->rf_head; |
|
|
|
|
|
|
/* Inherit RCSFILE permissions from file being checked in */ |
/* Inherit RCSFILE permissions from file being checked in */ |
if (fstat(workfile_fd, &st) == -1) |
if (fstat(workfile_fd, &st) == -1) |
fatal("%s: %s", pb->filename, strerror(errno)); |
err(1, "%s", pb->filename); |
|
|
/* Strip all the write bits */ |
/* Strip all the write bits */ |
pb->file->rf_mode = st.st_mode & |
pb->file->rf_mode = st.st_mode & |
|
|
struct stat sb; |
struct stat sb; |
|
|
if (fstat(workfile_fd, &sb) == -1) |
if (fstat(workfile_fd, &sb) == -1) |
fatal("%s: %s", pb->filename, strerror(errno)); |
err(1, "%s", pb->filename); |
|
|
pb->date = (time_t)sb.st_mtimespec.tv_sec; |
pb->date = (time_t)sb.st_mtimespec.tv_sec; |
} |
} |
|
|
if (*c == '$') { |
if (*c == '$') { |
end = c - start + 2; |
end = c - start + 2; |
if (end >= sizeof(buf)) |
if (end >= sizeof(buf)) |
fatal("keyword buffer" |
errx(1, "keyword buffer" |
" too small!"); |
" too small!"); |
strlcpy(buf, start, end); |
strlcpy(buf, start, end); |
checkin_parsekeyword(buf, rev, |
checkin_parsekeyword(buf, rev, |
|
|
/* only parse revision if one is not already set */ |
/* only parse revision if one is not already set */ |
if (*rev == NULL) { |
if (*rev == NULL) { |
if ((*rev = rcsnum_parse(tokens[2])) == NULL) |
if ((*rev = rcsnum_parse(tokens[2])) == NULL) |
fatal("could not parse rcsnum"); |
errx(1, "could not parse rcsnum"); |
} |
} |
*author = xstrdup(tokens[5]); |
*author = xstrdup(tokens[5]); |
*state = xstrdup(tokens[6]); |
*state = xstrdup(tokens[6]); |
|
|
strlcat(datestring, " ", len); |
strlcat(datestring, " ", len); |
strlcat(datestring, tokens[4], len); |
strlcat(datestring, tokens[4], len); |
if ((*date = cvs_date_parse(datestring)) <= 0) |
if ((*date = cvs_date_parse(datestring)) <= 0) |
fatal("could not parse date\n"); |
errx(1, "could not parse date"); |
xfree(datestring); |
xfree(datestring); |
break; |
break; |
case KW_TYPE_AUTHOR: |
case KW_TYPE_AUTHOR: |
|
|
strlcat(datestring, " ", len); |
strlcat(datestring, " ", len); |
strlcat(datestring, tokens[2], len); |
strlcat(datestring, tokens[2], len); |
if ((*date = cvs_date_parse(datestring)) <= 0) |
if ((*date = cvs_date_parse(datestring)) <= 0) |
fatal("could not parse date\n"); |
errx(1, "could not parse date"); |
xfree(datestring); |
xfree(datestring); |
break; |
break; |
case KW_TYPE_STATE: |
case KW_TYPE_STATE: |
|
|
tokens[i++] = p; |
tokens[i++] = p; |
} |
} |
if ((*rev = rcsnum_parse(tokens[1])) == NULL) |
if ((*rev = rcsnum_parse(tokens[1])) == NULL) |
fatal("could not parse rcsnum"); |
errx(1, "could not parse rcsnum"); |
break; |
break; |
} |
} |
} |
} |