[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
cvs co -pr
cvs co -pr
Sat, 13 Nov 2004 11:29:02 -0600
We are currently at 11.11.14 and are experiencing a problem when we try to
use the -p and -r flags on checkout against a file with a tag that has not
been added to CVSROOT/val-tags yet.
We end up taking the assert in do_recursion which checks to validate that
repository != NULL after getting it from frame.repository.
I am wondering if this has been fixed in the 1.11.17 or 1.11.18 releases.
I traced a bit and this is what I saw: checkout_proc calls tag_check_valid
and passes a NULL for the repository. This is in the code snippet below:
* If we are going to be updating to stdout, we need to cd to the
* repository directory so the recursion processor can use the current
* directory as the place to find repository information
if ( CVS_CHDIR (repository) < 0)
error (0, errno, "cannot chdir to %s", repository);
err = 1;
which = W_REPOS;
if (tag != NULL && !tag_validated)
tag_check_valid (tag, argc - 1, argv + 1, 0, aflag, NULL);
tag_validated = 1;
tag_check_valid doesn't find the tag in CVSROOT/val-tags yet, so it needs to
check the files. It calls start_recursion passing the NULL repository and
which set to W_REPOS | W_ATTIC.
start_recursion saves the NULL repository in frame.repository. The
following snippet is then called:
/* At this point we have looped over all named arguments and built
a coupla lists. Now we unroll the lists, setting up and
calling do_recursion. */
err += walklist (files_by_dir, unroll_files_proc, (void *) &frame);
unroll_files_proc calls do_recursion passing the frame with frame.repository
being NULL and frame.which being W_REPOS | W_ATTIC.
do_recursion then takes the else side of the following snippet and asserts.
* Fill in repository with the current repository
if (frame->which & W_LOCAL)
if (isdir (CVSADM))
repository = Name_Repository ((char *) NULL, update_dir);
srepository = repository; /* remember what to free */
repository = NULL;
repository = frame->repository;
assert ( repository != NULL );
assert ( strstr ( repository, "/./" ) == NULL );
BTW, this happens using both local access and pserver access.
John C. Elgin
- cvs co -pr,
John Elgin <=