You are correct that we need to move repository information to the component level. However, it needs to be removed from the toplevel build entirely. Instead, all we should have at the toplevel is the component version. This is used to find the componentdef in the build repository. This build.xml will contain the repository information for the component.
I don't think subversion support necessitates emulating subversion URL's for CVS. We can just have a subversionURL attribute which is used instead of cvsRoot and module. Not only is this easier to implement, it will be easier for component developers to understand, rather than our own CVS URL.
I'm thinking a component version doesn't necessarily have to come from a VCS. But, it can be say: "ftp://repo.jboss.com/pub/jboss/common"
Hence, the URL. But, yeah, separating them will make it easier. Maybe just have the option of specifying a type and a locationURI, and then parameters (i.e., user, module if it has one).
Yep, it might be easier for the first two type of repos, but it will rapidly become a maintenance nightmare.
I like the idea of exporting the repository access to some external component(s), opening the way to a pluggeable implementation.