version 1.36, 2008/06/10 15:55:54 |
version 1.37, 2008/06/10 16:32:35 |
|
|
void |
void |
cvs_history_add(int type, struct cvs_file *cf, const char *argument) |
cvs_history_add(int type, struct cvs_file *cf, const char *argument) |
{ |
{ |
|
BUF *buf; |
FILE *fp; |
FILE *fp; |
char *cwd; |
char *cwd, *rev; |
char revbuf[CVS_REV_BUFSZ], repo[MAXPATHLEN], fpath[MAXPATHLEN]; |
char revbuf[CVS_REV_BUFSZ], repo[MAXPATHLEN], fpath[MAXPATHLEN]; |
|
char timebuf[CVS_TIME_BUFSZ]; |
|
struct tm datetm; |
|
|
if (cvs_nolog == 1) |
if (cvs_nolog == 1) |
return; |
return; |
|
|
|
|
/* construct revision field */ |
/* construct revision field */ |
revbuf[0] = '\0'; |
revbuf[0] = '\0'; |
if (cvs_cmdop != CVS_OP_CHECKOUT && cvs_cmdop != CVS_OP_EXPORT) { |
rev = revbuf; |
switch (type) { |
switch (type) { |
case CVS_HISTORY_TAG: |
case CVS_HISTORY_TAG: |
strlcpy(revbuf, argument, sizeof(revbuf)); |
strlcpy(revbuf, argument, sizeof(revbuf)); |
break; |
break; |
case CVS_HISTORY_CHECKOUT: |
case CVS_HISTORY_CHECKOUT: |
case CVS_HISTORY_EXPORT: |
case CVS_HISTORY_EXPORT: |
/* copy TAG or DATE to revbuf */ |
/* |
break; |
* cvs_buf_alloc uses xcalloc(), so we are safe even |
case CVS_HISTORY_UPDATE_MERGED: |
* if neither cvs_specified_tag nor cvs_specified_date |
case CVS_HISTORY_UPDATE_MERGED_ERR: |
* have been supplied. |
case CVS_HISTORY_COMMIT_MODIFIED: |
*/ |
case CVS_HISTORY_COMMIT_ADDED: |
buf = cvs_buf_alloc(128); |
case CVS_HISTORY_COMMIT_REMOVED: |
if (cvs_specified_tag != NULL) { |
case CVS_HISTORY_UPDATE_CO: |
cvs_buf_puts(buf, cvs_specified_tag); |
rcsnum_tostr(cf->file_rcs->rf_head, |
if (cvs_specified_date != -1) |
revbuf, sizeof(revbuf)); |
cvs_buf_putc(buf, ':'); |
break; |
|
} |
} |
|
if (cvs_specified_date != -1) { |
|
gmtime_r(&cvs_specified_date, &datetm); |
|
strftime(timebuf, sizeof(timebuf), |
|
"%Y.%m.%d.%H.%M.%S", &datetm); |
|
cvs_buf_puts(buf, timebuf); |
|
} |
|
rev = cvs_buf_release(buf); |
|
break; |
|
case CVS_HISTORY_UPDATE_MERGED: |
|
case CVS_HISTORY_UPDATE_MERGED_ERR: |
|
case CVS_HISTORY_COMMIT_MODIFIED: |
|
case CVS_HISTORY_COMMIT_ADDED: |
|
case CVS_HISTORY_COMMIT_REMOVED: |
|
case CVS_HISTORY_UPDATE_CO: |
|
rcsnum_tostr(cf->file_rcs->rf_head, |
|
revbuf, sizeof(revbuf)); |
|
break; |
} |
} |
|
|
(void)xsnprintf(fpath, sizeof(fpath), "%s/%s", |
(void)xsnprintf(fpath, sizeof(fpath), "%s/%s", |
|
|
if ((fp = fopen(fpath, "a")) != NULL) { |
if ((fp = fopen(fpath, "a")) != NULL) { |
fprintf(fp, "%c%x|%s|%s|%s|%s|%s\n", |
fprintf(fp, "%c%x|%s|%s|%s|%s|%s\n", |
historytab[type], time(NULL), getlogin(), cwd, repo, |
historytab[type], time(NULL), getlogin(), cwd, repo, |
revbuf, (cf != NULL) ? cf->file_name : argument); |
rev, (cf != NULL) ? cf->file_name : argument); |
|
|
(void)fclose(fp); |
(void)fclose(fp); |
} else { |
} else { |
cvs_log(LP_ERR, "failed to add entry to history file"); |
cvs_log(LP_ERR, "failed to add entry to history file"); |
} |
} |
|
|
|
if (rev != revbuf) |
|
xfree(rev); |
if (cvs_server_active != 1) |
if (cvs_server_active != 1) |
xfree(cwd); |
xfree(cwd); |
} |
} |