Re: CVSRoot

Martin Entlicher <[email protected]> Mon, 15 Sep 2003 14:46:25 +0200
Newsgroups gmane.comp.java.netbeans.modules.javacvs.devel
Organization Sun Microsystems
Message-ID <[email protected]>
Ojares Rami EINT wrote:
> 
> >Well, I should read the manual first:
> >http://www.cvshome.org/docs/manual/cvs-1.12.1/cvs_2.html#SEC9
> >
> >There's the clarification:
> >":server: method specifies an internal rsh client, which is
> >supported only by
> >some CVS ports." Thus it's like :ext:, but with a buit-in rsh
> >rather then
> >external rsh (or another remote shell defined by CVS_RSH).
> >According to this we
> >should probably use SSHConnection for both :server: and :ext:
> >method; I suppose
> >that no one is using rsh any more because of security reasons.
> >
> >The LocalConnection would be more like a :fork:. Since in the
> >functionality
> >there should be no distinction between :local: and :fork:, we
> >can map both to
> >LocalConnection.
> >
> >Does it make more sense now?
> 
> I am slowly starting to understand (maybe).
> So here is my formulation, please comment.
> 
> :server: & :ext:                     --> SSHConnection
> :local: & :fork: & repositoryOnly    --> ServerConnection (or whatever it should be named. Starts cvs server program on local machine)
> :pserver                             --> PserverConnection

Yes, it looks good to me.

> 
> > IMHO :server: method is not much used
> > anyway and for local connection it does not make much sense to use JavaCVS,
> > since you need to use the cvs.exe as a server anyway. In NetBeans we use
> > JavaCVS only for :pserver: method, but :server: mode can be handy as well.
> 
> using javacvs for local connections IS useful.
> My example:
> I have done a build system that has defined
> an interface for a generic version control system.
> 
> I have implemented that interface for cvs using javacvs.
> It is much simpler for me to use javacvs also for local
> cvs connections instead of triggering cvs program directly
> for local connections. And besides if you have installed cvs server
> locally you always have the cvs client on the machine.

I see. So we have a good reason to keep the ServerConnection (or
LocalConnection).

> 
> > Well, somewhere at cvshome.org, I've found this definition:
> > [:method:][[user][:password]@]hostname[:[port]]/path/to/repository
> 
> >> It should recognize urls with format
> >> [:local:[username:][password:]]repositoryPath
> >> So if :local: does not exist username and password are not allowed.
> 
> > Hmm, this is a mistake in the CVSRoot class. Following CVSROOT is not
> > considered as a bad one:
> > :local:user@hostname:/path/to/repository
> 
> Sorry but I did not understand what you ment.
> Did you mean that my interpretation is incorrect and
> :local:user@hostname:/path/to/repository should be accepted or
> that the existing implementation is incorrect and
> :local:user@hostname:/path/to/repository should not be allowed.

It's a bug in the existing implementation which is at
javacvs/libsrc/org/netbeans/lib/cvsclient/CVSRoot.java ;-)

Valid roots seem to be parsed O.K., but invalid are not always detected.

> 
> > One difference is, that the original
> > CVSRoot can parse CVSROOTs of unknown method names, therefore the parsing as
> > such finish correctly and the method name is compared later to the known once.
> > It is therefore more generic. If you introduce integer constants for connection
> > method types, you need to update the CVSRoot class each time you add a new
> > method. But otherwise it works in a similar way I guess.
> 
> You are right. I will refine the code and send it soon for review (I will mark the changes
> so it is faster to read).

I've seen it. I'll look at it soon and send you feedback. Thanks.

> 
> > You have an extra
> > constructor with Properties (where do you use this?). Since you change
> > equals(), we need to implement hashCode() as well.
> 
> I think it is a normal thing that the components of cvs url come
> from a configuration file. In my case they are configured in xml.
> The Properties constructor would be a generic way to configure
> cvs connections without the url. The url is so hard to comprehend
> that I want to protect my users from it :-). But of course it is not
> a necessary addition.

I'm not sure whether this would be valuable for javacvs library as such, but
considering it's just one constructor, we can have it there.

> 
> I will add the hashCode() method
> 
> > Instead of
> > if (new File(this.repository)).equals(new File(compared.repository)))
> > one can use:
> > if (this.repository.equals(compared.repository))
> > with the same result I believe. You probably meant to write:
> > if (new File(this.repository)).getCanonicalFile().equals(new
> > File(compared.repository).getCanonicalFile()))
> 
> That is exactly what I ment to write.
> So that case issues, symlinks etc. would not hinder the
> recognization of cvsurl.

Thanks,
Martin

> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]