git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Struberg <struberg@yahoo.de>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Nicolas Pitre <nico@cam.org>,
	"Shawn O. Pearce" <spearce@spearce.org>
Subject: Re: Compatibility between git.git and jgit
Date: Sat, 2 May 2009 11:00:05 +0000 (GMT)	[thread overview]
Message-ID: <806445.80395.qm@web27803.mail.ukl.yahoo.com> (raw)


As for compatibility between JGIT and GIT:

We (the Apache maven-scm team with Shawn supporting us (thanks again for patiently answering my sometimes stupid questions)) are currently working on a JGIT SCM provider for maven. The commandline git-provider already works pretty ok since more than a year now and once we have the JGIT version too. all this gets tested automatically via our TCK suite.

The TCK suite is pretty high-level, but at least all the fundamental stuff is then guaranteed to work for both implementations.

One step on our road is to further 'abstract' the current jgit-core library and introduce a SimpleRepository which basically contains the most important git commands as Java calls (e.g. addRemote, fetch, ... ) [1]. So after having this it should be really easy to side-by-side compare the .git/* of e.g. git-clone uri vs SimpleRepository.clone(uri)


LieGrue,
strub

[1] http://github.com/sonatype/JGit/ branch struberg
--- Shawn O. Pearce <spearce@spearce.org> schrieb am Sa, 2.5.2009:

> Von: Shawn O. Pearce <spearce@spearce.org>
> Betreff: Re: Compatibility between git.git and jgit
> An: "Nicolas Pitre" <nico@cam.org>
> CC: "Junio C Hamano" <gitster@pobox.com>, git@vger.kernel.org
> Datum: Samstag, 2. Mai 2009, 3:59
> Nicolas Pitre <nico@cam.org>
> wrote:
> > On Fri, 1 May 2009, Shawn O. Pearce wrote:
> > 
> > > On an unrelated note, someone asked me recently,
> how do we ensure
> > > compatibility in implementations between git.git
> and jgit?
> > 
> > Well... this is not exactly easy.  As I said in
> the past 
> > (http://marc.info/?l=git&m=121035043412788&w=2), I think
> that the C 
> > version must remain the reference with regards to
> protocols and on-disk 
> > data structures.
> 
> I agree fully.
> 
> > If people go wild with JGit and start making changes 
> > to data structures then it simply won't be Git
> compatible anymore and 
> > the user base will get fragmented.
> 
> Agree.  We may see some prototyping happen in JGit
> first on some
> topics, and JGit may even support something earlier than
> git.git,
> e.g JGit has an amazon-s3:// transport that git.git doesn't
> have.
> But it also isn't widely used.
> 
> > A formal compatibility test suite would imply that
> every Git 
> > reimplementation should be compatible with the
> reference C version.  
> > You could add some tests in your test suite which are
> performed in 
> > parallel using JGit and the C git, and make sure that
> the produced 
> > results are identical, etc.
> 
> Yea, and to some extent we try to do that already in JGit,
> but our
> tests aren't complete enough in that area.
>  
> > But to which extent should the C version remain
> backward compatible with 
> > other implementations?  Let's suppose a future
> protocol extension is 
> > made and old unsuspecting C clients work just fine but
> some other 
> > implementation crashes with it?
> 
> This is what I think scares both myself and the folks that
> have
> recently asked me about compatibility.
> 
> If JGit gets a broader user base, and suddenly it stops
> working
> against a newer C git-daemon because of a protocol change,
> those
> users are going to be pissed.  Its no worse than the
> "github can't
> ever upgrade past 1.6.1" issue we had not too long ago.
> 
> I think we're doing better these days about embedding file
> format
> version numbers into files (e.g. pack idx v2) to help alert
> older
> clients that the format is different.  But we also
> have a something
> of a history of looking for "holes" in older C git parsers
> in
> order to wedge in new features where we didn't plan for
> them in
> the first place.  E.g. the protocol capability slots
> we have now.
> 
> I think that as reimplementations become more popular, we
> need to
> rely less on extending things by exploiting parser quirks
> in older
> C git.git code, and rely more on at least explicit version
> markers
> that everyone can work with.
> 
> > And the reference implementation cannot be held back
> because 
> > of bugs in all alternative implementations.
> 
> I agree.  A bug is a bug.  But I'd really like to
> get away from the
> trend where we exploit bugs in older C git.git
> implementations to
> add new functionality, because maybe JGit doesn't have that
> same
> bug and will fall flat on its face with that exploit.
> 
> > As long as they're futzing^Wdeveloping on top of Jgit
> then 
> > interoperability shouldn't be at risk.  If people
> would start adding new 
> > object types and pack formats and the like without
> obtaining a consensus 
> > with people around the C version then I might get
> extremely worried (and 
> > pissed) though.
> 
> That's why JGit is BSD, so everyone can use the one f'king
> library
> and not risk fragmenting the Java market further.
> 
> But yea, I'd be really pissed too if someone hacked up JGit
> and made
> it incompatible with anything else.  Its a risk that
> the liberal
> BSD license permits.
> 
> I'm really sort of hoping that the development momentum
> around
> git.git and JGit trying to keep up will keep them coming
> back
> to the canonical JGit for updates, forcing them to give
> back any
> hacks^Wimprovements they have made.  If the
> improvements really are
> worthwhile, they can be easily ported over to C before they
> become
> widely used in JGit.
>  
> > One defensive approach we could adopt is to use a
> capability slot to 
> > identify the software version of each peer involved in
> the network 
> > communication.  The advantage would be for a
> later Git version to avoid 
> > doing some things that are known to break with client
> X or Y.  Of course 
> > even such a scheme can be abused and misused, like on
> some web sites if 
> > you don't have the "right" browser, leading some of
> them to allow faking 
> > the User-Agent string, etc.  But maybe the
> upsides are more important 
> > than the downsides.  This doesn't help with
> on-disk interoperability, 
> > but this is probably less important than communication
> interoperability.
> 
> Blargh.  I'm with you about the whole User-Agent
> mess.
> 
> Asking clients and servers to identify with implementation
> and
> version markers might be useful for analysis of
> who-is-using-what,
> but I don't think its a good way to negotiate between the
> peers of
> what functionality to enable or disable, or what bug
> workarounds
> to use.  Reminds me of the Apache hack during output
> to work around
> an HTTP header parsing bug in Netscape 2 when the "\r\n"
> pair was
> exactly at byte 256 in the stream.  *shudder*
> 
> 
> FWIW, an EGit user recently complained that some random Git
> hosting
> site they were using couldn't work with EGit, but EGit
> worked fine
> with other sites, e.g. GitHub.  Apparently this site's
> SSH forced command
> filter script didn't like EGit asking for "git upload-pack
> 'path.git'".
> 
> Its not strictly a Git protocol issue, how the client
> launches
> the remote process over SSH, but this random hosting site
> was
> apparently relying on C git's current calling convention
> of
> "git-upload-pack 'path.git'".
> 
> Long story short, I claimed it was the hosting site's
> bug.  :-)
> 
> -- 
> Shawn.
> --
> To unsubscribe from this list: send the line "unsubscribe
> git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


      

             reply	other threads:[~2009-05-02 11:06 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-02 11:00 Mark Struberg [this message]
  -- strict thread matches above, loose matches on Subject: below --
2009-04-15 18:27 Weird growth in packfile during initial push Robin H. Johnson
2009-04-15 19:51 ` Nicolas Pitre
2009-04-29 23:57   ` Junio C Hamano
2009-05-01 20:56     ` [PATCH] allow OFS_DELTA objects during a push Nicolas Pitre
2009-05-01 23:49       ` Junio C Hamano
2009-05-02  0:01         ` Compatibility between git.git and jgit Shawn O. Pearce
2009-05-02  1:14           ` A Large Angry SCM
2009-05-02  1:39           ` Nicolas Pitre
2009-05-02  1:59             ` Shawn O. Pearce
2009-05-02 16:56             ` Ealdwulf Wuffinga
2009-05-02  1:40           ` Michael Witten

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=806445.80395.qm@web27803.mail.ukl.yahoo.com \
    --to=struberg@yahoo.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=nico@cam.org \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).