summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@cvs.openbsd.org>2008-06-20 13:59:15 +0000
committerTobias Stoeckmann <tobias@cvs.openbsd.org>2008-06-20 13:59:15 +0000
commit66029bd05abe84f764a8d9804ee1d3a33e1cf56c (patch)
treeee517185b9d2644ba40bd07f9395793058ad7e04
parent04f6d7c312bdaef5bf15fc15ec3b18c9a9cf651b (diff)
If -N has been specified along -D for diff, treat invalid dates as non-existent file. Spotted by sthen. ok joris
-rw-r--r--usr.bin/cvs/diff.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/usr.bin/cvs/diff.c b/usr.bin/cvs/diff.c
index 4f02c224e43..82c0e6ca188 100644
--- a/usr.bin/cvs/diff.c
+++ b/usr.bin/cvs/diff.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: diff.c,v 1.142 2008/06/17 06:38:21 joris Exp $ */
+/* $OpenBSD: diff.c,v 1.143 2008/06/20 13:59:14 tobias Exp $ */
/*
* Copyright (c) 2008 Tobias Stoeckmann <tobias@openbsd.org>
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
@@ -330,17 +330,20 @@ cvs_diff_local(struct cvs_file *cf)
cvs_specified_date = date1;
diff_rev1 = rcs_translate_tag(rev1, cf->file_rcs);
if (diff_rev1 == NULL && cvs_cmdop == CVS_OP_DIFF) {
- if (rev1 != NULL)
+ if (rev1 != NULL) {
cvs_log(LP_ERR, "tag %s not in file %s", rev1,
cf->file_path);
- else {
+ goto cleanup;
+ } else if (Nflag) {
+ diff_rev1 = NULL;
+ } else {
gmtime_r(&cvs_specified_date, &datetm);
strftime(tbuf, sizeof(tbuf),
"%Y.%m.%d.%H.%M.%S", &datetm);
cvs_log(LP_ERR, "no revision for date %s in "
"file %s", tbuf, cf->file_path);
+ goto cleanup;
}
- goto cleanup;
} else if (diff_rev1 == NULL && cvs_cmdop == CVS_OP_RDIFF &&
force_head) {
/* -f is not allowed for unknown symbols */
@@ -367,14 +370,17 @@ cvs_diff_local(struct cvs_file *cf)
if (rev2 != NULL) {
cvs_log(LP_ERR, "tag %s not in file %s", rev2,
cf->file_path);
+ goto cleanup;
+ } else if (Nflag) {
+ diff_rev2 = NULL;
} else {
gmtime_r(&cvs_specified_date, &datetm);
strftime(tbuf, sizeof(tbuf),
"%Y.%m.%d.%H.%M.%S", &datetm);
cvs_log(LP_ERR, "no revision for date %s in "
"file %s", tbuf, cf->file_path);
+ goto cleanup;
}
- goto cleanup;
} else if (diff_rev2 == NULL && cvs_cmdop == CVS_OP_RDIFF &&
force_head) {
/* -f is not allowed for unknown symbols */
@@ -396,7 +402,7 @@ cvs_diff_local(struct cvs_file *cf)
switch (cvs_cmdop) {
case CVS_OP_DIFF:
- if (cf->file_status == FILE_UPTODATE &&
+ if (cf->file_status == FILE_UPTODATE && diff_rev1 != NULL &&
rcsnum_cmp(diff_rev1, cf->file_rcsrev, 0) == 0)
goto cleanup;
break;