[Kde-scm-interest] Meeting minutes
Thiago Macieira
thiago at kde.org
Mon Nov 16 18:19:19 CET 2009
Em Segunda-feira 16 Novembro 2009, às 09:28:31, você escreveu:
> On Thursday 12 November 2009 ext Oswald Buddenhagen, wrote:
> > > -> every module in KDE gets a repo, every project in support/extragear
> > > gets a repo, koffice gets a repo
> > > -> subprojects, like games or edu might choose to have a repo per app,
> > > however, they will have to help out then. Otherwise, they get lumped
> > > together. Will have to ask the module maintainers (TASK: Chani will
> > > do the asking)
> > > -> if a subproject wants to separate all their apps, someone will have
> > > to help them (TASK)
> >
> > i still think (more than ever) that doing big modules is just plain
> > wrong. i'm still not convinced by a single kdelibs, but even considering
> > to allow lumping codebase-wise completely unrelated applications into
> > common repositories is insane.
> >
> > disadvantages of big repos:
> > - huge clones for everybody
> > - loss of history. there are only two clean ways to preserve history
> > when moving around applications: have everything in one repo (like in
> > svn, but that just plain does not work with git) or have no need for
> > moving at all, i.e., have idependent atomic applications and do moves
> > at an abstract level (possibily via submodules).
> > - merging mess (random conflict resolution). forward-merging stable =>
> > master is hard enough in qt already, and that's a well-organized
> > (kinda ;) company of full-time workers and "only" two major time zones.
> > imagine the bottlenecks in a disorganized bunch like kde. it simply
> > won't work.
> >
> > advantages of big repos:
> > - it's simpler to check out all at once. wow. i'm impressed.
>
> I agree with Oswald here.
>
> Git scales well with repositories, it does not scale well with the number
> or files inside a repository. That applies to the performance as well as
> the merging woes that you get.
I agree on the number-of-files issue, but not on the merge one.
Besides, the number of files only applies per repository. If you look at your
development model, you'll still have the same number of files. They'll just be
split across multiple Git repositories.
By doing that, you'll introduce other issues:
- git status no longer shows other files modified (svn doesn't either, but in
Git it helps)
- the sizes of the Git object dbs are larger
- the module doesn't match the tarball
Let me emphasise the last point: you MUST check out today kdelibs, kdepimlibs,
kdeutil, kdesdk, etc. You cannot checkout from SVN anything under that and
expect it to work.
So if we do split, then we need one of two things:
a) split the tarballs too; or
b) use some kind of script that restores the build structure and maintains it
(like repo or git-submodule)
Splitting the tarballs would be suicide. Instead of nice 19 tarballs for the
main KDE modules, we'd end up with 322 (crude find run). Even if my count is
exaggerated, we'd have over 200. Not to mention that the dependency checking
that CMake is doing now for us would have to be done by the packagers, in
order to build KDE in the proper order.
Since we can't split the tarballs, we'd have to restore the tarball structure
when building. I don't like this option either.
> Speaking from experience: We did that mistake with Qt. We did not take the
> time to split up Qt when we switched to git, and now we have one big
> repository that contains lots of unrelated code. When merging between
> difference maintenance and development branches we frequently have to
> resolve other people's merge conflicts. Sometimes the owners of the code
> are not reachable and then we either have to figure it out ourselves
> (error prone!) or we have to delay the merge, which is bad.
While you're right that we did that mistake with Qt, circumstances are quite
different. First of all, we're 100 developers working daily with the same Git
repository. I don't think there's any KDE module that has 100 active
developers, much less one that has that many working daily.
In the 7 months between April and October, there were 4823 commits in kdebase
trunk (avg 22 commits / day). There were 189 committers, with the Top 10
committing 2819 times (58%), and with 80% of the commits being done by 29
people (Aaron leads the pack at 715, Scripty is #5).
As for kdelibs, the numbers are: 3496 commits, 199 people committing, 50% mark
at 12 people, 80% mark at 52 people (aseigo leads the pack again).
Qt had 11279 commits, with 205 authors, but only 139 committers (disambiguated
by the first part of the email address). The top 10 committers made 3923
commits (only 34%), needing 19 people to reach 50% of the commits and 80% mark
at 47 people.
So Qt is bigger than the two largest KDE modules, more or less the size of the
3 largest (kdepim is #3 at 3203 commits). So, if we compare to Qt, we *are*
split at 3 modules. And if we accept that kdebase is technically 3
repositories, we needed 4 KDE tarballs to get to the size of Qt (kdelibs,
kdebase-workspace [3462], kdepim, kdepimlibs [1297]).
So I would argue that KDE *is* *already* split.
Also note that Qt *had* *had* the culture of branched development for years
(qt/4.4, qt/4.5, qt/main branches in p4), while KDE currently doesn't.
Developing that culture will take time.
What's more, of the 4.5 merges into 4.6 and 4.6 into master, I can split more
or less like this:
- 70% go without conflict
- 20% generate trivial conflicts (modified files deleted, functions added to the
bottom of test files, etc.)
- 5-7% generate conflicts that git log points out the difference and allows me
to solve
- 3-5% requires help from someone to resolve the conflict
Besides, the model we chose for Qt development is that developers do _not_
merge their changes to the newer branches when they push. Someone (like you or
I) will do it later.
For KDE, I'd recommend you always merge up (i.e., p4i). That would solve the
conflict issues.
> In addition with Qt the use of git is slow on non-Linux platforms.
That can't be avoided. And having more files to deal with (remember, more
repositories means more .git/config, .git/objects/pack/pack-*, etc.) will not
help.
> We do plan to split up Qt into separate modules. If you look around how
> other projects converted to Git or Mercurial then you can observe the same
> pattern.
>
> Therefore I recommend one repository per application, in some cases
> application + library (say konqueror + libkonq in one repository).
You're proposing redoing the entire layout of the KDE structure. That will
take a lot longer than we're trying to do now. It would have to be done in SVN
*before* any attempt at Git conversion be performed.
Besides, if we relayout, we can forget any hope of having a full history
import. If we just split, without changing the layout, we'd have full history
for trunk only (no separate branches imported or tags), but if we change the
layout, then we will have history only up until the layout change.
Adapting the import rules to follow each library/app instead of the module is
far too much effort.
Sorry, while I think that future-proofing is a good idea, I think splitting
further is a bad idea.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Senior Product Manager - Nokia, Qt Development Frameworks
PGP/GPG: 0x6EF45358; fingerprint:
E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-scm-interest/attachments/20091116/89e3afad/attachment.sig
More information about the Kde-scm-interest
mailing list