Lines Matching defs:rcs

13  * The routines contained in this file do all the rcs file parsing and
85 static char *RCS_getdatebranch PROTO((RCSNode * rcs, const char *date,
201 * places like the rcs field of struct file_info.
292 RCSNode *rcs;
308 rcs = RCS_parsercsfile_i(fp, rcsfile);
309 if (rcs != NULL)
311 rcs->flags |= VALID;
313 rcs->flags |= INATTIC;
317 retval = rcs;
336 RCSNode *rcs;
345 error (0, errno, "Couldn't open rcs file `%s'", rcsfile);
349 rcs = RCS_parsercsfile_i (fp, rcsfile);
351 return (rcs);
441 error (0, 0, "`%s' does not appear to be a valid rcs file",
495 error (1, 0, "`%s' does not appear to be a valid rcs file",
671 RCS_setattic (rcs, toattic)
672 RCSNode *rcs;
683 in other parts of rcs.c too, easier if the REPOS and FILE
690 if (rcs->flags & INATTIC)
693 /* Example: rcs->path is "/foo/bar/baz,v". */
694 newpath = xmalloc (strlen (rcs->path) + sizeof CVSATTIC + 5);
695 p = last_component (rcs->path);
696 strncpy (newpath, rcs->path, p - rcs->path);
697 strcpy (newpath + (p - rcs->path), CVSATTIC);
708 if (CVS_RENAME (rcs->path, newpath) < 0)
717 if (isreadable (rcs->path) || !isreadable (newpath))
720 rcs->path, newpath);
728 if (!(rcs->flags & INATTIC))
731 newpath = xmalloc (strlen (rcs->path));
733 /* Example: rcs->path is "/foo/bar/Attic/baz,v". */
734 p = last_component (rcs->path);
735 strncpy (newpath, rcs->path, p - rcs->path - 1);
736 newpath[p - rcs->path - 1] = '\0';
737 q = newpath + (p - rcs->path - 1) - (sizeof CVSATTIC - 1);
741 if (CVS_RENAME (rcs->path, newpath) < 0)
744 rcs->path);
750 free (rcs->path);
751 rcs->path = newpath;
769 RCS_fully_parse (rcs)
770 RCSNode *rcs;
775 RCS_reparsercsfile (rcs, &fp, &rcsbuf);
788 vers = findnode (rcs->versions, key);
792 key, rcs->path);
814 key, vnode->version, rcs->path);
821 if (!STREQ (vnode->version, rcs->head))
847 op, rcs->path, vnode->version);
851 rcs->path, vnode->version);
855 rcs->path, vnode->version);
871 rcs->path, vnode->version);
891 key, vnode->version, rcs->path);
905 key, vnode->version, rcs->path);
917 rcsbuf_cache (rcs, &rcsbuf);
1980 rcsbuf_cache (rcs, rcsbuf)
1981 RCSNode *rcs;
1986 cached_rcs = rcs;
1987 ++rcs->refcount;
2011 rcsbuf_cache_open (rcs, pos, pfp, prcsbuf)
2012 RCSNode *rcs;
2017 if (cached_rcs == rcs && !cached_rcsbuf.mmapped)
2034 cached_rcsbuf.filename = rcs->path;
2041 --rcs->refcount;
2042 if (rcs->refcount <= 0)
2048 * rcs file buffer, there would be a considerably larger memory savings
2053 * forget to make sure rcs->pos < pos here...
2058 *pfp = CVS_FOPEN (rcs->path, FOPEN_BINARY_READ);
2060 error (1, 0, "unable to reopen `%s'", rcs->path);
2064 error (1, 0, "cannot fseek RCS file %s", rcs->path);
2066 rcsbuf_open (prcsbuf, *pfp, rcs->path, pos);
2073 * process the symbols list of the rcs file
2115 * process the locks list of the rcs file
2203 RCS_getversion (rcs, tag, date, force_tag_match, simple_tag)
2204 RCSNode *rcs;
2214 assert (rcs != NULL);
2220 if (! RCS_nodeisbranch (rcs, tag))
2229 branch = RCS_whatbranch (rcs, tag);
2234 rev = RCS_getdatebranch (rcs, date, branch);
2239 return RCS_gettag (rcs, tag, force_tag_match, simple_tag);
2241 return RCS_getdate (rcs, date, force_tag_match);
2243 return RCS_head (rcs);
2261 RCS_tag2rev (rcs, tag)
2262 RCSNode *rcs;
2268 assert (rcs != NULL);
2270 if (rcs->flags & PARTIAL)
2271 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
2280 if (RCS_exist_rev (rcs, tag))
2298 pa = RCS_getbranch (rcs, rev, 1);
2325 if (RCS_exist_rev (rcs, rev))
2335 return (RCS_head (rcs));
2338 rev = translate_symtag (rcs, tag);
2358 RCS_gettag (rcs, symtag, force_tag_match, simple_tag)
2359 RCSNode *rcs;
2370 assert (rcs != NULL);
2373 if (rcs->flags & PARTIAL)
2374 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
2379 if (force_tag_match && (rcs->flags & VALID) && (rcs->flags & INATTIC))
2383 return RCS_head (rcs);
2390 version = translate_symtag (rcs, symtag);
2419 branch = RCS_getbranch (rcs, magic, 1);
2437 return RCS_head (rcs);
2460 branch = RCS_getbranch (rcs, tag, force_tag_match);
2469 p = findnode (rcs->versions, tag);
2490 return RCS_head (rcs);
2499 * - has a branch of 0 (see rcs.h RCS_MAGIC_BRANCH)
2519 RCS_magicrev (rcs, rev)
2520 RCSNode *rcs;
2546 test_branch = RCS_getbranch (rcs, xrev, 1);
2557 if (walklist (RCS_symbols(rcs), checkmagic_proc, NULL) != 0)
2582 * or symbolic tag resolves to a "branch" within the rcs file.
2588 RCS_isbranch (rcs, rev)
2589 RCSNode *rcs;
2597 if (rcs == NULL)
2601 return (RCS_nodeisbranch (rcs, rev));
2606 * or symbolic tag resolves to a "branch" within the rcs file. We do
2610 RCS_nodeisbranch (rcs, rev)
2611 RCSNode *rcs;
2617 assert (rcs != NULL);
2623 version = translate_symtag (rcs, rev);
2662 RCS_whatbranch (rcs, rev)
2663 RCSNode *rcs;
2670 if (rcs == NULL)
2674 version = translate_symtag (rcs, rev);
2713 RCS_getbranch (rcs, tag, force_tag_match)
2714 RCSNode *rcs;
2725 assert (rcs != NULL);
2727 if (rcs->flags & PARTIAL)
2728 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
2739 for (cp = rcs->head; cp != NULL;)
2743 p = findnode (rcs->versions, cp);
2750 return (RCS_head (rcs));
2761 return (RCS_head (rcs));
2770 p = findnode (rcs->versions, tag);
2781 return (RCS_head (rcs));
2803 return (RCS_head (rcs));
2810 p = findnode (rcs->versions, nextvers);
2817 return (RCS_head (rcs));
2834 RCS_branch_head (rcs, rev)
2835 RCSNode *rcs;
2842 assert (rcs != NULL);
2844 if (RCS_nodeisbranch (rcs, rev))
2845 return RCS_getbranch (rcs, rev, 1);
2851 num = translate_symtag (rcs, rev);
2856 retval = RCS_getbranch (rcs, br, 1);
2863 revision on that branch. For example, RCS_getbranchpoint (rcs,
2875 RCS_getbranchpoint (rcs, target)
2876 RCSNode *rcs;
2888 /* TARGET is a trunk revision; return rcs->head. */
2889 return (RCS_head (rcs));
2898 rcs->path, target);
2904 vp = findnode (rcs->versions, branch);
2907 error (0, 0, "%s: can't find branch point %s", rcs->path, target);
2934 error (0, 0, "%s: can't find branch point %s", rcs->path, target);
2947 RCS_head (rcs)
2948 RCSNode *rcs;
2951 assert (rcs != NULL);
2957 if (rcs->branch)
2958 return (RCS_getbranch (rcs, rcs->branch, 1));
2960 return (xstrdup (rcs->head));
2968 RCS_getdate (rcs, date, force_tag_match)
2969 RCSNode *rcs;
2979 assert (rcs != NULL);
2981 if (rcs->flags & PARTIAL)
2982 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
2985 if (rcs->branch != NULL)
2987 retval = RCS_getdatebranch (rcs, date, rcs->branch);
2993 if (rcs->head)
2995 p = findnode (rcs->versions, rcs->head);
2998 error (0, 0, "%s: head revision %s doesn't exist", rcs->path,
2999 rcs->head);
3013 p = findnode (rcs->versions, vers->next);
3019 error (0, 0, "%s: no head revision", rcs->path);
3037 p = findnode (rcs->versions, "1.1.1.1");
3051 retval = RCS_getdatebranch (rcs, date, CVSBRANCH);
3074 RCS_getdatebranch (rcs, date, branch)
3075 RCSNode *rcs;
3095 assert (rcs != NULL);
3097 if (rcs->flags & PARTIAL)
3098 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
3100 p = findnode (rcs->versions, xrev);
3132 p = findnode (rcs->versions, p->key);
3145 p = findnode (rcs->versions, vers->next);
3183 RCS_getrevtime (rcs, rev, date, fudge)
3184 RCSNode *rcs;
3196 assert (rcs != NULL);
3198 if (rcs->flags & PARTIAL)
3199 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
3202 p = findnode (rcs->versions, rev);
3210 error (1, 0, "%s: invalid date for revision %s (%s)", rcs->path,
3220 rcs->path, rev, vers->date);
3248 RCS_getlocks (rcs)
3249 RCSNode *rcs;
3251 assert(rcs != NULL);
3253 if (rcs->flags & PARTIAL)
3254 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
3256 if (rcs->locks_data) {
3257 rcs->locks = getlist ();
3258 do_locks (rcs->locks, rcs->locks_data);
3259 free(rcs->locks_data);
3260 rcs->locks_data = NULL;
3263 return rcs->locks;
3267 RCS_symbols(rcs)
3268 RCSNode *rcs;
3270 assert(rcs != NULL);
3272 if (rcs->flags & PARTIAL)
3273 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
3275 if (rcs->symbols_data) {
3276 rcs->symbols = getlist ();
3277 do_symbols (rcs->symbols, rcs->symbols_data);
3278 free(rcs->symbols_data);
3279 rcs->symbols_data = NULL;
3282 return rcs->symbols;
3290 translate_symtag (rcs, tag)
3291 RCSNode *rcs;
3294 if (rcs->flags & PARTIAL)
3295 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
3297 if (rcs->symbols != NULL)
3302 p = findnode (rcs->symbols, tag);
3309 if (rcs->symbols_data != NULL)
3320 cp = rcs->symbols_data;
3331 if ((cp == rcs->symbols_data || whitespace (cp[-1]))
3474 RCS_isdead (rcs, tag)
3475 RCSNode *rcs;
3481 assert (rcs != NULL);
3483 if (rcs->flags & PARTIAL)
3484 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
3486 p = findnode (rcs->versions, tag);
3500 RCS_getexpand (rcs)
3501 RCSNode *rcs;
3505 assert (rcs != NULL);
3506 return rcs->expand;
3511 RCS_setexpand (rcs, expand)
3512 RCSNode *rcs;
3517 assert (rcs != NULL);
3518 if (rcs->expand != NULL)
3519 free (rcs->expand);
3520 rcs->expand = xstrdup (expand);
3668 expand_keywords (rcs, ver, name, log, loglen, expand, buf, len, retbuf, retlen)
3669 RCSNode *rcs;
3705 lock = findnode (RCS_getlocks(rcs), ver->version);
3804 path = rcs->path;
3808 path = getfullCVSname(rcs->path, &old_path);
3810 path = last_component (rcs->path);
3844 value = escape_keyword_value (last_component (rcs->path),
3860 value = escape_keyword_value (rcs->path, &free_value);
4163 /* This function mimics the behavior of `rcs co' almost exactly. The
4169 RCS_checkout (rcs, workfile, rev, nametag, options, sout, pfn, callerdat)
4170 RCSNode *rcs;
4211 rcs->path,
4233 rev = RCS_getbranch (rcs, rev, 1);
4239 if (rev == NULL || STREQ (rev, rcs->head))
4245 if (rcs->flags & PARTIAL)
4246 RCS_reparsercsfile (rcs, &fp, &rcsbuf);
4248 rcsbuf_cache_open (rcs, rcs->delta_pos, &fp, &rcsbuf);
4252 error (1, 0, "unexpected EOF reading %s", rcs->path);
4254 if (!STREQ (rcs->head, key))
4256 rcs->head, key);
4291 error (1, errno, "cannot fstat %s", rcs->path);
4293 rcsbuf_cache (rcs, &rcsbuf);
4303 if (rcs->flags & PARTIAL)
4304 RCS_reparsercsfile (rcs, &fp, &rcsbuf);
4310 if (stat (rcs->path, &sb) < 0)
4311 error (1, errno, "cannot stat %s", rcs->path);
4317 error (1, errno, "cannot fstat %s", rcs->path);
4321 RCS_deltas (rcs, fp, rcsbufp, rev, RCS_FETCH, &value, &len,
4328 co would use the string we have stored in rcs->expand. */
4329 if ((options == NULL || options[0] == '\0') && rcs->expand == NULL)
4342 ouroptions = rcs->expand;
4366 vp = findnode (rcs->versions, rev == NULL ? rcs->head : rev);
4369 rev == NULL ? rcs->head : rev);
4380 rcs->path, vers->version);
4508 vp = findnode (rcs->versions, rev == NULL ? rcs->head : rev);
4511 rev == NULL ? rcs->head : rev);
4514 expand_keywords (rcs, vp->data, nametag, log, loglen,
4543 rcs->path);
4563 rcs->path);
4738 static RCSVers *RCS_findlock_or_tip PROTO ((RCSNode *rcs));
4755 the -b option of rcs(1))."
4763 RCS_findlock_or_tip (rcs)
4764 RCSNode *rcs;
4774 locklist = RCS_getlocks (rcs);
4783 %s: multiple revisions locked by %s; please specify one", rcs->path, user);
4793 p = findnode (rcs->versions, lock->key);
4797 rcs->path,
4815 defaultrev = RCS_getbranch (rcs, rcs->branch, 0);
4816 p = findnode (rcs->versions, defaultrev);
4822 rcs->path);
4930 RCS_addbranch (rcs, branch)
4931 RCSNode *rcs;
4951 nodep = findnode (rcs->versions, branchpoint);
4954 error (0, 0, "%s: can't find branch point %s", rcs->path, branchpoint);
5048 This function should almost exactly mimic the behavior of `rcs ci'. The
5059 RCS_checkin (rcs, workfile_in, message, rev, citime, flags)
5060 RCSNode *rcs;
5086 if (rcs->flags & PARTIAL)
5087 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
5095 assert (rcs->path);
5096 workfile = xstrdup (last_component (rcs->path));
5106 resolve_symlink (&(rcs->path));
5111 cvs_output (rcs->path, 0);
5234 if (rcs->head == NULL)
5253 rcs->head = newrev;
5260 (void) addnode (rcs->versions, nodep);
5271 rcs->expand != NULL && STREQ (rcs->expand, "b") ? "rb" : "r",
5277 cvs_output (rcs->head, 0);
5284 fout = rcs_internal_lockfile (rcs->path);
5285 RCS_putadmin (rcs, fout);
5286 RCS_putdtree (rcs, rcs->head, fout);
5287 RCS_putdesc (rcs, fout);
5288 rcs->delta_pos = ftell (fout);
5289 if (rcs->delta_pos == -1)
5290 error (1, errno, "cannot ftell for %s", rcs->path);
5292 rcs_internal_unlockfile (fout, rcs->path);
5333 commitpt = RCS_findlock_or_tip (rcs);
5340 || STREQ (commitpt->version, rcs->head))
5343 delta->version = RCS_addbranch (rcs, commitpt->version);
5372 tip = xstrdup (rcs->head);
5382 tip = xstrdup (rcs->head);
5384 tip = RCS_getbranch (rcs, branch, 1);
5395 rcs->path, branch);
5401 delta->version = RCS_addbranch (rcs, branch);
5423 rcs->path,
5438 nodep = findnode (rcs->versions, tip);
5450 nodep = findnode (RCS_getlocks (rcs), commitpt->version);
5467 rcs->path,
5486 status = RCS_checkout (rcs, NULL, commitpt->version, NULL,
5487 ((rcs->expand != NULL
5488 && STREQ (rcs->expand, "b"))
5496 commitpt->version, rcs->path);
5505 if (rcs->expand && STREQ (rcs->expand, "b"))
5508 if (STREQ (commitpt->version, rcs->head) &&
5521 rcs->expand != NULL && STREQ (rcs->expand, "b") ? "rb" : "r",
5558 rcs->expand != NULL && STREQ (rcs->expand, "b") ? "rb" : "r",
5596 rcs->expand != NULL && STREQ (rcs->expand, "b") ? "rb" : "r",
5623 if (STREQ (commitpt->version, rcs->head))
5625 delta->next = rcs->head;
5626 rcs->head = xstrdup (delta->version);
5633 if (rcs->versions == NULL)
5634 rcs->versions = getlist();
5640 (void) addnode (rcs->versions, nodep);
5652 RCS_rewrite (rcs, dtext, commitpt->version);
5708 RCS_cmp_file (rcs, rev1, rev1_cache, rev2, options, filename)
5709 RCSNode *rcs;
5724 expand = RCS_getexpand (rcs);
5747 retcode = RCS_checkout(rcs, NULL, rev, NULL, options, tmp, NULL, NULL);
5769 if (RCS_checkout (rcs, NULL, rev1, NULL, options, tmpfile,
5773 rev1, rcs->path);
5790 if (RCS_checkout (rcs, (char *)NULL, rev2 ? rev2 : rev1,
5795 rev2 ? rev2 : rev1, rcs->path);
5876 RCS_settag (rcs, tag, rev)
5877 RCSNode *rcs;
5884 if (rcs->flags & PARTIAL)
5885 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
5904 rev = rcs->branch ? rcs->branch : rcs->head;
5906 /* At this point rcs->symbol_data may not have been parsed.
5909 symbols = RCS_symbols (rcs);
5913 rcs->symbols = symbols;
5937 RCS_deltag (rcs, tag)
5938 RCSNode *rcs;
5943 if (rcs->flags & PARTIAL)
5944 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
5946 symbols = RCS_symbols (rcs);
5962 RCS_setbranch (rcs, rev)
5963 RCSNode *rcs;
5966 if (rcs->flags & PARTIAL)
5967 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
5972 if (rev == NULL && rcs->branch == NULL)
5974 if (rev != NULL && rcs->branch != NULL && STREQ (rev, rcs->branch))
5977 if (rcs->branch != NULL)
5978 free (rcs->branch);
5979 rcs->branch = xstrdup (rev);
5996 RCS_lock (rcs, rev, lock_quiet)
5997 RCSNode *rcs;
6006 if (rcs->flags & PARTIAL)
6007 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
6009 locks = RCS_getlocks (rcs);
6011 locks = rcs->locks = getlist();
6016 xrev = RCS_head (rcs);
6018 xrev = RCS_gettag (rcs, rev, 1, (int *) NULL);
6023 if (xrev == NULL || findnode (rcs->versions, xrev) == NULL)
6026 error (0, 0, "%s: revision %s absent", rcs->path, rev);
6090 RCS_unlock (rcs, rev, unlock_quiet)
6091 RCSNode *rcs;
6101 if (rcs->flags & PARTIAL)
6102 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
6107 rcs->locks) held by the caller. */
6113 if (rcs->head == NULL)
6120 locks = RCS_getlocks (rcs);
6137 %s: multiple revisions locked by %s; please specify one", rcs->path, user);
6153 xrev = RCS_gettag (rcs, rev, 1, (int *) NULL);
6156 error (0, 0, "%s: revision %s absent", rcs->path, rev);
6161 lock = findnode (RCS_getlocks (rcs), xrev);
6178 %s: revision %s locked by %s; breaking lock", rcs->path, xrev, (char *)lock->data);
6179 repos = xstrdup (rcs->path);
6201 RCS_addaccess (rcs, user)
6202 RCSNode *rcs;
6207 if (rcs->flags & PARTIAL)
6208 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
6210 if (rcs->access == NULL)
6211 rcs->access = xstrdup (user);
6214 access = xstrdup (rcs->access);
6224 rcs->access = (char *) xrealloc
6225 (rcs->access, strlen (rcs->access) + strlen (user) + 2);
6226 strcat (rcs->access, " ");
6227 strcat (rcs->access, user);
6234 RCS_delaccess (rcs, user)
6235 RCSNode *rcs;
6241 if (rcs->flags & PARTIAL)
6242 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
6244 if (rcs->access == NULL)
6249 free (rcs->access);
6250 rcs->access = NULL;
6254 p = rcs->access;
6275 RCS_getaccess (rcs)
6276 RCSNode *rcs;
6278 if (rcs->flags & PARTIAL)
6279 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
6281 return rcs->access;
6340 RCS_delete_revs (rcs, tag1, tag2, inclusive)
6341 RCSNode *rcs;
6373 rev1 = RCS_gettag (rcs, tag1, 1, NULL);
6374 if (rev1 == NULL || (nodep = findnode (rcs->versions, rev1)) == NULL)
6376 error (0, 0, "%s: Revision %s doesn't exist.", rcs->path, tag1);
6382 rev2 = RCS_gettag (rcs, tag2, 1, NULL);
6383 if (rev2 == NULL || (nodep = findnode (rcs->versions, rev2)) == NULL)
6385 error (0, 0, "%s: Revision %s doesn't exist.", rcs->path, tag2);
6391 RCS->HEAD. (*Not* RCS_head(rcs), which may return rcs->branch
6396 rev2 = xstrdup (rcs->head);
6407 if (RCS_isbranch (rcs, rev1) && STREQ (rev1, rev2))
6409 char *tmp = RCS_getbranch (rcs, rev1, 0);
6427 rcs(1). */
6486 branchpoint = RCS_getbranchpoint (rcs, rev1 != NULL ? rev1 : rev2);
6506 nodep = findnode (rcs->versions, branchpoint);
6511 nodep = findnode (rcs->versions, revp->next);
6515 error (0, 0, "%s: Revision %s doesn't exist.", rcs->path, rev1);
6523 nodep = findnode (rcs->versions, before);
6530 nodep = findnode (rcs->versions, before);
6553 nodep = findnode (rcs->versions, next);
6562 if (findnode (RCS_getlocks (rcs), revp->version))
6565 rcs->path,
6572 rcs->path,
6580 (walklist (RCS_symbols (rcs), findtag, revp->version) ||
6581 walklist (RCS_symbols (rcs), findmagictag, revp->version)))
6585 more useful fashion (fullname not rcs->path). */
6625 error (0, 0, "%s: invalid revision range %s:%s", rcs->path,
6634 state after "rcs -i"), CVS has never been able to cope with
6637 We don't include rcs->path in the message since "cvs admin"
6667 char *expand = RCS_getexpand (rcs);
6675 status = RCS_checkout (rcs, NULL, after, NULL, "-ko", afterfile,
6697 free (rcs->head);
6698 rcs->head = xstrdup (after);
6707 status = RCS_checkout (rcs, NULL, before, NULL, "-ko", beforefile,
6724 error (0, 0, "%s: could not diff", rcs->path);
6735 nodep = findnode (rcs->versions, after);
6763 nodep = findnode (rcs->versions, next);
6787 nodep = findnode (rcs->versions, before);
6804 nodep = findnode (rcs->versions, before);
6854 RCS_exist_tag (rcs, tag)
6855 RCSNode *rcs;
6859 assert (rcs != NULL);
6861 if (findnode (RCS_symbols (rcs), tag))
6869 * This includes magic branch revisions, not found in rcs->versions,
6870 * but only in rcs->symbols, requiring a list walk to find them.
6875 RCS_exist_rev (rcs, rev)
6876 RCSNode *rcs;
6880 assert (rcs != NULL);
6882 if (rcs->flags & PARTIAL)
6883 RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
6885 if (findnode(rcs->versions, rev) != 0)
6888 if (walklist (RCS_symbols(rcs), findtag, rev) != 0)
7382 with rcs rather than RCS because this does not take an RCSNode
7468 RCS_deltas (rcs, fp, rcsbuf, version, op, text, len, log, loglen)
7469 RCSNode *rcs;
7500 rcsbuf_cache_open (rcs, rcs->delta_pos, &fp, &rcsbuf_local);
7533 error (1, 0, "unexpected EOF reading RCS file %s", rcs->path);
7536 node = findnode (rcs->versions, key);
7540 key, rcs->path);
7570 error (1, 0, "%s does not appear to be a valid rcs file",
7571 rcs->path);
7581 rcs->path);
7593 error (1, 0, "invalid rcs file %s", rcs->path);
7600 rcs->path,
7603 error (1, 0, "invalid change text in %s", rcs->path);
7664 rcs->path);
7667 rcs->path);
7673 rcs->path);
7682 rcs->path);
7697 rcsbuf_cache (rcs, rcsbuf);
7701 version, rcs->path);
8032 RCS_getdeltatext (rcs, fp, rcsbuf)
8033 RCSNode *rcs;
8050 error (1, 0, "%s: unexpected EOF", rcs->path);
8053 p = findnode (rcs->versions, num);
8057 num, rcs->path);
8064 error (1, 0, "%s, delta %s: unexpected EOF", rcs->path, num);
8067 rcs->path, num, key);
8075 error (1, 0, "%s, delta %s: unexpected EOF", rcs->path, num);
8088 rcs->path, num, key);
8220 RCS_putadmin (rcs, fp)
8221 RCSNode *rcs;
8224 fprintf (fp, "%s\t%s;\n", RCSHEAD, rcs->head ? rcs->head : "");
8225 if (rcs->branch)
8226 fprintf (fp, "%s\t%s;\n", RCSBRANCH, rcs->branch);
8229 if (rcs->access)
8232 s = xstrdup (rcs->access);
8242 if (rcs->symbols == NULL && rcs->symbols_data != NULL)
8245 fputs (rcs->symbols_data, fp);
8248 walklist (RCS_symbols (rcs), putsymbol_proc, (void *) fp);
8252 if (rcs->locks_data)
8253 fprintf (fp, "\t%s", rcs->locks_data);
8254 else if (rcs->locks)
8255 walklist (rcs->locks, putlock_proc, (void *) fp);
8256 if (rcs->strict_locks)
8260 if (rcs->comment)
8263 expand_at_signs (rcs->comment, (off_t) strlen (rcs->comment), fp);
8266 if (rcs->expand && ! STREQ (rcs->expand, "kv"))
8267 fprintf (fp, "%s\t@%s@;\n", RCSEXPAND, rcs->expand);
8269 walklist (rcs->other, putrcsfield_proc, (void *) fp);
8314 RCS_putdtree (rcs, rev, fp)
8315 RCSNode *rcs;
8338 p = findnode (rcs->versions, rev);
8343 rcs->path);
8375 RCS_putdtree (rcs, p->key, fp);
8384 RCS_putdesc (rcs, fp)
8385 RCSNode *rcs;
8389 if (rcs->desc != NULL)
8391 off_t len = (off_t) strlen (rcs->desc);
8394 expand_at_signs (rcs->desc, len, fp);
8395 if (rcs->desc[len-1] != '\n')
8436 RCS_copydeltas (rcs, fin, rcsbufin, fout, newdtext, insertpt)
8437 RCSNode *rcs;
8456 actions = walklist (rcs->versions, count_delta_actions, (void *) NULL);
8466 dtext = RCS_getdeltatext (rcs, fin, rcsbufin);
8482 np = findnode (rcs->versions, dtext->version);
8486 dtext->version, rcs->path);
8844 RCS_rewrite (rcs, newdtext, insertpt)
8845 RCSNode *rcs;
8852 assert (rcs);
8858 resolve_symlink (&(rcs->path));
8860 fout = rcs_internal_lockfile (rcs->path);
8862 RCS_putadmin (rcs, fout);
8863 RCS_putdtree (rcs, rcs->head, fout);
8864 RCS_putdesc (rcs, fout);
8867 rcsbuf_cache_open (rcs, rcs->delta_pos, &fin, &rcsbufin);
8874 rcs->delta_pos = ftell (fout);
8875 if (rcs->delta_pos == -1)
8876 error (1, errno, "cannot ftell in RCS file %s", rcs->path);
8878 RCS_copydeltas (rcs, fin, &rcsbufin, fout, newdtext, insertpt);
8890 error (0, 0, "warning: ferror set while rewriting RCS file `%s'", rcs->path);
8892 error (0, errno, "warning: closing RCS file `%s'", rcs->path);
8894 rcs_internal_unlockfile (fout, rcs->path);
8900 RCS_abandon (rcs)
8901 RCSNode *rcs;
8903 free_rcsnode_contents (rcs);
8904 rcs->symbols_data = NULL;
8905 rcs->expand = NULL;
8906 rcs->access = NULL;
8907 rcs->locks_data = NULL;
8908 rcs->comment = NULL;
8909 rcs->desc = NULL;
8910 rcs->flags |= PARTIAL;
8929 make_file_label (path, rev, rcs)
8932 RCSNode *rcs;
8947 RCS_getrevtime (rcs, rev, datebuf, 0);