version 1.136, 2008/05/30 10:12:12 |
version 1.137, 2008/05/30 11:06:17 |
|
|
static char *koptstr; |
static char *koptstr; |
static char *rev1 = NULL; |
static char *rev1 = NULL; |
static char *rev2 = NULL; |
static char *rev2 = NULL; |
|
static time_t date1 = -1; |
|
static time_t date2 = -1; |
|
|
struct cvs_cmd cvs_cmd_diff = { |
struct cvs_cmd cvs_cmd_diff = { |
CVS_OP_DIFF, CVS_USE_WDIR, "diff", |
CVS_OP_DIFF, CVS_USE_WDIR, "diff", |
|
|
strlcat(diffargs, " -c", sizeof(diffargs)); |
strlcat(diffargs, " -c", sizeof(diffargs)); |
diff_format = D_CONTEXT; |
diff_format = D_CONTEXT; |
break; |
break; |
|
case 'D': |
|
if (date1 == -1 && rev1 == NULL) { |
|
date1 = cvs_date_parse(optarg); |
|
} else if (date2 == -1 && rev2 == NULL) { |
|
date2 = cvs_date_parse(optarg); |
|
} else { |
|
fatal("no more than 2 revisions/dates can" |
|
" be specified"); |
|
} |
|
break; |
case 'f': |
case 'f': |
force_head = 1; |
force_head = 1; |
break; |
break; |
|
|
flags |= CR_RECURSE_DIRS; |
flags |= CR_RECURSE_DIRS; |
break; |
break; |
case 'r': |
case 'r': |
if (rev1 == NULL) { |
if (date1 == -1 && rev1 == NULL) { |
rev1 = optarg; |
rev1 = optarg; |
} else if (rev2 == NULL) { |
} else if (date2 == -1 && rev2 == NULL) { |
rev2 = optarg; |
rev2 = optarg; |
} else { |
} else { |
fatal("no more than 2 revisions/dates can" |
fatal("no more than 2 revisions/dates can" |
|
|
int fd1, fd2; |
int fd1, fd2; |
struct stat st; |
struct stat st; |
struct timeval tv[2], tv2[2]; |
struct timeval tv[2], tv2[2]; |
char rbuf[CVS_REV_BUFSZ], *p1, *p2; |
struct tm *datetm; |
|
char rbuf[CVS_REV_BUFSZ], tbuf[CVS_TIME_BUFSZ], *p1, *p2; |
|
|
b1 = NULL; |
b1 = NULL; |
fd1 = fd2 = -1; |
fd1 = fd2 = -1; |
|
|
cf->file_path); |
cf->file_path); |
return; |
return; |
} |
} |
break; |
|
if (cf->file_rcs == NULL) { |
if (cf->file_rcs == NULL) { |
cvs_log(LP_ERR, "cannot find RCS file for %s", |
cvs_log(LP_ERR, "cannot find RCS file for %s", |
cf->file_path); |
cf->file_path); |
|
|
} |
} |
} |
} |
|
|
if (cf->file_status == FILE_UPTODATE && rev1 == NULL && rev2 == NULL) |
if (cf->file_status == FILE_UPTODATE && rev1 == NULL && rev2 == NULL && |
|
date1 == -1 && date2 == -1) |
return; |
return; |
|
|
if (kflag && cf->file_rcs != NULL) |
if (kflag && cf->file_rcs != NULL) |
|
|
|
|
if (cf->file_rcs == NULL) |
if (cf->file_rcs == NULL) |
diff_rev1 = NULL; |
diff_rev1 = NULL; |
else if (rev1 != NULL) { |
else if (rev1 != NULL || date1 != -1) { |
|
cvs_specified_date = date1; |
diff_rev1 = rcs_translate_tag(rev1, cf->file_rcs); |
diff_rev1 = rcs_translate_tag(rev1, cf->file_rcs); |
if (diff_rev1 == NULL && cvs_cmdop == CVS_OP_DIFF) { |
if (diff_rev1 == NULL && cvs_cmdop == CVS_OP_DIFF) { |
cvs_log(LP_ERR, "tag %s not in file %s", rev1, |
if (rev1 != NULL) |
cf->file_path); |
cvs_log(LP_ERR, "tag %s not in file %s", rev1, |
|
cf->file_path); |
|
else { |
|
datetm = gmtime(&cvs_specified_date); |
|
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 && |
} else if (diff_rev1 == NULL && cvs_cmdop == CVS_OP_RDIFF && |
force_head) { |
force_head) { |
|
|
|
|
diff_rev1 = cf->file_rcs->rf_head; |
diff_rev1 = cf->file_rcs->rf_head; |
} |
} |
|
cvs_specified_date = -1; |
} else if (cvs_cmdop == CVS_OP_DIFF) { |
} else if (cvs_cmdop == CVS_OP_DIFF) { |
if (cf->file_ent->ce_status == CVS_ENT_ADDED) |
if (cf->file_ent->ce_status == CVS_ENT_ADDED) |
diff_rev1 = NULL; |
diff_rev1 = NULL; |
|
|
|
|
if (cf->file_rcs == NULL) |
if (cf->file_rcs == NULL) |
diff_rev2 = NULL; |
diff_rev2 = NULL; |
else if (rev2 != NULL) { |
else if (rev2 != NULL || date2 != -1) { |
|
cvs_specified_date = date2; |
diff_rev2 = rcs_translate_tag(rev2, cf->file_rcs); |
diff_rev2 = rcs_translate_tag(rev2, cf->file_rcs); |
if (diff_rev2 == NULL && cvs_cmdop == CVS_OP_DIFF) { |
if (diff_rev2 == NULL && cvs_cmdop == CVS_OP_DIFF) { |
cvs_log(LP_ERR, "tag %s not in file %s", rev2, |
if (rev2 != NULL) { |
cf->file_path); |
cvs_log(LP_ERR, "tag %s not in file %s", rev2, |
|
cf->file_path); |
|
} else { |
|
datetm = gmtime(&cvs_specified_date); |
|
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 && |
} else if (diff_rev2 == NULL && cvs_cmdop == CVS_OP_RDIFF && |
force_head) { |
force_head) { |
|
|
|
|
diff_rev2 = cf->file_rcs->rf_head; |
diff_rev2 = cf->file_rcs->rf_head; |
} |
} |
|
cvs_specified_date = -1; |
} else if (cvs_cmdop == CVS_OP_RDIFF) |
} else if (cvs_cmdop == CVS_OP_RDIFF) |
diff_rev2 = cf->file_rcs->rf_head; |
diff_rev2 = cf->file_rcs->rf_head; |
else if (cf->file_ent->ce_status == CVS_ENT_REMOVED) |
else if (cf->file_ent->ce_status == CVS_ENT_REMOVED) |