MediaWiki/contributing

From Freephile Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This is my short version of the official short version You've already read the 'How to become a MediaWiki Hacker' and you've created, or are ready to work on, a Phabricator task.

@todo: add setting up Development Environment @todo: add testing


  1. Make sure you have git-review installed
    sudo apt-get install git-review
  2. clone MediaWiki into your working directory
    cd ~/src
    git clone https://gerrit.wikimedia.org/r/mediawiki/core.git mediawiki
    cd mediawiki/
    
  3. After cloning a repository, you need to set it up for using git-review
    git review -s
  4. Use the commit message template that is found in the MediaWiki sources
    git config commit.template .gitmessage
  5. And configure your Gerrit/Developer account username - which you can also do in your .ssh/config
    git config --global --add gitreview.username "freephile"
  6. Create a new bugfix branch
    git checkout master
    git pull
    git checkout -b fix-T385308-update-links
    
  7. work on the code and commit it
    code ./
    git status
    git commit --all
  8. Then push it to gerrit for review
    git review


Under the hood, the git-review -s setup will add a 'gerrit' remote to your local repo, using SSH transport, and your developer account login like this:

git remote -v
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)

and it will add a commit hook at .git/hooks/commit-msg

#!/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

Details