static void import_tag(struct cvs_file *cf, RCSNUM *branch, RCSNUM *newrev) { int i; if (cvs_noexec != 1) { rcs_sym_add(cf->file_rcs, vendor_tag, branch); for (i = 0; i < tagcount; i++) rcs_sym_add(cf->file_rcs, release_tags[i], newrev); } }
static void rcs_attach_symbol(RCSFILE *file, const char *symname) { char *rnum; RCSNUM *rev; char rbuf[RCS_REV_BUFSZ]; int rm; rm = 0; rev = NULL; if ((rnum = strrchr(symname, ':')) != NULL) { if (rnum[1] == '\0') rev = file->rf_head; *(rnum++) = '\0'; } else { rm = 1; } if (rev == NULL && rm != 1) { if ((rev = rcsnum_parse(rnum)) == NULL) errx(1, "bad revision %s", rnum); } if (rcsflags & RCSPROG_NFLAG) rm = 1; if (rm == 1) { if (rcs_sym_remove(file, symname) < 0) { if (rcs_errno == RCS_ERR_NOENT && !(rcsflags & RCSPROG_NFLAG)) warnx("cannot delete nonexisting symbol %s", symname); } else { if (rcsflags & RCSPROG_NFLAG) rm = 0; } } if (rm == 0) { if (rcs_sym_add(file, symname, rev) < 0 && rcs_errno == RCS_ERR_DUPENT) { rcsnum_tostr(rcs_sym_getrev(file, symname), rbuf, sizeof(rbuf)); errx(1, "symbolic name %s already bound to %s", symname, rbuf); } } }
static void import_new(struct cvs_file *cf) { int i; BUF *bp; mode_t mode; time_t tstamp; struct stat st; struct rcs_branch *brp; struct rcs_delta *rdp; RCSNUM *branch, *brev; tstamp = -1; cvs_log(LP_TRACE, "import_new(%s)", cf->file_name); if (cvs_noexec == 1) { import_printf("N %s/%s\n", import_repository, cf->file_path); return; } if (fstat(cf->fd, &st) == -1) fatal("import_new: %s", strerror(errno)); mode = st.st_mode; if (dflag == 1) tstamp = st.st_mtime; if ((branch = rcsnum_parse(import_branch)) == NULL) fatal("import_new: failed to parse branch"); bp = buf_load_fd(cf->fd); if ((brev = rcsnum_brtorev(branch)) == NULL) fatal("import_new: failed to get first branch revision"); cf->repo_fd = open(cf->file_rpath, O_CREAT | O_RDONLY); if (cf->repo_fd < 0) fatal("import_new: %s: %s", cf->file_rpath, strerror(errno)); cf->file_rcs = rcs_open(cf->file_rpath, cf->repo_fd, RCS_CREATE, (mode & ~(S_IWUSR | S_IWGRP | S_IWOTH))); if (cf->file_rcs == NULL) fatal("import_new: failed to create RCS file for %s", cf->file_path); rcs_branch_set(cf->file_rcs, branch); if (rcs_sym_add(cf->file_rcs, vendor_tag, branch) == -1) fatal("import_new: failed to add vendor tag"); for (i = 0; i < tagcount; i++) { if (rcs_sym_add(cf->file_rcs, release_tags[i], brev) == -1) fatal("import_new: failed to add release tag"); } if (rcs_rev_add(cf->file_rcs, brev, logmsg, tstamp, NULL) == -1) fatal("import_new: failed to create first branch revision"); if (rcs_rev_add(cf->file_rcs, RCS_HEAD_REV, "Initial revision", tstamp, NULL) == -1) fatal("import_new: failed to create first revision"); if ((rdp = rcs_findrev(cf->file_rcs, cf->file_rcs->rf_head)) == NULL) fatal("import_new: cannot find newly added revision"); brp = xmalloc(sizeof(*brp)); brp->rb_num = rcsnum_alloc(); rcsnum_cpy(brev, brp->rb_num, 0); TAILQ_INSERT_TAIL(&(rdp->rd_branches), brp, rb_list); if (rcs_deltatext_set(cf->file_rcs, cf->file_rcs->rf_head, bp) == -1) fatal("import_new: failed to set deltatext"); if (kflag) rcs_kwexp_set(cf->file_rcs, kflag); rcs_write(cf->file_rcs); import_printf("N %s/%s\n", import_repository, cf->file_path); rcsnum_free(branch); rcsnum_free(brev); }
void cvs_add_tobranch(struct cvs_file *cf, char *tag) { BUF *bp; char attic[MAXPATHLEN], repo[MAXPATHLEN]; char *msg; struct stat st; RCSNUM *branch; cvs_log(LP_TRACE, "cvs_add_tobranch(%s)", cf->file_name); if (cvs_noexec == 1) return; if (fstat(cf->fd, &st) == -1) fatal("cvs_add_tobranch: %s", strerror(errno)); cvs_get_repository_path(cf->file_wd, repo, MAXPATHLEN); (void)xsnprintf(attic, MAXPATHLEN, "%s/%s", repo, CVS_PATH_ATTIC); if (mkdir(attic, 0755) == -1 && errno != EEXIST) fatal("cvs_add_tobranch: failed to create Attic"); (void)xsnprintf(attic, MAXPATHLEN, "%s/%s/%s%s", repo, CVS_PATH_ATTIC, cf->file_name, RCS_FILE_EXT); xfree(cf->file_rpath); cf->file_rpath = xstrdup(attic); cf->repo_fd = open(cf->file_rpath, O_CREAT|O_RDONLY); if (cf->repo_fd < 0) fatal("cvs_add_tobranch: %s: %s", cf->file_rpath, strerror(errno)); cf->file_rcs = rcs_open(cf->file_rpath, cf->repo_fd, RCS_CREATE|RCS_WRITE, 0444); if (cf->file_rcs == NULL) fatal("cvs_add_tobranch: failed to create RCS file for %s", cf->file_path); if ((branch = rcsnum_parse("1.1.2")) == NULL) fatal("cvs_add_tobranch: failed to parse branch"); if (rcs_sym_add(cf->file_rcs, tag, branch) == -1) fatal("cvs_add_tobranch: failed to add vendor tag"); (void)xasprintf(&msg, "file %s was initially added on branch %s.", cf->file_name, tag); if (rcs_rev_add(cf->file_rcs, RCS_HEAD_REV, msg, -1, NULL) == -1) fatal("cvs_add_tobranch: failed to create first branch " "revision"); xfree(msg); if (rcs_findrev(cf->file_rcs, cf->file_rcs->rf_head) == NULL) fatal("cvs_add_tobranch: cannot find newly added revision"); bp = buf_alloc(1); if (rcs_deltatext_set(cf->file_rcs, cf->file_rcs->rf_head, bp) == -1) fatal("cvs_add_tobranch: failed to set deltatext"); rcs_comment_set(cf->file_rcs, " * "); if (rcs_state_set(cf->file_rcs, cf->file_rcs->rf_head, RCS_STATE_DEAD) == -1) fatal("cvs_add_tobranch: failed to set state"); }