[Kde-scm-interest] Layout of Git repositories for KDE

Thiago Macieira thiago at kde.org
Thu Nov 1 09:42:51 CET 2007


I've been thinking of how the KDE server would lay out its repositories 
when (:->) we switch to Git, and here's what I've been thinking:

other/
  kde-common.git
  www.git
  kdewiki.git
  promo.git
  quality.git
  tests.git

stable.git/
  kdesupport.git/
    qimageblitz.git
    qca.git
    strigi.git
    [...]
  KDE.git/
    kdelibs.git
    kdepimlibs.git
    kdebase.git
    kdeaccessibility.git
    kdevelop.git
    kdeedu.git
    [...]
  extragear.git/
    libs.git/
      [...]
    multimedia.git/
      amarok.git
      [...]
    graphics.git/
      kphotoalbum.git
      [...]
    network.git/
      konversation.git
      [...]
    base.git/
      [...]
    [...]
  playground.git/
    libs.git/
      [...]
    base.git/
      [...]
    multimedia.git/
      [...]
    [...]
  kdereview.git/
    app1.git
    app2.git
    [...]
  l10n.git/
    af.git
    ar.git
    be.git
    [...]
  koffice.git
  qt-copy.git

releases/
  KDE.git/
    kdelibs.git
    kdepimlibs.git
    kdebase.git
    kdeaccessibility.git
    kdevelop.git
    kdeedu.git
    [...]
    kde-l10n.git
  app1.git
  app2.git
  amarok.git
  qca.git
  qimageblitz.git
  koffice.git
  konversation.git
  strigi.git
  [...]

projects/
  [...]
users/
  [...]
blackhole/
  [...]

Legend:
- ending in ".git" indicates a repository
- ending in ".git/" indicates a "supermodule" repository -- i.e., 
   a repository with submodule links. The directory with the same base 
   name also exists and contains the submodule repositories
- ending in "/" indicates a simple directory

Notes on the layout above:
1) The "other" part is something I haven't thought through yet. I don't 
know how those repositories are laid out today and how people using them 
work. 
  In special, the "www" repository is very ACL-limited to guarantee that 
the public pages are modified only by trusted people. Do we want to keep 
that policy? If so, how do we implement it?

2) The "stable" tree is the official tree. That's where any new 
contributor would start looking for the code contributing to KDE. That's 
also where most people would branch from and merge from, as well as their 
final merge objective.
  Equivalent to Subversion "trunk" and "branch/module". (I.e., trunk 
becomes the master branch, the version branches are also branches)

3) the "releases" tree is where releases are kept with proper tags of all 
released versions of each software.
  Equivalent to Subversion "tags"

4) the "projects" tree is where named projects are undertaken. The layout 
is not specified. 
  Named projects are those that have a declared objective. Therefore, they 
also have a life time: when the goal is reached, the code is merged back 
into "stable" and the repository is deleted. If the project is abandoned, 
the code is also merged, but with merge strategy "ours".
  For organisation purposes, each project repository is tied to a 
mandatory wiki page that describes the project, who's working on it, etc.
  Equivalent to Subversion "branches/work"

5) the "users" tree is where any user can create his/her own private 
repositories. The first level of this tree is the user name. Under each 
user directory, any number of repositories or sub-directories can exist, 
in any layout.
  No Subversion equivalent.

6) the "blackhole" tree is where dead code is moved to, one repository per 
unit of code being dropped. Probably with two top-level directories, 3 
and 4, for organisation purposes.
  In general, when a full module repository is deprecated, it is simply 
moved from "stable" with a server-side mv command. If the deprecation is 
only a subdirectory of a module, I don't really have a recommendation -- 
it depends on how the "copy-with-history" feature progresses.

7) note the absence of an l10n release repository, but a kde-l10n.git 
repository appearing. Each of the released modules must take care of its 
own l10n merging. I don't know how yet.

8) there will have to be an easy way of creating repositories in "users" 
and in "projects", without going through sysadmins. One feature of this 
interface is to also specify a source repository for the cloning (this 
will also set up alternates correctly). A repository can be created from 
the scratch (for new or unrelated tasks) too.
  By the same token, deleting said repositories must also be made easy.

9) note on alternates: repositories in "stable" and "releases" have no 
alternates. That is, they have full copy of the objects. At most, stable 
and releases can share hard links.
  Repositories in "users" and "projects" have an alternate set up when 
cloning. But the alternate should be only pointing to either stable or 
releases, never anything else. Therefore, if the repository being cloned 
isn't one of those, the cloning should be made in two steps:
  - clone the final stable or releases target, with alternates
  - clone the intended repository, with object copy (possibly hardlinking)
  The reason for this is that repositories in "users" and "projects" can 
be deleted, so there must be no alternate reference to them.

10) deleting a repository in "stable" (i.e., moving to blackhole) also 
involves an exhaustive search in all repositories on the server to find 
out if any alternate is set up pointing to it. If there is any, then the 
repository cannot be deleted.
  The rationale is that a code is blackholed when it is unmaintained and 
deprecated. If an alternate is set up, then someone is still using it or 
working on it.

11) repositories in "releases" are never deleted nor renamed. This begs 
the question: what happens if a logical module is renamed or dropped from 
a release (think kdeaddons, for instance: it is part of KDE 3, but has 
been removed in KDE 4 in favour of the extragear tree)?

12) should repository creation in "stable" and "releases" be done through 
sysadmins?

13) the layout I propose works for the following push access policy:
 - releases: only official maintainers and trusted lieutenants 
   (fall-backs) have push access. Sysadmins are involved when a change in 
   maintainership happens.
 - projects: push access only to the group of people working in said 
   project.
 - users: push access only to the user in question.
 - stable: push access to everyone. [controversial]

14) work is encouraged to happen in "projects" and "users" whenever 
possible

15) the kde-commits mailing list monitors commits to all repositories 
except those in "users". For filtering and organisation purposes, each 
commit refers to the "canonical" source in the "stable" tree, which is 
where the project was originally cloned from anyways.

-- 
  Thiago Macieira  -  thiago (AT) macieira.info - thiago (AT) kde.org
    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: 189 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-scm-interest/attachments/20071101/0e2453f8/attachment.pgp 


More information about the Kde-scm-interest mailing list