version 1.12, 2004/12/14 01:11:51 |
version 1.13, 2005/02/22 22:12:00 |
|
|
#include "proto.h" |
#include "proto.h" |
|
|
|
|
|
#define CVS_LISTMOD 1 |
|
#define CVS_STATMOD 2 |
|
|
|
|
/* |
/* |
* cvs_checkout() |
* cvs_checkout() |
* |
* |
|
|
int |
int |
cvs_checkout(int argc, char **argv) |
cvs_checkout(int argc, char **argv) |
{ |
{ |
int i, ch; |
int i, ch, statmod, kflag; |
|
char *date, *rev, *koptstr, *tgtdir, *rcsid; |
struct cvsroot *root; |
struct cvsroot *root; |
|
|
while ((ch = getopt(argc, argv, "c")) != -1) { |
statmod = 0; |
|
rcsid = NULL; |
|
tgtdir = NULL; |
|
kflag = RCS_KWEXP_DEFAULT; |
|
|
|
while ((ch = getopt(argc, argv, "AcD:d:fj:k:lNnPRr:st:")) != -1) { |
switch (ch) { |
switch (ch) { |
|
case 'A': |
|
break; |
case 'c': |
case 'c': |
|
statmod = CVS_LISTMOD; |
break; |
break; |
|
case 'D': |
|
date = optarg; |
|
break; |
|
case 'd': |
|
tgtdir = optarg; |
|
break; |
|
case 'f': |
|
break; |
|
case 'j': |
|
break; |
|
case 'k': |
|
koptstr = optarg; |
|
kflag = rcs_kflag_get(koptstr); |
|
if (RCS_KWEXP_INVAL(kflag)) { |
|
cvs_log(LP_ERR, |
|
"invalid RCS keyword expansion mode"); |
|
rcs_kflag_usage(); |
|
return (EX_USAGE); |
|
} |
|
break; |
|
case 'r': |
|
rev = optarg; |
|
break; |
|
case 's': |
|
statmod = CVS_STATMOD; |
|
break; |
|
case 't': |
|
rcsid = optarg; |
|
break; |
default: |
default: |
return (EX_USAGE); |
return (EX_USAGE); |
} |
} |
|
|
argc -= optind; |
argc -= optind; |
argv += optind; |
argv += optind; |
|
|
if (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 (EX_USAGE); |
return (EX_USAGE); |
} |
} |
|
|
|
if (statmod && (argc > 0)) { |
|
cvs_log(LP_ERR, "-c and -s must not get any arguments"); |
|
return (EX_USAGE); |
|
} |
|
|
if ((cvs_files = cvs_file_get(".", 0)) == NULL) |
if ((cvs_files = cvs_file_get(".", 0)) == NULL) |
return (EX_USAGE); |
return (EX_USAGE); |
|
|
|
|
if (cvs_sendarg(root, argv[i], 0) < 0) |
if (cvs_sendarg(root, argv[i], 0) < 0) |
break; |
break; |
|
|
if ((cvs_senddir(root, cvs_files) < 0) || |
if (cvs_senddir(root, cvs_files) < 0) |
(cvs_sendreq(root, CVS_REQ_XPANDMOD, NULL) < 0)) |
return (EX_PROTOCOL); |
|
if (cvs_sendreq(root, CVS_REQ_XPANDMOD, NULL) < 0) |
cvs_log(LP_ERR, "failed to expand module"); |
cvs_log(LP_ERR, "failed to expand module"); |
|
|
/* XXX not too sure why we have to send this arg */ |
/* XXX not too sure why we have to send this arg */ |
if (cvs_sendarg(root, "-N", 0) < 0) |
if (cvs_sendarg(root, "-N", 0) < 0) |
|
return (EX_PROTOCOL); |
|
|
|
if ((statmod == CVS_LISTMOD) && |
|
(cvs_sendarg(root, "-c", 0) < 0)) |
|
return (EX_PROTOCOL); |
|
|
|
if ((statmod == CVS_STATMOD) && |
|
(cvs_sendarg(root, "-s", 0) < 0)) |
return (EX_PROTOCOL); |
return (EX_PROTOCOL); |
|
|
for (i = 0; i < argc; i++) |
for (i = 0; i < argc; i++) |