summaryrefslogtreecommitdiff
path: root/usr.bin/cvs/rcs.c
diff options
context:
space:
mode:
authorNiall O'Higgins <niallo@cvs.openbsd.org>2006-03-11 22:44:12 +0000
committerNiall O'Higgins <niallo@cvs.openbsd.org>2006-03-11 22:44:12 +0000
commit8396d7871ce26544eb8554d070277994d427a910 (patch)
treef84277b70eaf9bf4553cea4e022d750046dcd2c9 /usr.bin/cvs/rcs.c
parentad743ae786746e4bd8f93f6afa2caff7bce0442a (diff)
- implement GNU-compatible handling of revisions specified as single
digits. e.g. ci -l4 or ci -u5 will work like GNU now. ok joris@
Diffstat (limited to 'usr.bin/cvs/rcs.c')
-rw-r--r--usr.bin/cvs/rcs.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/usr.bin/cvs/rcs.c b/usr.bin/cvs/rcs.c
index 0c61aad358e..c67c3fb2c5a 100644
--- a/usr.bin/cvs/rcs.c
+++ b/usr.bin/cvs/rcs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rcs.c,v 1.142 2006/03/11 18:40:14 niallo Exp $ */
+/* $OpenBSD: rcs.c,v 1.143 2006/03/11 22:44:11 niallo Exp $ */
/*
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
* All rights reserved.
@@ -1264,9 +1264,7 @@ rcs_rev_add(RCSFILE *rf, RCSNUM *rev, const char *msg, time_t date,
time_t now;
struct passwd *pw;
struct rcs_delta *ordp, *rdp;
- RCSNUM *old;
- old = rcsnum_alloc();
if (rev == RCS_HEAD_REV) {
if (rf->rf_flags & RCS_CREATE) {
if ((rev = rcsnum_parse(RCS_HEAD_INIT)) == NULL)
@@ -1274,24 +1272,13 @@ rcs_rev_add(RCSFILE *rf, RCSNUM *rev, const char *msg, time_t date,
rf->rf_head = rcsnum_alloc();
rcsnum_cpy(rev, rf->rf_head, 0);
} else {
- rcsnum_cpy(rf->rf_head, old, 0);
rev = rcsnum_inc(rf->rf_head);
}
} else {
if ((rdp = rcs_findrev(rf, rev)) != NULL) {
rcs_errno = RCS_ERR_DUPENT;
- rcsnum_free(old);
return (-1);
}
-
- if (!(rf->rf_flags & RCS_CREATE)) {
- ordp = NULL;
- rcsnum_cpy(rev, old, 0);
- while (ordp == NULL) {
- old = rcsnum_dec(old);
- ordp = rcs_findrev(rf, old);
- }
- }
}
if ((pw = getpwuid(getuid())) == NULL)
@@ -1308,10 +1295,12 @@ rcs_rev_add(RCSFILE *rf, RCSNUM *rev, const char *msg, time_t date,
rdp->rd_next = rcsnum_alloc();
- if (!(rf->rf_flags & RCS_CREATE))
- rcsnum_cpy(old, rdp->rd_next, 0);
+ if (!(rf->rf_flags & RCS_CREATE)) {
+ /* next should point to the previous HEAD */
+ ordp = TAILQ_FIRST(&(rf->rf_delta));
+ rcsnum_cpy(ordp->rd_num, rdp->rd_next, 0);
+ }
- rcsnum_free(old);
if (username == NULL)
username = pw->pw_name;
@@ -2970,8 +2959,9 @@ cvs_checkout_rev(RCSFILE *rf, RCSNUM *rev, CVSFILE *cf, char *fpath,
oldrev = rcsnum_alloc();
rcsnum_cpy(rev, oldrev, 0);
- if (rcsnum_dec(oldrev) == NULL)
+ if (oldrev->rn_id[oldrev->rn_len - 1] <= 0)
goto out;
+ oldrev = rcsnum_dec(oldrev);
l = snprintf(copyfile, sizeof(copyfile), ".#%s.%s",
cf->cf_name, rcsnum_tostr(oldrev, buf, sizeof(buf)));