summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoris Vink <joris@cvs.openbsd.org>2006-05-30 21:32:53 +0000
committerJoris Vink <joris@cvs.openbsd.org>2006-05-30 21:32:53 +0000
commitf7e543c9413a632a7869f451136f104056a9a934 (patch)
treef1550d664e8eea31c2987547cf051667fb59ec47
parent1dd44c7700dd786d40d48ae0f90537f2a5d65e01 (diff)
fill in the correct revision number we will want in file_rcsrev
for each cvs_file struct, this will help us with sticky tags, commiting to branches and importing into existing repositories.
-rw-r--r--usr.bin/cvs/add.c4
-rw-r--r--usr.bin/cvs/commit.c6
-rw-r--r--usr.bin/cvs/diff.c4
-rw-r--r--usr.bin/cvs/file.c21
-rw-r--r--usr.bin/cvs/file.h5
-rw-r--r--usr.bin/cvs/remove.c4
-rw-r--r--usr.bin/cvs/status.c4
-rw-r--r--usr.bin/cvs/update.c14
8 files changed, 35 insertions, 27 deletions
diff --git a/usr.bin/cvs/add.c b/usr.bin/cvs/add.c
index 92478a002b8..cef95503659 100644
--- a/usr.bin/cvs/add.c
+++ b/usr.bin/cvs/add.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: add.c,v 1.50 2006/05/30 09:11:24 xsa Exp $ */
+/* $OpenBSD: add.c,v 1.51 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -82,7 +82,7 @@ cvs_add_local(struct cvs_file *cf)
{
cvs_log(LP_TRACE, "cvs_add_local(%s)", cf->file_path);
- cvs_file_classify(cf, 0);
+ cvs_file_classify(cf, NULL, 0);
/* dont use `cvs add *' */
if (strcmp(cf->file_name, ".") == 0 ||
diff --git a/usr.bin/cvs/commit.c b/usr.bin/cvs/commit.c
index 80a78dae576..26a57c708bf 100644
--- a/usr.bin/cvs/commit.c
+++ b/usr.bin/cvs/commit.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: commit.c,v 1.64 2006/05/30 04:20:27 joris Exp $ */
+/* $OpenBSD: commit.c,v 1.65 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -113,7 +113,7 @@ cvs_commit_check_conflicts(struct cvs_file *cf)
* cvs_file_classify makes the noise for us
* XXX - we want that?
*/
- cvs_file_classify(cf, 1);
+ cvs_file_classify(cf, NULL, 1);
if (cf->file_type == CVS_DIR) {
if (verbosity > 1)
@@ -156,7 +156,7 @@ cvs_commit_local(struct cvs_file *cf)
char *attic, *repo;
cvs_log(LP_TRACE, "cvs_commit_local(%s)", cf->file_path);
- cvs_file_classify(cf, 0);
+ cvs_file_classify(cf, NULL, 0);
if (cf->file_type != CVS_FILE)
fatal("cvs_commit_local: '%s' is not a file", cf->file_path);
diff --git a/usr.bin/cvs/diff.c b/usr.bin/cvs/diff.c
index 6cf5f26e2ab..252b4990a1a 100644
--- a/usr.bin/cvs/diff.c
+++ b/usr.bin/cvs/diff.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff.c,v 1.97 2006/05/29 07:17:30 joris Exp $ */
+/* $OpenBSD: diff.c,v 1.98 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -124,7 +124,7 @@ cvs_diff_local(struct cvs_file *cf)
return;
}
- cvs_file_classify(cf, 0);
+ cvs_file_classify(cf, NULL, 0);
if (cf->file_status == FILE_LOST) {
cvs_log(LP_ERR, "cannot find file %s", cf->file_path);
diff --git a/usr.bin/cvs/file.c b/usr.bin/cvs/file.c
index 01303ce9658..310dd42faae 100644
--- a/usr.bin/cvs/file.c
+++ b/usr.bin/cvs/file.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: file.c,v 1.152 2006/05/30 19:16:51 joris Exp $ */
+/* $OpenBSD: file.c,v 1.153 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
@@ -537,7 +537,7 @@ cvs_file_freelist(struct cvs_flisthead *fl)
}
void
-cvs_file_classify(struct cvs_file *cf, int loud)
+cvs_file_classify(struct cvs_file *cf, const char *tag, int loud)
{
size_t len;
time_t mtime;
@@ -639,10 +639,17 @@ cvs_file_classify(struct cvs_file *cf, int loud)
}
}
+ if (tag != NULL && cf->file_rcs != NULL)
+ cf->file_rcsrev = rcs_translate_tag(tag, cf->file_rcs);
+ else if (cf->file_rcs != NULL)
+ cf->file_rcsrev = cf->file_rcs->rf_head;
+ else
+ cf->file_rcsrev = NULL;
+
if (cf->file_ent != NULL)
rcsnum_tostr(cf->file_ent->ce_rev, r1, sizeof(r1));
- if (cf->file_rcs != NULL)
- rcsnum_tostr(cf->file_rcs->rf_head, r2, sizeof(r2));
+ if (cf->file_rcsrev != NULL)
+ rcsnum_tostr(cf->file_rcsrev, r2, sizeof(r2));
ismodified = rcsdead = 0;
if (cf->fd != -1 && cf->file_ent != NULL) {
@@ -658,11 +665,11 @@ cvs_file_classify(struct cvs_file *cf, int loud)
}
if (ismodified == 1 && cf->fd != -1 && cf->file_rcs != NULL) {
- b1 = rcs_getrev(cf->file_rcs, cf->file_rcs->rf_head);
+ b1 = rcs_getrev(cf->file_rcs, cf->file_rcsrev);
if (b1 == NULL)
fatal("failed to get HEAD revision for comparison");
- b1 = rcs_kwexp_buf(b1, cf->file_rcs, cf->file_rcs->rf_head);
+ b1 = rcs_kwexp_buf(b1, cf->file_rcs, cf->file_rcsrev);
/* XXX */
b2 = cvs_buf_load(cf->file_path, BUF_AUTOEXT);
@@ -677,7 +684,7 @@ cvs_file_classify(struct cvs_file *cf, int loud)
}
if (cf->file_rcs != NULL) {
- state = rcs_state_get(cf->file_rcs, cf->file_rcs->rf_head);
+ state = rcs_state_get(cf->file_rcs, cf->file_rcsrev);
if (state == NULL)
fatal("failed to get state for HEAD for %s",
cf->file_path);
diff --git a/usr.bin/cvs/file.h b/usr.bin/cvs/file.h
index 017b39231f7..00f5854de27 100644
--- a/usr.bin/cvs/file.h
+++ b/usr.bin/cvs/file.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: file.h,v 1.36 2006/05/28 17:25:18 joris Exp $ */
+/* $OpenBSD: file.h,v 1.37 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
* Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
@@ -42,6 +42,7 @@ struct cvs_file {
int file_status;
int file_flags;
+ RCSNUM *file_rcsrev;
RCSFILE *file_rcs;
struct cvs_ent *file_ent;
};
@@ -93,7 +94,7 @@ TAILQ_HEAD(ignore_head, cvs_ignpat);
void cvs_file_init(void);
void cvs_file_ignore(const char *, struct ignore_head *);
-void cvs_file_classify(struct cvs_file *, int);
+void cvs_file_classify(struct cvs_file *, const char *, int);
void cvs_file_free(struct cvs_file *);
void cvs_file_run(int, char **, struct cvs_recursion *);
void cvs_file_walklist(struct cvs_flisthead *, struct cvs_recursion *);
diff --git a/usr.bin/cvs/remove.c b/usr.bin/cvs/remove.c
index 2ab36aaf2b6..97a949bd1cb 100644
--- a/usr.bin/cvs/remove.c
+++ b/usr.bin/cvs/remove.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: remove.c,v 1.49 2006/05/30 21:00:42 joris Exp $ */
+/* $OpenBSD: remove.c,v 1.50 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2005, 2006 Xavier Santolaria <xsa@openbsd.org>
*
@@ -108,7 +108,7 @@ cvs_remove_local(struct cvs_file *cf)
return;
}
- cvs_file_classify(cf, 0);
+ cvs_file_classify(cf, NULL, 0);
if (force_remove == 1) {
if (unlink(cf->file_path) == -1)
diff --git a/usr.bin/cvs/status.c b/usr.bin/cvs/status.c
index 25d505cb1eb..737f9b082ea 100644
--- a/usr.bin/cvs/status.c
+++ b/usr.bin/cvs/status.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: status.c,v 1.60 2006/05/30 07:24:08 xsa Exp $ */
+/* $OpenBSD: status.c,v 1.61 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -102,7 +102,7 @@ cvs_status_local(struct cvs_file *cf)
cvs_log(LP_TRACE, "cvs_status_local(%s)", cf->file_path);
- cvs_file_classify(cf, 1);
+ cvs_file_classify(cf, NULL, 1);
if (cf->file_type == CVS_DIR) {
if (verbosity > 1)
diff --git a/usr.bin/cvs/update.c b/usr.bin/cvs/update.c
index a3ee80418a1..a299e403155 100644
--- a/usr.bin/cvs/update.c
+++ b/usr.bin/cvs/update.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: update.c,v 1.67 2006/05/28 17:25:18 joris Exp $ */
+/* $OpenBSD: update.c,v 1.68 2006/05/30 21:32:52 joris Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -113,7 +113,7 @@ cvs_update_enterdir(struct cvs_file *cf)
cvs_log(LP_TRACE, "cvs_update_enterdir(%s)", cf->file_path);
- cvs_file_classify(cf, 0);
+ cvs_file_classify(cf, NULL, 0);
if (cf->file_status == DIR_CREATE && build_dirs == 1) {
cvs_mkpath(cf->file_path);
@@ -241,7 +241,7 @@ cvs_update_local(struct cvs_file *cf)
* which is called from cvs_checkout_file().
*/
bp = NULL;
- cvs_file_classify(cf, 1);
+ cvs_file_classify(cf, NULL, 1);
switch (cf->file_status) {
case FILE_UNKNOWN:
@@ -269,20 +269,20 @@ cvs_update_local(struct cvs_file *cf)
case FILE_LOST:
case FILE_CHECKOUT:
case FILE_PATCH:
- bp = rcs_getrev(cf->file_rcs, cf->file_rcs->rf_head);
+ bp = rcs_getrev(cf->file_rcs, cf->file_rcsrev);
if (bp == NULL)
fatal("cvs_update_local: failed to get HEAD");
- cvs_checkout_file(cf, cf->file_rcs->rf_head, bp, 0);
+ cvs_checkout_file(cf, cf->file_rcsrev, bp, 0);
cvs_printf("U %s\n", cf->file_path);
break;
case FILE_MERGE:
bp = cvs_diff3(cf->file_rcs, cf->file_path,
- cf->file_ent->ce_rev, cf->file_rcs->rf_head, 1);
+ cf->file_ent->ce_rev, cf->file_rcsrev, 1);
if (bp == NULL)
fatal("cvs_update_local: failed to merge");
- cvs_checkout_file(cf, cf->file_rcs->rf_head, bp, CO_MERGE);
+ cvs_checkout_file(cf, cf->file_rcsrev, bp, CO_MERGE);
if (diff3_conflicts != 0) {
cvs_printf("C %s\n", cf->file_path);