MediaWiki/contributing: Difference between revisions
Created page with "<syntaxhighlight lang="bash"> # make sure you have git-review (https://docs.opendev.org/opendev/git-review/latest/) installed sudo apt-get install git-review # clone MediaWiki into your working directory cd ~/src git clone https://gerrit.wikimedia.org/r/mediawiki/core.git mediawiki cd mediawiki/ # After cloning a repository, you need to set it up for using git-review git review -s # Use the commit message template that is found in the MediaWiki sources git config comm..." |
link to new page Semantic MediaWiki/contributing |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
< | This is my short version of the [https://www.mediawiki.org/wiki/Gerrit/Tutorial/tl;dr official short version] | ||
You've already read the '[https://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker How to become a MediaWiki Hacker]' and you've created, or are ready to work on, a Phabricator task. | |||
sudo apt-get install git-review | |||
Besides the general MediaWiki contributing guidelines, the [[Semantic MediaWiki]] community has developed and evolved their own practices of software development. Chief among these is the use of a Docker-based continuous development environment so that you can build, debug, test and contribute changes to the SMW codebase plus all the many other extensions that are part of the SMW ecosystem. See [[Semantic MediaWiki/contributing]] for details. | |||
@todo: add setting up Development Environment | |||
@todo: add testing | |||
<ol> | |||
<li>Make sure you have [https://docs.opendev.org/opendev/git-review/latest/ git-review] installed<br> | |||
<code>sudo apt-get install git-review</code> | |||
<li>clone MediaWiki into your working directory<br> | |||
<pre> | |||
cd ~/src | cd ~/src | ||
git clone https://gerrit.wikimedia.org/r/mediawiki/core.git mediawiki | git clone https://gerrit.wikimedia.org/r/mediawiki/core.git mediawiki | ||
cd mediawiki/ | cd mediawiki/ | ||
</pre> | |||
<li>After cloning a repository, you need to set it up for using git-review<br> | |||
git review -s | <code>git review -s</code> (same as <code>git review --setup</code>) | ||
<li>Use the commit message template that is found in the MediaWiki sources<br> | |||
git config commit.template .gitmessage | <code>git config commit.template .gitmessage</code> | ||
<li>And configure your Gerrit/Developer account username - which you can also do in your .ssh/config<br> | |||
<code>git config --global --add gitreview.username "freephile"</code> | |||
<li>Create a new bugfix branch | |||
<pre> | |||
git checkout master | git checkout master | ||
git pull | git pull | ||
git checkout -b fix-T385308-update-links | git checkout -b fix-T385308-update-links | ||
</pre> | |||
<li>work on the code and commit it<br> | |||
<code>code ./</code><br> | |||
<code>git status</code><br> | |||
<code>git commit --all</code><br> | |||
<li>Then push it to gerrit for review<br> | |||
<code>git review</code> | |||
</ol> | |||
Under the hood, the <code>git-review -s</code> setup will add a 'gerrit' remote to your local repo, using SSH transport, and your developer account login like this: | |||
<pre> | |||
git | git remote -v | ||
git | gerrit ssh://freephile@gerrit.wikimedia.org:29418/mediawiki/core.git (fetch) | ||
gerrit ssh://freephile@gerrit.wikimedia.org:29418/mediawiki/core.git (push) | |||
origin https://gerrit.wikimedia.org/r/mediawiki/core.git (fetch) | |||
origin https://gerrit.wikimedia.org/r/mediawiki/core.git (push) | |||
</pre> | |||
# | and it will add a commit hook at <code>.git/hooks/commit-msg</code> | ||
git | <syntaxhighlight lang="bash"> | ||
#!/bin/sh | |||
# From Gerrit Code Review 3.10.4 | |||
# | |||
# Part of Gerrit Code Review (https://www.gerritcodereview.com/) | |||
# | |||
# Copyright (C) 2009 The Android Open Source Project | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
set -u | |||
# avoid [[ which is not POSIX sh. | |||
if test "$#" != 1 ; then | |||
echo "$0 requires an argument." | |||
exit 1 | |||
fi | |||
if test ! -f "$1" ; then | |||
echo "file does not exist: $1" | |||
exit 1 | |||
fi | |||
# Do not create a change id if requested | |||
case "$(git config --get gerrit.createChangeId)" in | |||
false) | |||
exit 0 | |||
;; | |||
always) | |||
;; | |||
*) | |||
# Do not create a change id for squash/fixup commits. | |||
if head -n1 "$1" | LC_ALL=C grep -q '^[a-z][a-z]*! '; then | |||
exit 0 | |||
fi | |||
;; | |||
esac | |||
if git rev-parse --verify HEAD >/dev/null 2>&1; then | |||
refhash="$(git rev-parse HEAD)" | |||
else | |||
refhash="$(git hash-object -t tree /dev/null)" | |||
fi | |||
random=$({ git var GIT_COMMITTER_IDENT ; echo "$refhash" ; cat "$1"; } | git hash-object --stdin) | |||
dest="$1.tmp.${random}" | |||
trap 'rm -f "$dest" "$dest-2"' EXIT | |||
if ! cat "$1" | sed -e '/>8/q' | git stripspace --strip-comments > "${dest}" ; then | |||
echo "cannot strip comments from $1" | |||
exit 1 | |||
fi | |||
if test ! -s "${dest}" ; then | |||
echo "file is empty: $1" | |||
exit 1 | |||
fi | |||
reviewurl="$(git config --get gerrit.reviewUrl)" | |||
if test -n "${reviewurl}" ; then | |||
token="Link" | |||
value="${reviewurl%/}/id/I$random" | |||
pattern=".*/id/I[0-9a-f]\{40\}" | |||
else | |||
token="Change-Id" | |||
value="I$random" | |||
pattern=".*" | |||
fi | |||
if git interpret-trailers --parse < "$1" | grep -q "^$token: $pattern$" ; then | |||
exit 0 | |||
fi | |||
# There must be a Signed-off-by trailer for the code below to work. Insert a | |||
# sentinel at the end to make sure there is one. | |||
# Avoid the --in-place option which only appeared in Git 2.8 | |||
if ! git interpret-trailers \ | |||
--trailer "Signed-off-by: SENTINEL" < "$1" > "$dest-2" ; then | |||
echo "cannot insert Signed-off-by sentinel line in $1" | |||
exit 1 | |||
fi | |||
# Make sure the trailer appears before any Signed-off-by trailers by inserting | |||
# it as if it was a Signed-off-by trailer and then use sed to remove the | |||
# Signed-off-by prefix and the Signed-off-by sentinel line. | |||
# Avoid the --in-place option which only appeared in Git 2.8 | |||
# Avoid the --where option which only appeared in Git 2.15 | |||
if ! git -c trailer.where=before interpret-trailers \ | |||
--trailer "Signed-off-by: $token: $value" < "$dest-2" | | |||
sed -e "s/^Signed-off-by: \($token: \)/\1/" \ | |||
-e "/^Signed-off-by: SENTINEL/d" > "$dest" ; then | |||
echo "cannot insert $token line in $1" | |||
exit 1 | |||
fi | |||
if ! mv "${dest}" "$1" ; then | |||
echo "cannot mv ${dest} to $1" | |||
exit 1 | |||
fi | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Details == | |||
* https://www.mediawiki.org/wiki/Phabricator/Help#Creating_a_task | |||
* https://www.mediawiki.org/wiki/Gerrit/git-review | |||
* https://www.mediawiki.org/wiki/Gerrit/Commit_message_guidelines | |||