version 1.8, 2005/10/08 14:25:55 |
version 1.9, 2005/10/08 15:26:47 |
|
|
|
|
extern char *__progname; |
extern char *__progname; |
|
|
|
#define LOCK_LOCK 1 |
|
#define LOCK_UNLOCK 2 |
|
|
static char * checkin_diff_file(RCSFILE *, RCSNUM *, const char *); |
static char * checkin_diff_file(RCSFILE *, RCSNUM *, const char *); |
static char * checkin_getlogmsg(char *, char *, RCSNUM *); |
static char * checkin_getlogmsg(char *, char *, RCSNUM *); |
|
|
|
|
RCSFILE *file; |
RCSFILE *file; |
RCSNUM *frev; |
RCSNUM *frev; |
char fpath[MAXPATHLEN]; |
char fpath[MAXPATHLEN]; |
char *rcs_msg, *rev, *filec, *deltatext; |
char *rcs_msg, *rev, *filec, *deltatext, *username; |
BUF *bp; |
BUF *bp; |
|
|
lkmode = -1; |
|
flags = RCS_RDWR; |
flags = RCS_RDWR; |
file = NULL; |
file = NULL; |
rcs_msg = rev = NULL; |
rcs_msg = rev = NULL; |
fmode = dflag = verbose = 0; |
fmode = lkmode = dflag = verbose = 0; |
interactive = 1; |
interactive = 1; |
|
|
while ((ch = getopt(argc, argv, "j:l:M:N:qu:d:r::m:k:V")) != -1) { |
if ((username = getlogin()) == NULL) { |
|
cvs_log(LP_ERR, "failed to get username"); |
|
exit(1); |
|
} |
|
|
|
while ((ch = getopt(argc, argv, "j:lM:N:qud:r::m:k:V")) != -1) { |
switch (ch) { |
switch (ch) { |
case 'h': |
case 'h': |
(usage)(); |
(usage)(); |
|
|
case 'V': |
case 'V': |
printf("%s\n", rcs_version); |
printf("%s\n", rcs_version); |
exit(0); |
exit(0); |
|
case 'l': |
|
lkmode = LOCK_LOCK; |
|
break; |
|
case 'u': |
|
lkmode = LOCK_UNLOCK; |
|
break; |
default: |
default: |
(usage)(); |
(usage)(); |
exit(1); |
exit(1); |
|
|
|
|
free(deltatext); |
free(deltatext); |
free(filec); |
free(filec); |
|
(void)unlink(argv[i]); |
|
|
|
/* |
|
* Do checkout if -u or -l are specified. |
|
*/ |
|
if (lkmode != 0) { |
|
mode_t mode = 0; |
|
if ((bp = rcs_getrev(file, frev)) == NULL) { |
|
cvs_log(LP_ERR, "cannot get revision"); |
|
goto err; |
|
} |
|
if (lkmode == LOCK_LOCK) { |
|
mode = 0644; |
|
if (rcs_lock_add(file, username, frev) < 0) { |
|
if (rcs_errno != RCS_ERR_DUPENT) |
|
cvs_log(LP_ERR, |
|
"failed to lock revision"); |
|
else |
|
cvs_log(LP_ERR, |
|
"you already have a lock"); |
|
} |
|
} else if (lkmode == LOCK_UNLOCK) { |
|
mode = 0444; |
|
} |
|
if (cvs_buf_write(bp, argv[i], mode) < 0) { |
|
cvs_log(LP_ERR, |
|
"failed to write revision to file"); |
|
} |
|
cvs_buf_free(bp); |
|
} |
|
err: |
/* File will NOW be synced */ |
/* File will NOW be synced */ |
rcs_close(file); |
rcs_close(file); |
|
|
/* XXX: |
|
* Delete the working file - we do not support -u/-l just yet |
|
*/ |
|
(void)unlink(argv[i]); |
|
if (interactive) { |
if (interactive) { |
free(rcs_msg); |
free(rcs_msg); |
rcs_msg = NULL; |
rcs_msg = NULL; |
|
|
rcs_msg = NULL; |
rcs_msg = NULL; |
tmprev = rcsnum_alloc(); |
tmprev = rcsnum_alloc(); |
rcsnum_cpy(rev, tmprev, 16); |
rcsnum_cpy(rev, tmprev, 16); |
rcsnum_tostr(rev, prev, sizeof(prev)); |
rcsnum_tostr(tmprev, prev, sizeof(prev)); |
rcsnum_tostr(rcsnum_inc(tmprev), nrev, sizeof(nrev)); |
rcsnum_tostr(rcsnum_inc(tmprev), nrev, sizeof(nrev)); |
rcsnum_free(tmprev); |
rcsnum_free(tmprev); |
|
|
|
|
cvs_printf(">> "); |
cvs_printf(">> "); |
for (;;) { |
for (;;) { |
fgets(buf, (int)sizeof(buf), stdin); |
fgets(buf, (int)sizeof(buf), stdin); |
if (feof(stdin) || ferror(stdin) |
if (feof(stdin) || ferror(stdin) || buf[0] == '.') |
|| buf[0] == '.') |
|
break; |
break; |
cvs_buf_append(logbuf, buf, strlen(buf)); |
cvs_buf_append(logbuf, buf, strlen(buf)); |
cvs_printf(">> "); |
cvs_printf(">> "); |