version 1.94, 2006/05/27 20:57:42 |
version 1.95, 2006/05/27 21:11:11 |
|
|
int cvs_diff(int, char **); |
int cvs_diff(int, char **); |
void cvs_diff_local(struct cvs_file *); |
void cvs_diff_local(struct cvs_file *); |
|
|
int include_added_files = 0; |
int Nflag = 0; |
|
|
struct cvs_cmd cvs_cmd_diff = { |
struct cvs_cmd cvs_cmd_diff = { |
CVS_OP_DIFF, CVS_REQ_DIFF, "diff", |
CVS_OP_DIFF, CVS_REQ_DIFF, "diff", |
|
|
break; |
break; |
case 'N': |
case 'N': |
strlcat(diffargs, " -N", sizeof(diffargs)); |
strlcat(diffargs, " -N", sizeof(diffargs)); |
include_added_files = 1; |
Nflag = 1; |
break; |
break; |
case 'r': |
case 'r': |
if (diff_rev1 == NULL) { |
if (diff_rev1 == NULL) { |
|
|
} else if (cf->file_status == FILE_UNKNOWN) { |
} else if (cf->file_status == FILE_UNKNOWN) { |
cvs_log(LP_ERR, "I know nothing about %s", cf->file_path); |
cvs_log(LP_ERR, "I know nothing about %s", cf->file_path); |
return; |
return; |
} else if (cf->file_status == FILE_ADDED && include_added_files == 0) { |
} else if (cf->file_status == FILE_ADDED && Nflag == 0) { |
cvs_log(LP_ERR, "%s is a new entry, no comparison available", |
cvs_log(LP_ERR, "%s is a new entry, no comparison available", |
cf->file_path); |
cf->file_path); |
return; |
return; |
|
} else if (cf->file_status == FILE_REMOVED && Nflag == 0) { |
|
cvs_log(LP_ERR, "%s was removed, no comparison available", |
|
cf->file_path); |
|
return; |
} else if (cf->file_status == FILE_UPTODATE && diff_rev2 == NULL) { |
} else if (cf->file_status == FILE_UPTODATE && diff_rev2 == NULL) { |
return; |
return; |
} |
} |
|
|
tv[1] = tv[0]; |
tv[1] = tv[0]; |
} |
} |
|
|
if (diff_rev2 != NULL && cf->file_status != FILE_ADDED) { |
if (diff_rev2 != NULL && cf->file_status != FILE_ADDED && |
|
cf->file_status != FILE_REMOVED) { |
rcsnum_tostr(diff_rev2, rbuf, sizeof(rbuf)); |
rcsnum_tostr(diff_rev2, rbuf, sizeof(rbuf)); |
cvs_printf("retrieving revision %s\n", rbuf); |
cvs_printf("retrieving revision %s\n", rbuf); |
if ((b2 = rcs_getrev(cf->file_rcs, diff_rev2)) == NULL) |
if ((b2 = rcs_getrev(cf->file_rcs, diff_rev2)) == NULL) |
|
|
tv2[0].tv_sec = rcs_rev_getdate(cf->file_rcs, diff_rev2); |
tv2[0].tv_sec = rcs_rev_getdate(cf->file_rcs, diff_rev2); |
tv2[0].tv_usec = 0; |
tv2[0].tv_usec = 0; |
tv2[1] = tv2[0]; |
tv2[1] = tv2[0]; |
} else { |
} else if (cf->file_status != FILE_REMOVED) { |
if (fstat(cf->fd, &st) == -1) |
if (fstat(cf->fd, &st) == -1) |
fatal("fstat failed %s", strerror(errno)); |
fatal("fstat failed %s", strerror(errno)); |
if ((b2 = cvs_buf_load(cf->file_path, BUF_AUTOEXT)) == NULL) |
if ((b2 = cvs_buf_load(cf->file_path, BUF_AUTOEXT)) == NULL) |
|
|
fatal("cvs_diff_local: truncation"); |
fatal("cvs_diff_local: truncation"); |
} |
} |
|
|
len = strlcpy(p2, cvs_tmpdir, sizeof(p2)); |
if (cf->file_status != FILE_REMOVED) { |
if (len >= sizeof(p2)) |
len = strlcpy(p2, cvs_tmpdir, sizeof(p2)); |
fatal("cvs_diff_local: truncation"); |
if (len >= sizeof(p2)) |
|
fatal("cvs_diff_local: truncation"); |
|
|
len = strlcat(p2, "/diff2.XXXXXXXXXX", sizeof(p2)); |
len = strlcat(p2, "/diff2.XXXXXXXXXX", sizeof(p2)); |
if (len >= sizeof(p2)) |
if (len >= sizeof(p2)) |
fatal("cvs_diff_local: truncation"); |
fatal("cvs_diff_local: truncation"); |
|
|
cvs_buf_write_stmp(b2, p2, 0600, tv2); |
cvs_buf_write_stmp(b2, p2, 0600, tv2); |
cvs_buf_free(b2); |
cvs_buf_free(b2); |
|
} else { |
|
len = strlcpy(p2, CVS_PATH_DEVNULL, sizeof(p2)); |
|
if (len >= sizeof(p2)) |
|
fatal("cvs_diff_local: truncation"); |
|
} |
|
|
cvs_diffreg(p1, p2, NULL); |
cvs_diffreg(p1, p2, NULL); |
cvs_worklist_run(&temp_files, cvs_worklist_unlink); |
cvs_worklist_run(&temp_files, cvs_worklist_unlink); |