Difference between revisions of "GIT Server"

From AlsaProject
Jump to: navigation, search
(Branches)
(Syncing the branch release in alsa-driver.git)
 
(31 intermediate revisions by 5 users not shown)
Line 6: Line 6:
  
 
; alsa-driver.git
 
; alsa-driver.git
: contains compatibility and build code for 2.2, 2.4 and older 2.6 kernels
+
: contains compatibility and build code for older 2.6 kernels with mirrored latest kernel code
 
; alsa-kernel.git
 
; alsa-kernel.git
 
: contains linux 2.6 kernel tree
 
: contains linux 2.6 kernel tree
; alsa-kmirror.git
+
 
: alsa kernel mirror tree for continuous development (contains ALSA parts from alsa-kernel.git tree)
+
; alsa-kprivate.git
 +
: contains linux 2.6 kernel tree - for private branches for alsa developers
  
 
; alsa-lib.git
 
; alsa-lib.git
 
: library
 
: library
; alsa-utils.git
+
; alsa-utils.git;
 
: utilities
 
: utilities
 
; alsa-firmware.git
 
; alsa-firmware.git
Line 26: Line 27:
 
; alsa-python.git
 
; alsa-python.git
 
: official python binding
 
: official python binding
 +
; alsa-ucm-conf.git
 +
: ALSA Use-Case-Manager configuration library
 +
; tinycompress.git
 +
: Compressed formats support library
  
 
; alsa.git
 
; alsa.git
 
: ALSA service repo (misc files)
 
: ALSA service repo (misc files)
 +
 +
; alsa-driver.nomirror.git
 +
: old ALSA driver repository without the mirrored kernel code
 +
; alsa-kmirror.git
 +
: alsa kernel mirror tree for continuous development (contains ALSA parts from alsa-kernel.git tree)
  
 
==Anonymous access==
 
==Anonymous access==
Line 36: Line 46:
 
: git clone git://git.alsa-project.org/alsa-driver.git alsa-driver
 
: git clone git://git.alsa-project.org/alsa-driver.git alsa-driver
 
: git clone git://git.alsa-project.org/alsa-kernel.git alsa-kernel
 
: git clone git://git.alsa-project.org/alsa-kernel.git alsa-kernel
: git clone git://git.alsa-project.org/alsa-kmirror.git alsa-kmirror
+
 
 +
: git clone git://git.alsa-project.org/alsa-kprivate.git alsa-kprivate
  
 
: git clone git://git.alsa-project.org/alsa-lib.git alsa-lib
 
: git clone git://git.alsa-project.org/alsa-lib.git alsa-lib
Line 45: Line 56:
 
: git clone git://git.alsa-project.org/alsa-oss.git alsa-oss
 
: git clone git://git.alsa-project.org/alsa-oss.git alsa-oss
 
: git clone git://git.alsa-project.org/alsa-python.git alsa-python
 
: git clone git://git.alsa-project.org/alsa-python.git alsa-python
 +
: git clone git://git.alsa-project.org/alsa-ucm-conf.git alsa-ucm-conf
 +
: git clone git://git.alsa-project.org/tinycompress.git tinycompress
  
 
: git clone git://git.alsa-project.org/alsa.git alsa
 
: git clone git://git.alsa-project.org/alsa.git alsa
 +
 +
: git clone git://git.alsa-project.org/alsa-driver.nomirror.git alsa
 +
: git clone git://git.alsa-project.org/alsa-kmirror.git alsa-kmirror
  
 
===Web interface===
 
===Web interface===
Line 52: Line 68:
 
: http://git.alsa-project.org/?p=alsa-driver.git
 
: http://git.alsa-project.org/?p=alsa-driver.git
 
: http://git.alsa-project.org/?p=alsa-kernel.git
 
: http://git.alsa-project.org/?p=alsa-kernel.git
: http://git.alsa-project.org/?p=alsa-kmirror.git
+
 
 +
: http://git.alsa-project.org/?p=alsa-kprivate.git
  
 
: http://git.alsa-project.org/?p=alsa-lib.git
 
: http://git.alsa-project.org/?p=alsa-lib.git
Line 61: Line 78:
 
: http://git.alsa-project.org/?p=alsa-oss.git
 
: http://git.alsa-project.org/?p=alsa-oss.git
 
: http://git.alsa-project.org/?p=alsa-python.git
 
: http://git.alsa-project.org/?p=alsa-python.git
 +
: http://git.alsa-project.org/?p=alsa-ucm-conf.git
 +
: http://git.alsa-project.org/?p=tinycompress.git
  
 
: http://git.alsa-project.org/?p=alsa.git
 
: http://git.alsa-project.org/?p=alsa.git
 +
 +
: http://git.alsa-project.org/?p=alsa-driver.nomirror.git
 +
: http://git.alsa-project.org/?p=alsa-kmirror.git
  
 
===HTTP access===
 
===HTTP access===
Line 68: Line 90:
 
: http://git.alsa-project.org/http/alsa-driver.git
 
: http://git.alsa-project.org/http/alsa-driver.git
 
: http://git.alsa-project.org/http/alsa-kernel.git
 
: http://git.alsa-project.org/http/alsa-kernel.git
: http://git.alsa-project.org/http/alsa-kmirror.git
+
 
 +
: http://git.alsa-project.org/http/alsa-kprivate.git
  
 
: http://git.alsa-project.org/http/alsa-lib.git
 
: http://git.alsa-project.org/http/alsa-lib.git
Line 77: Line 100:
 
: http://git.alsa-project.org/http/alsa-oss.git
 
: http://git.alsa-project.org/http/alsa-oss.git
 
: http://git.alsa-project.org/http/alsa-python.git
 
: http://git.alsa-project.org/http/alsa-python.git
 +
: http://git.alsa-project.org/http/alsa-ucm-conf.git
 +
: http://git.alsa-project.org/http/tinycompress.git
  
 
: http://git.alsa-project.org/http/alsa.git
 
: http://git.alsa-project.org/http/alsa.git
 +
 +
: http://git.alsa-project.org/http/alsa-driver.nomirror.git
 +
: http://git.alsa-project.org/http/alsa-kmirror.git
  
 
==For developers - kernel drivers==
 
==For developers - kernel drivers==
Line 87: Line 115:
 
: 2) valid 'Signed-off-by:' line must be in the commit text
 
: 2) valid 'Signed-off-by:' line must be in the commit text
  
===Rules for alsa-kernel.git===
+
===Rules for alsa-kernel.git and the mirror branch in alsa-driver.git===
  
 
: 1) subject (first commit text line) must start with '[ALSA] ' or 'ALSA: ' or '[sound] ' or 'sound: '
 
: 1) subject (first commit text line) must start with '[ALSA] ' or 'ALSA: ' or '[sound] ' or 'sound: '
  
===Syncing===
+
===Rules for alsa-kprivate.git===
 
+
Note that 'master' branch in alsa-kernel.git is synced with alsa-kmirror.git 'master' branch automatically. So if you add a patch to alsa-kernel.git, it will be merged to alsa-kmirror.git (if no problem occurs) when you initiate 'git push' to the ALSA server. It's really required to see messages from the pre-receive script when something goes wrong. The script is trying to suggest what's going wrong and try to show you a problematic code (diff).
+
 
+
Pushing to 'alsa-kmirror.git' should be only done if:
+
 
+
: a) you fixing a sync problem
+
: b) you are modifying a file which is out of sync (scripts directory or so)
+
  
In all other cases, only alsa-kernel.git repository should be used.
+
No rules. Just do not overwrite branches created by someone else. The 'master' branch is equal to linux-2.6 official tree from
 +
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git (do sync if necessary):
  
The pre-receive script uses all four commit identifiers Author + AuthorDate + Commit + CommitDate to pair commits between alsa-kernel.git and alsa-kmirror.git. Use this information, if you like to add some commits manually to alsa-kmirror.git tree.
+
  git remote add linux-2.6 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
 +
  git checkout master
 +
  git pull linux-2.6 master
 +
  git push --tags origin master
  
====Common problems====
+
===Syncing the branch release in alsa-driver.git===
  
; PRE-RECEIVE repositories does not match, please, fix it
+
  Please, use --log for the git merge command to show the "subject" of commits.
: The alsa-kmirror.git#mastter and alsa-kernel.git#master sources does not match. You have to do manual changes in alsa-kmirror.git repository to sync trees. A diff between alsa-kmirror.git and alsa-kernel.git is printed to stderr, so you can analyze it and do appropriate steps.
+
  It might be handy to define these git aliases in your .git/config file:
  
; PRE-RECEIVE Patch failed - is it already merged?
+
  [alias]
: Appearently, you're trying to apply a patch which cannot be applied cleanly to alsa-kmirror.git#master. One reason might be that the patch is already applied, but the pre-receive script does not know about it. You may add commiter and commitdate to alsa-kmirror/scripts/git-ok-commits file to skip problematic commit (but only if you really verify, that this commit is already in the alsa-kmirror tree).
+
        apull = !git checkout release && git pull origin release && \
 +
                git checkout build && git pull origin build && \
 +
                git checkout mirror && git pull origin mirror && \
 +
                git checkout release
 +
        apush = !git push --tags origin release && git push origin build && \
 +
                git push origin mirror
 +
        bmerge = !git checkout release && git merge --log build
 +
        mmerge = !git checkout release && git merge --log mirror
  
 
===Clone repositories===
 
===Clone repositories===
  
 
  git clone git@git.alsa-project.org:alsa-driver.git alsa-driver
 
  git clone git@git.alsa-project.org:alsa-driver.git alsa-driver
 +
cd alsa-driver
 +
git branch build remotes/origin/build
 +
git branch mirror remotes/origin/mirror
 +
git branch release remotes/origin/release
 +
 
  git clone git@git.alsa-project.org:alsa-kernel.git alsa-kernel
 
  git clone git@git.alsa-project.org:alsa-kernel.git alsa-kernel
git clone git@git.alsa-project.org:alsa-kmirror.git alsa-kmirror
 
  
 
To show all branches (includes remote ones):
 
To show all branches (includes remote ones):
Line 124: Line 160:
 
To make a remote branch local:
 
To make a remote branch local:
  
  git checkout -b for-linus origin/for-linus
+
  git checkout -b for-linus remotes/origin/for-linus
  git checkout -b linux-2.6 origin/linux-2.6
+
  git checkout -b linux-2.6 remotes/origin/linux-2.6
  
 
===Update and rebase using Linus's 2.6 kernel tree===
 
===Update and rebase using Linus's 2.6 kernel tree===
Line 147: Line 183:
 
===Push branch changes to ALSA GIT repository===
 
===Push branch changes to ALSA GIT repository===
  
  git push --tags origin master:refs/heads/master
+
  git push --tags origin master
  git push --tags origin linux-2.6:refs/heads/linux-2.6
+
  git push --tags origin linux-2.6
  git push --tags origin for-linus:refs/heads/for-linus
+
  git push --tags origin for-linus
  
 
Note: Especially after 'git rebase' the repository on server is not consistent with local repository (remote ref is not ancestor of the local ref for master branch), so you have to use --force parameter for 'git push' command. Note that this might be dangerous - please, ask Jaroslav Kysela < perex at perex . cz > if you can do this for branch 'master'.
 
Note: Especially after 'git rebase' the repository on server is not consistent with local repository (remote ref is not ancestor of the local ref for master branch), so you have to use --force parameter for 'git push' command. Note that this might be dangerous - please, ask Jaroslav Kysela < perex at perex . cz > if you can do this for branch 'master'.
Line 159: Line 195:
 
: the contents is synced to alsa-kmirror.git
 
: the contents is synced to alsa-kmirror.git
  
: linux-next
+
; linux-next
; this branch is for linux next testing tree (originaly maintaned by Andrew Morton), rebased  
+
: this branch is for linux next testing tree (originaly maintaned by Andrew Morton), rebased  
  
 
; for-linus
 
; for-linus
Line 173: Line 209:
 
===Tags===
 
===Tags===
  
Private tags are not allowed. Only tags identifying ALSA version (alsa-kmirror.git and alsa-driver.git) or official linux kernel version (alsa-kernel.git) are allowed.
+
Private tags are not allowed. Only branches identifying ALSA version (alsa-driver.git) or official linux kernel version (alsa-kernel.git) are allowed.
  
 
===Maintenance===
 
===Maintenance===
Line 180: Line 216:
  
 
==Occasional Developers==
 
==Occasional Developers==
This section is for developers without write access to ALSA git. I.e. who will clone repos and send in patches
+
This section is for developers without write access to ALSA git. i.e., who will clone repos and send in patches
  
 
===clone the repository===
 
===clone the repository===
 
  git clone git://git.alsa-project.org/alsa-driver.git alsa-driver  
 
  git clone git://git.alsa-project.org/alsa-driver.git alsa-driver  
git clone git://git.alsa-project.org/alsa-kmirror.git alsa-kmirror
 
  
 +
If you live behind a firewall that blocks the git protocol, you can do this instead:
 +
 +
git clone http://git.alsa-project.org/http/alsa-driver.git alsa-driver
 +
 +
Create local branches:
 +
 +
cd alsa-driver
 +
git branch build remotes/origin/build
 +
git branch mirror remotes/origin/mirror
 +
git branch release remotes/origin/release
 +
 +
Note: You may do changes directly in the Linus's kernel GIT tree and send the patches from it.
  
 
===configure git===
 
===configure git===
 
Set your email address correctly otherwise commits get spurious email address for Author and Commiter
 
Set your email address correctly otherwise commits get spurious email address for Author and Commiter
  git-config --add user.email me@domain.com
+
  git config --add user.email me@domain.com
  
 
Make sure it knows how to send email (for patches)
 
Make sure it knows how to send email (for patches)
  git-config --add sendemail.smtpserver smtp.domain.com
+
  git config --add sendemail.smtpserver smtp.domain.com
  
 
===save current===
 
===save current===
 
in case you want to roll back
 
in case you want to roll back
  git-branch save
+
  git branch save
  
 
===do your work===
 
===do your work===
Line 202: Line 249:
  
 
If it didn't work out and you want to get back to the old tree
 
If it didn't work out and you want to get back to the old tree
  git-reset --hard save
+
  git reset --hard save
  
 
===generate patches===
 
===generate patches===
 
Want to get patch against latest, so rebase  
 
Want to get patch against latest, so rebase  
  git-rebase origin/master
+
  git rebase origin/master
  git-diff remotes/origin/master
+
  git diff remotes/origin/master
  
 
Then do this to generate the patchset
 
Then do this to generate the patchset
  git-format-patch -s -n -p --subject-prefix="PATCH - my module" remotes/origin/master
+
  git format-patch -s -n -p --subject-prefix="PATCH - my module" remotes/origin/master
  
 
===check the patches===
 
===check the patches===
Line 217: Line 264:
 
===sending the patches===
 
===sending the patches===
  
  git-send-email --from=me --to=tiwai@suse.de --cc=alsa-devel@alsa-project.org  
+
  git send-email --from=me --to=patch@alsa-project.org --cc=alsa-devel@alsa-project.org 000*.patch
000*.patch                                          
+
  
 
===get up to date===
 
===get up to date===
For both alsa-kmirror and alsa-driver
+
 
  git-pull
+
cd alsa-driver
 +
  git checkout build
 +
git pull origin build
 +
git checkout mirror
 +
git pull origin mirror
 +
git checkout release
 +
git pull origin release
  
 
Sometimes you can just make and things will be fine. However, when there have been changes to the build system etc, its best to do a make clean; ./gitcompile to get the tree properly up to date.
 
Sometimes you can just make and things will be fine. However, when there have been changes to the build system etc, its best to do a make clean; ./gitcompile to get the tree properly up to date.
  
 
[[Category:Development]]
 
[[Category:Development]]

Latest revision as of 16:37, 17 December 2012

Contents

[edit] ALSA Repositories

alsa-driver.git
contains compatibility and build code for older 2.6 kernels with mirrored latest kernel code
alsa-kernel.git
contains linux 2.6 kernel tree
alsa-kprivate.git
contains linux 2.6 kernel tree - for private branches for alsa developers
alsa-lib.git
library
alsa-utils.git;
utilities
alsa-firmware.git
firmware
alsa-tools.git
tools
alsa-plugins.git
plugins
alsa-oss.git
oss compatibility
alsa-python.git
official python binding
alsa-ucm-conf.git
ALSA Use-Case-Manager configuration library
tinycompress.git
Compressed formats support library
alsa.git
ALSA service repo (misc files)
alsa-driver.nomirror.git
old ALSA driver repository without the mirrored kernel code
alsa-kmirror.git
alsa kernel mirror tree for continuous development (contains ALSA parts from alsa-kernel.git tree)

[edit] Anonymous access

[edit] Read only GIT server

git clone git://git.alsa-project.org/alsa-driver.git alsa-driver
git clone git://git.alsa-project.org/alsa-kernel.git alsa-kernel
git clone git://git.alsa-project.org/alsa-kprivate.git alsa-kprivate
git clone git://git.alsa-project.org/alsa-lib.git alsa-lib
git clone git://git.alsa-project.org/alsa-utils.git alsa-utils
git clone git://git.alsa-project.org/alsa-firmware.git alsa-firmware
git clone git://git.alsa-project.org/alsa-tools.git alsa-tools
git clone git://git.alsa-project.org/alsa-plugins.git alsa-plugins
git clone git://git.alsa-project.org/alsa-oss.git alsa-oss
git clone git://git.alsa-project.org/alsa-python.git alsa-python
git clone git://git.alsa-project.org/alsa-ucm-conf.git alsa-ucm-conf
git clone git://git.alsa-project.org/tinycompress.git tinycompress
git clone git://git.alsa-project.org/alsa.git alsa
git clone git://git.alsa-project.org/alsa-driver.nomirror.git alsa
git clone git://git.alsa-project.org/alsa-kmirror.git alsa-kmirror

[edit] Web interface

http://git.alsa-project.org/?p=alsa-driver.git
http://git.alsa-project.org/?p=alsa-kernel.git
http://git.alsa-project.org/?p=alsa-kprivate.git
http://git.alsa-project.org/?p=alsa-lib.git
http://git.alsa-project.org/?p=alsa-utils.git
http://git.alsa-project.org/?p=alsa-firmware.git
http://git.alsa-project.org/?p=alsa-tools.git
http://git.alsa-project.org/?p=alsa-plugins.git
http://git.alsa-project.org/?p=alsa-oss.git
http://git.alsa-project.org/?p=alsa-python.git
http://git.alsa-project.org/?p=alsa-ucm-conf.git
http://git.alsa-project.org/?p=tinycompress.git
http://git.alsa-project.org/?p=alsa.git
http://git.alsa-project.org/?p=alsa-driver.nomirror.git
http://git.alsa-project.org/?p=alsa-kmirror.git

[edit] HTTP access

http://git.alsa-project.org/http/alsa-driver.git
http://git.alsa-project.org/http/alsa-kernel.git
http://git.alsa-project.org/http/alsa-kprivate.git
http://git.alsa-project.org/http/alsa-lib.git
http://git.alsa-project.org/http/alsa-utils.git
http://git.alsa-project.org/http/alsa-firmware.git
http://git.alsa-project.org/http/alsa-tools.git
http://git.alsa-project.org/http/alsa-plugins.git
http://git.alsa-project.org/http/alsa-oss.git
http://git.alsa-project.org/http/alsa-python.git
http://git.alsa-project.org/http/alsa-ucm-conf.git
http://git.alsa-project.org/http/tinycompress.git
http://git.alsa-project.org/http/alsa.git
http://git.alsa-project.org/http/alsa-driver.nomirror.git
http://git.alsa-project.org/http/alsa-kmirror.git

[edit] For developers - kernel drivers

[edit] Common rules

1) be very very very carefull when you use '--force' for 'git push', you can broke whole repository, you should notify other developers on alsa-devel mailing list that you will do this change for 'master' branch
2) valid 'Signed-off-by:' line must be in the commit text

[edit] Rules for alsa-kernel.git and the mirror branch in alsa-driver.git

1) subject (first commit text line) must start with '[ALSA] ' or 'ALSA: ' or '[sound] ' or 'sound: '

[edit] Rules for alsa-kprivate.git

No rules. Just do not overwrite branches created by someone else. The 'master' branch is equal to linux-2.6 official tree from git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git (do sync if necessary):

 git remote add linux-2.6 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
 git checkout master
 git pull linux-2.6 master
 git push --tags origin master

[edit] Syncing the branch release in alsa-driver.git

 Please, use --log for the git merge command to show the "subject" of commits.
 It might be handy to define these git aliases in your .git/config file:
 [alias]
       apull = !git checkout release && git pull origin release && \
                git checkout build && git pull origin build && \
                git checkout mirror && git pull origin mirror && \
                git checkout release
       apush = !git push --tags origin release && git push origin build && \
                git push origin mirror
       bmerge = !git checkout release && git merge --log build
       mmerge = !git checkout release && git merge --log mirror

[edit] Clone repositories

git clone git@git.alsa-project.org:alsa-driver.git alsa-driver
cd alsa-driver
git branch build remotes/origin/build
git branch mirror remotes/origin/mirror
git branch release remotes/origin/release
git clone git@git.alsa-project.org:alsa-kernel.git alsa-kernel

To show all branches (includes remote ones):

git branch -a

To make a remote branch local:

git checkout -b for-linus remotes/origin/for-linus
git checkout -b linux-2.6 remotes/origin/linux-2.6

[edit] Update and rebase using Linus's 2.6 kernel tree

Add remote URL:

git remote add linux-2.6 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

Checkout linux-2.6 branch:

git checkout linux-2.6

Pull Linus's 2.6 changes:

git pull linux-2.6 master

Rebase our main ALSA development master branch with linux-2.6:

git rebase linux-2.6 master

[edit] Push branch changes to ALSA GIT repository

git push --tags origin master
git push --tags origin linux-2.6
git push --tags origin for-linus

Note: Especially after 'git rebase' the repository on server is not consistent with local repository (remote ref is not ancestor of the local ref for master branch), so you have to use --force parameter for 'git push' command. Note that this might be dangerous - please, ask Jaroslav Kysela < perex at perex . cz > if you can do this for branch 'master'.

[edit] Branches

master
this branch is for main development, managed by Jaroslav Kysela, it is rebased before ALSA releases
the contents is synced to alsa-kmirror.git
linux-next
this branch is for linux next testing tree (originaly maintaned by Andrew Morton), rebased
for-linus
this branch is for mainstream tree (for Linus Torvalds), just temporary branch
linux-2.6
this is official linux 2.6 mainstream tree
stable-2.6.<number>
patches for stable 2.6 kernels

[edit] Tags

Private tags are not allowed. Only branches identifying ALSA version (alsa-driver.git) or official linux kernel version (alsa-kernel.git) are allowed.

[edit] Maintenance

GIT server is maintaned by User:Perex.

[edit] Occasional Developers

This section is for developers without write access to ALSA git. i.e., who will clone repos and send in patches

[edit] clone the repository

git clone git://git.alsa-project.org/alsa-driver.git alsa-driver 

If you live behind a firewall that blocks the git protocol, you can do this instead:

git clone http://git.alsa-project.org/http/alsa-driver.git alsa-driver 

Create local branches:

cd alsa-driver
git branch build remotes/origin/build
git branch mirror remotes/origin/mirror
git branch release remotes/origin/release

Note: You may do changes directly in the Linus's kernel GIT tree and send the patches from it.

[edit] configure git

Set your email address correctly otherwise commits get spurious email address for Author and Commiter

git config --add user.email me@domain.com

Make sure it knows how to send email (for patches)

git config --add sendemail.smtpserver smtp.domain.com

[edit] save current

in case you want to roll back

git branch save

[edit] do your work

edit, compile, test, sweat

If it didn't work out and you want to get back to the old tree

git reset --hard save

[edit] generate patches

Want to get patch against latest, so rebase

git rebase origin/master
git diff remotes/origin/master

Then do this to generate the patchset

git format-patch -s -n -p --subject-prefix="PATCH - my module" remotes/origin/master

[edit] check the patches

/lib/modules/`uname -r`/build/scripts/checkpatch.pl --no-tree *.patch

[edit] sending the patches

git send-email --from=me --to=patch@alsa-project.org --cc=alsa-devel@alsa-project.org  000*.patch

[edit] get up to date

cd alsa-driver
git checkout build
git pull origin build
git checkout mirror
git pull origin mirror
git checkout release
git pull origin release

Sometimes you can just make and things will be fine. However, when there have been changes to the build system etc, its best to do a make clean; ./gitcompile to get the tree properly up to date.

Custom Search
Personal tools
Namespaces

Variants
Actions
Navigation
wiki
Toolbox