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:
<syntaxhighlight lang="bash">
This is my short version of the [https://www.mediawiki.org/wiki/Gerrit/Tutorial/tl;dr official short version]
# make sure you have git-review (https://docs.opendev.org/opendev/git-review/latest/) installed
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>


# clone MediaWiki into your working directory
<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>


# After cloning a repository, you need to set it up for using git-review
<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>)


# Use the commit message template that is found in the MediaWiki sources
<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>
# And configure your Gerrit/Developer account username - which you can also do in your .ssh/config
git config --global --add gitreview.username "freephile"


# Create a new bugfix branch
<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>


# work on the code and commit it
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:
code ./
<pre>
git status
git remote -v
git commit --all
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>


# Then push it to gerrit for review
and it will add a commit hook at <code>.git/hooks/commit-msg</code>
git review
<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