version 1.21, 2005/05/23 17:30:35 |
version 1.22, 2005/05/24 04:12:25 |
|
|
#define CVS_LISTMOD 1 |
#define CVS_LISTMOD 1 |
#define CVS_STATMOD 2 |
#define CVS_STATMOD 2 |
|
|
int cvs_checkout_options(char *, int, char **, int *); |
static int cvs_checkout_init (struct cvs_cmd *, int, char **, int *); |
int cvs_checkout_sendflags(struct cvsroot *); |
static int cvs_checkout_pre_exec (struct cvsroot *); |
|
|
struct cvs_cmd_info cvs_checkout = { |
struct cvs_cmd cvs_cmd_checkout = { |
cvs_checkout_options, |
CVS_OP_CHECKOUT, CVS_REQ_CO, "checkout", |
cvs_checkout_sendflags, |
{ "co", "get" }, |
NULL, NULL, NULL, |
"Checkout sources for editing", |
|
"[-AcflNnPpRs] [-D date | -r rev] [-d dir] [-j rev] [-k mode] " |
|
"[-t id] module ...", |
|
"AcD:d:fj:k:lNnPRr:st:", |
|
NULL, |
0, |
0, |
CVS_REQ_CO, |
cvs_checkout_init, |
CVS_CMD_SENDDIR | CVS_CMD_SENDARGS1 | CVS_CMD_SENDARGS2 |
cvs_checkout_pre_exec, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
CVS_CMD_ALLOWSPEC | CVS_CMD_SENDDIR | CVS_CMD_SENDARGS2 |
}; |
}; |
|
|
static char *date, *rev, *koptstr, *tgtdir, *rcsid; |
static char *date, *rev, *koptstr, *tgtdir, *rcsid; |
static int statmod = 0; |
static int statmod = 0; |
|
static int shorten = 1; |
|
static int usehead = 0; |
static int kflag = RCS_KWEXP_DEFAULT; |
static int kflag = RCS_KWEXP_DEFAULT; |
static int usehead; |
|
|
|
int |
/* modules */ |
cvs_checkout_options(char *opt, int argc, char **argv, int *arg) |
static char **co_mods; |
|
static int co_nmod; |
|
|
|
static int |
|
cvs_checkout_init(struct cvs_cmd *cmd, int argc, char **argv, int *arg) |
{ |
{ |
int ch; |
int ch; |
|
|
date = rev = koptstr = tgtdir = rcsid = NULL; |
date = rev = koptstr = tgtdir = rcsid = NULL; |
kflag = RCS_KWEXP_DEFAULT; |
|
usehead = 0; |
|
|
|
while ((ch = getopt(argc, argv, opt)) != -1) { |
while ((ch = getopt(argc, argv, cmd->cmd_opts)) != -1) { |
switch (ch) { |
switch (ch) { |
case 'A': |
case 'A': |
break; |
break; |
|
|
return (CVS_EX_USAGE); |
return (CVS_EX_USAGE); |
} |
} |
break; |
break; |
|
case 'N': |
|
shorten = 0; |
|
break; |
case 'p': |
case 'p': |
cvs_noexec = 1; /* no locks will be created */ |
cvs_noexec = 1; /* no locks will be created */ |
break; |
break; |
|
|
argc -= optind; |
argc -= optind; |
argv += optind; |
argv += optind; |
|
|
|
co_mods = argv; |
|
co_nmod = argc; |
|
|
if (!statmod && (argc == 0)) { |
if (!statmod && (argc == 0)) { |
cvs_log(LP_ERR, |
cvs_log(LP_ERR, |
"must specify at least one module or directory"); |
"must specify at least one module or directory"); |
|
|
return (0); |
return (0); |
} |
} |
|
|
int |
static int |
cvs_checkout_sendflags(struct cvsroot *root) |
cvs_checkout_pre_exec(struct cvsroot *root) |
{ |
{ |
if (cvs_sendreq(root, CVS_REQ_DIRECTORY, ".") < 0) |
int i; |
return (CVS_EX_PROTO); |
|
if (cvs_sendraw(root, root->cr_dir, strlen(root->cr_dir)) < 0) |
|
return (CVS_EX_PROTO); |
|
if (cvs_sendraw(root, "\n", 1) < 0) |
|
return (CVS_EX_PROTO); |
|
|
|
if (cvs_sendreq(root, CVS_REQ_XPANDMOD, NULL) < 0) |
/* create any required base directories */ |
cvs_log(LP_ERR, "failed to expand module"); |
for (i = 0; i < co_nmod; i++) { |
|
if (cvs_file_create(NULL, co_mods[i], DT_DIR, 0755) < 0) |
|
return (CVS_EX_DATA); |
|
} |
|
|
if (usehead && (cvs_sendarg(root, "-f", 0) < 0)) |
if (root->cr_method != CVS_METHOD_LOCAL) { |
return (CVS_EX_PROTO); |
for (i = 0; i < co_nmod; i++) |
|
if (cvs_sendarg(root, co_mods[i], 0) < 0) |
|
return (CVS_EX_PROTO); |
|
if (cvs_sendreq(root, CVS_REQ_DIRECTORY, ".") < 0) |
|
return (CVS_EX_PROTO); |
|
if (cvs_sendln(root, root->cr_dir) < 0) |
|
return (CVS_EX_PROTO); |
|
|
/* XXX not too sure why we have to send this arg */ |
if (cvs_sendreq(root, CVS_REQ_XPANDMOD, NULL) < 0) |
if (cvs_sendarg(root, "-N", 0) < 0) |
cvs_log(LP_ERR, "failed to expand module"); |
return (CVS_EX_PROTO); |
|
|
|
if ((statmod == CVS_LISTMOD) && |
if (usehead && (cvs_sendarg(root, "-f", 0) < 0)) |
(cvs_sendarg(root, "-c", 0) < 0)) |
return (CVS_EX_PROTO); |
return (CVS_EX_PROTO); |
|
|
|
if ((statmod == CVS_STATMOD) && |
if ((tgtdir != NULL) && |
(cvs_sendarg(root, "-s", 0) < 0)) |
((cvs_sendarg(root, "-d", 0) < 0) || |
return (CVS_EX_PROTO); |
(cvs_sendarg(root, tgtdir, 0) < 0))) |
|
return (CVS_EX_PROTO); |
|
|
|
if (!shorten && cvs_sendarg(root, "-N", 0) < 0) |
|
return (CVS_EX_PROTO); |
|
|
|
for (i = 0; i < co_nmod; i++) |
|
if (cvs_sendarg(root, co_mods[i], 0) < 0) |
|
return (CVS_EX_PROTO); |
|
|
|
if ((statmod == CVS_LISTMOD) && |
|
(cvs_sendarg(root, "-c", 0) < 0)) |
|
return (CVS_EX_PROTO); |
|
else if ((statmod == CVS_STATMOD) && |
|
(cvs_sendarg(root, "-s", 0) < 0)) |
|
return (CVS_EX_PROTO); |
|
} |
return (0); |
return (0); |
} |
} |