version 1.42, 2005/12/02 11:45:02 |
version 1.43, 2005/12/05 19:46:24 |
|
|
|
|
#define CO_OPTSTRING "f::k:l::M::p::q::r::s:Tu::Vw::x:" |
#define CO_OPTSTRING "f::k:l::M::p::q::r::s:Tu::Vw::x:" |
|
|
static int checkout_state(RCSFILE *, RCSNUM *, const char *, int, |
static int checkout_state(RCSFILE *, RCSNUM *, const char *, int, |
const char *, const char *); |
const char *, const char *); |
|
static void checkout_err_nobranch(RCSFILE *, const char *, const char *, |
|
const char *, int); |
|
|
int |
int |
checkout_main(int argc, char **argv) |
checkout_main(int argc, char **argv) |
|
|
char fpath[MAXPATHLEN], buf[16]; |
char fpath[MAXPATHLEN], buf[16]; |
char *username; |
char *username; |
const char *state; |
const char *state; |
|
struct rcs_delta *rdp; |
time_t rcs_mtime = -1; |
time_t rcs_mtime = -1; |
|
|
flags = 0; |
flags = 0; |
|
|
exit(0); |
exit(0); |
case 'w': |
case 'w': |
username = rcs_optarg; |
username = rcs_optarg; |
|
flags |= CO_AUTHOR; |
break; |
break; |
case 'x': |
case 'x': |
rcs_suffixes = rcs_optarg; |
rcs_suffixes = rcs_optarg; |
|
|
|
|
rcsnum_tostr(frev, buf, sizeof(buf)); |
rcsnum_tostr(frev, buf, sizeof(buf)); |
|
|
|
if ((rdp = rcs_findrev(file, frev)) == NULL) |
|
return (-1); |
|
|
|
if (((flags & CO_STATE) && |
|
(strcmp(rdp->rd_state, state) != 0)) || |
|
((flags & CO_AUTHOR) && |
|
(strcmp(rdp->rd_author, username) != 0))) { |
|
checkout_err_nobranch(file, username, NULL, state, |
|
flags); |
|
return (-1); |
|
} |
|
|
if (flags & CO_STATE) { |
if (flags & CO_STATE) { |
if (checkout_state(file, frev, argv[i], flags, |
if (checkout_state(file, frev, argv[i], flags, |
username, state) < 0) { |
username, state) < 0) { |
|
|
{ |
{ |
const char *tstate; |
const char *tstate; |
|
|
if (rev == NULL) { |
if (rev == NULL) |
cvs_log(LP_ERR, "%s: No revision on branch has state %s", |
|
file->rf_path, state); |
|
return (-1); |
return (-1); |
} else { |
else { |
if (((tstate = rcs_state_get(file, rev)) != NULL) |
if (((tstate = rcs_state_get(file, rev)) != NULL) |
&& (strcmp(state, tstate) == 0)) |
&& (strcmp(state, tstate) == 0)) |
return (checkout_rev(file, rev, dst, flags, username)); |
return (checkout_rev(file, rev, dst, flags, username)); |
|
|
rev = rcsnum_dec(rev); |
rev = rcsnum_dec(rev); |
return (checkout_state(file, rev, dst, flags, username, state)); |
return (checkout_state(file, rev, dst, flags, username, state)); |
} |
} |
|
} |
|
|
|
/* |
|
* checkout_err_nobranch() |
|
* |
|
* XXX - should handle the dates too. |
|
*/ |
|
static void |
|
checkout_err_nobranch(RCSFILE *file, const char *author, const char *date, |
|
const char *state, int flags) |
|
{ |
|
if (!(flags & CO_AUTHOR)) |
|
author = NULL; |
|
if (!(flags & CO_STATE)) |
|
state = NULL; |
|
|
|
cvs_log(LP_ERR, "%s: No revision on branch has%s%s%s%s%s%s.", |
|
file->rf_path, |
|
date ? " a date before " : "", |
|
date ? date : "", |
|
author ? " and author " + (date ? 0:4 ) : "", |
|
author ? author : "", |
|
state ? " and state " + (date || author ? 0:4) : "", |
|
state ? state : ""); |
} |
} |