version 1.154, 2006/04/19 06:53:41 |
version 1.155, 2006/04/21 14:18:26 |
|
|
argv += rcs_optind; |
argv += rcs_optind; |
|
|
if (argc == 0) { |
if (argc == 0) { |
cvs_log(LP_ERR, "no input file"); |
warnx("no input file"); |
(usage)(); |
(usage)(); |
exit(1); |
exit(1); |
} |
} |
|
|
if (pb.openflags & RCS_CREATE) |
if (pb.openflags & RCS_CREATE) |
pb.flags |= NEWFILE; |
pb.flags |= NEWFILE; |
else { |
else { |
cvs_log(LP_ERR, "No existing RCS file"); |
warnx("No existing RCS file"); |
status = 1; |
status = 1; |
continue; |
continue; |
} |
} |
} else { |
} else { |
if (pb.flags & CI_INIT) { |
if (pb.flags & CI_INIT) { |
cvs_log(LP_ERR, "%s already exists", pb.fpath); |
warnx("%s already exists", pb.fpath); |
status = 1; |
status = 1; |
continue; |
continue; |
} |
} |
|
|
rcsnum_tostr(pb->frev, rbuf, sizeof(rbuf)); |
rcsnum_tostr(pb->frev, rbuf, sizeof(rbuf)); |
|
|
if ((b1 = cvs_buf_load(pb->filename, BUF_AUTOEXT)) == NULL) { |
if ((b1 = cvs_buf_load(pb->filename, BUF_AUTOEXT)) == NULL) { |
cvs_log(LP_ERR, "failed to load file: '%s'", pb->filename); |
warnx("failed to load file: `%s'", pb->filename); |
goto out; |
goto out; |
} |
} |
|
|
if ((b2 = rcs_getrev(pb->file, pb->frev)) == NULL) { |
if ((b2 = rcs_getrev(pb->file, pb->frev)) == NULL) { |
cvs_log(LP_ERR, "failed to load revision"); |
warnx("failed to load revision"); |
goto out; |
goto out; |
} |
} |
|
|
if ((b3 = cvs_buf_alloc((size_t)128, BUF_AUTOEXT)) == NULL) { |
if ((b3 = cvs_buf_alloc((size_t)128, BUF_AUTOEXT)) == NULL) { |
cvs_log(LP_ERR, "failed to allocated buffer for diff"); |
warnx("failed to allocated buffer for diff"); |
goto out; |
goto out; |
} |
} |
|
|
|
|
*/ |
*/ |
if (pb->newrev != NULL && |
if (pb->newrev != NULL && |
rcsnum_cmp(pb->newrev, pb->frev, 0) > 0) { |
rcsnum_cmp(pb->newrev, pb->frev, 0) > 0) { |
cvs_log(LP_ERR, |
warnx("%s: revision %s too low; must be higher than %s", |
"%s: revision %s too low; must be higher than %s", |
|
pb->file->rf_path, |
pb->file->rf_path, |
rcsnum_tostr(pb->newrev, numb1, sizeof(numb1)), |
rcsnum_tostr(pb->newrev, numb1, sizeof(numb1)), |
rcsnum_tostr(pb->frev, numb2, sizeof(numb2))); |
rcsnum_tostr(pb->frev, numb2, sizeof(numb2))); |
|
|
|
|
/* Get RCS patch */ |
/* Get RCS patch */ |
if ((pb->deltatext = checkin_diff_file(pb)) == NULL) { |
if ((pb->deltatext = checkin_diff_file(pb)) == NULL) { |
cvs_log(LP_ERR, "failed to get diff"); |
warnx("failed to get diff"); |
goto fail; |
goto fail; |
} |
} |
|
|
|
|
|
|
if (rcs_lock_remove(pb->file, pb->username, pb->frev) < 0) { |
if (rcs_lock_remove(pb->file, pb->username, pb->frev) < 0) { |
if (rcs_errno != RCS_ERR_NOENT) |
if (rcs_errno != RCS_ERR_NOENT) |
cvs_log(LP_WARN, "failed to remove lock"); |
warnx("failed to remove lock"); |
else if (!(pb->flags & CO_LOCK)) |
else if (!(pb->flags & CO_LOCK)) |
cvs_log(LP_WARN, "previous revision was not locked; " |
warnx("previous revision was not locked; " |
"ignoring -l option"); |
"ignoring -l option"); |
} |
} |
|
|
|
|
if (rcs_rev_add(pb->file, |
if (rcs_rev_add(pb->file, |
(pb->newrev == NULL ? RCS_HEAD_REV : pb->newrev), |
(pb->newrev == NULL ? RCS_HEAD_REV : pb->newrev), |
pb->rcs_msg, pb->date, pb->author) != 0) { |
pb->rcs_msg, pb->date, pb->author) != 0) { |
cvs_log(LP_ERR, "failed to add new revision"); |
warnx("failed to add new revision"); |
goto fail; |
goto fail; |
} |
} |
|
|
|
|
} else { |
} else { |
dp = cvs_buf_load(pb->description, BUF_AUTOEXT); |
dp = cvs_buf_load(pb->description, BUF_AUTOEXT); |
if (dp == NULL) { |
if (dp == NULL) { |
cvs_log(LP_ERR, |
warnx("failed to load description file '%s'", |
"failed to load description file '%s'", |
|
pb->description); |
pb->description); |
goto fail; |
goto fail; |
} |
} |
|
|
(pb->newrev == NULL ? RCS_HEAD_REV : pb->newrev), |
(pb->newrev == NULL ? RCS_HEAD_REV : pb->newrev), |
(pb->rcs_msg == NULL ? "Initial revision" : pb->rcs_msg), |
(pb->rcs_msg == NULL ? "Initial revision" : pb->rcs_msg), |
pb->date, pb->author) != 0) { |
pb->date, pb->author) != 0) { |
cvs_log(LP_ERR, "failed to add new revision"); |
warnx("failed to add new revision"); |
goto fail; |
goto fail; |
} |
} |
|
|
|
|
|
|
/* New head revision has to contain entire file; */ |
/* New head revision has to contain entire file; */ |
if (rcs_deltatext_set(pb->file, pb->file->rf_head, filec) == -1) { |
if (rcs_deltatext_set(pb->file, pb->file->rf_head, filec) == -1) { |
cvs_log(LP_ERR, "failed to set new head revision"); |
warnx("failed to set new head revision"); |
goto fail; |
goto fail; |
} |
} |
|
|
|
|
if (pb->flags & CI_SYMFORCE) { |
if (pb->flags & CI_SYMFORCE) { |
if (rcs_sym_remove(pb->file, pb->symbol) < 0) { |
if (rcs_sym_remove(pb->file, pb->symbol) < 0) { |
if (rcs_errno != RCS_ERR_NOENT) { |
if (rcs_errno != RCS_ERR_NOENT) { |
cvs_log(LP_ERR, |
warnx("problem removing symbol: %s", |
"problem removing symbol: %s", pb->symbol); |
pb->symbol); |
return (-1); |
return (-1); |
} |
} |
} |
} |
|
|
(rcs_errno == RCS_ERR_DUPENT)) { |
(rcs_errno == RCS_ERR_DUPENT)) { |
rcsnum_tostr(rcs_sym_getrev(pb->file, pb->symbol), |
rcsnum_tostr(rcs_sym_getrev(pb->file, pb->symbol), |
rbuf, sizeof(rbuf)); |
rbuf, sizeof(rbuf)); |
cvs_log(LP_ERR, |
warnx("symbolic name %s already bound to %s", pb->symbol, rbuf); |
"symbolic name %s already bound to %s", |
|
pb->symbol, rbuf); |
|
return (-1); |
return (-1); |
} else if (ret == -1) { |
} else if (ret == -1) { |
cvs_log(LP_ERR, "problem adding symbol: %s", |
warnx("problem adding symbol: %s", pb->symbol); |
pb->symbol); |
|
return (-1); |
return (-1); |
} |
} |
return (0); |
return (0); |
|
|
char rbuf[16]; |
char rbuf[16]; |
|
|
rcsnum_tostr(pb->frev, rbuf, sizeof(rbuf)); |
rcsnum_tostr(pb->frev, rbuf, sizeof(rbuf)); |
cvs_log(LP_WARN, |
warnx("file is unchanged; reverting to previous revision %s", rbuf); |
"file is unchanged; reverting to previous revision %s", |
|
rbuf); |
|
pb->flags |= CO_REVERT; |
pb->flags |= CO_REVERT; |
(void)unlink(pb->filename); |
(void)unlink(pb->filename); |
if ((pb->flags & CO_LOCK) || (pb->flags & CO_UNLOCK)) |
if ((pb->flags & CO_LOCK) || (pb->flags & CO_UNLOCK)) |
|
|
pb->flags, pb->username, pb->author, NULL, NULL); |
pb->flags, pb->username, pb->author, NULL, NULL); |
if (rcs_lock_remove(pb->file, pb->username, pb->frev) < 0) |
if (rcs_lock_remove(pb->file, pb->username, pb->frev) < 0) |
if (rcs_errno != RCS_ERR_NOENT) |
if (rcs_errno != RCS_ERR_NOENT) |
cvs_log(LP_WARN, "failed to remove lock"); |
warnx("failed to remove lock"); |
} |
} |
|
|
/* |
/* |
|
|
return (0); |
return (0); |
} |
} |
|
|
cvs_log(LP_ERR, |
warnx("%s: no lock set by %s", pb->file->rf_path, pb->username); |
"%s: no lock set by %s", pb->file->rf_path, pb->username); |
|
return (-1); |
return (-1); |
} |
} |
|
|
|
|
{ |
{ |
struct stat sb; |
struct stat sb; |
if (stat(pb->filename, &sb) != 0) { |
if (stat(pb->filename, &sb) != 0) { |
cvs_log(LP_ERRNO, "failed to stat `%s'", pb->filename); |
warn("%s", pb->filename); |
return (-1); |
return (-1); |
} |
} |
pb->date = (time_t)sb.st_mtimespec.tv_sec; |
pb->date = (time_t)sb.st_mtimespec.tv_sec; |