blob: 464e20b42966f42cf3071938a67fda46bad4bc83 [file] [log] [blame]
#!/usr/bin/env -S bash -e
#
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# create-chromium-git-src
#
# Create and configure a local Chromium git repository.
#
GITSERVER="${GITSERVER:-git.chromium.org}"
SVNSERVER="${SVNSERVER:-svn://svn.chromium.org/chrome}"
TMP=".create_chromium_git_src.$$"
function cleanup {
rm -rf "${TMP}"
}
trap 'cleanup; echo Failure!; tput bel; exit 1' TERM QUIT HUP INT EXIT
function get_email {
# Get user email address.
EMAIL=""
while [ "x${EMAIL}" = "x" ]; do
echo -n "Email address git should configure in your checkout: "
read EMAIL
if [ "x${EMAIL}" = "x${EMAIL%@*}" ]; then
echo "Invalid email address (must contain @)!"
EMAIL=""
fi
done
echo -n "Using ${EMAIL} for email address... "
sleep 1
echo OK
}
# Verify we can write to particular directories.
function check_dirs {
if [ -d src ]; then
echo "Found a src directory, do you already have a Chromium checkout?"
exit 1
fi
}
# Test git and git --version.
function test_git {
echo -n "Trying git... "
local GITV="$(git --version)" || {
echo "git isn't installed, please install it"
exit 1
}
GITV="${GITV##* }" # Only examine last word (i.e. version number)
local GITD=( ${GITV//./ } ) # Split version number into decimals
if ((GITD[0] < 1 || (GITD[0] == 1 && GITD[1] < 6) )); then
echo "git version is ${GITV}, please update to a version later than 1.6"
exit 1
fi
echo "found git version ${GITV}"
}
# Test git svn and git svn --version.
function test_git_svn {
echo -n "Trying git-svn... "
rm -rf "${TMP}"
git clone git://github.com/git/hello-world.git "${TMP}" &>/dev/null &&
local GITV="$(cd "${TMP}" && git svn --version)" || {
echo "git-svn isn't installed, please install it"
exit 1
}
GITV="${GITV#* version }" # git svn --version has extra output to remove.
GITV="${GITV% (svn*}"
local GITD=( ${GITV//./ } ) # Split version number into decimals
if ((GITD[0] < 1 || (GITD[0] == 1 && GITD[1] < 6) )); then
echo "git version is ${GITV}, please update to a version later than 1.6"
exit 1
fi
echo "found git-svn version ${GITV}"
echo "Testing git svn init..."
(cd "${TMP}" && git svn init --username="${EMAIL}" --prefix=origin/ \
-T trunk/src "${SVNSERVER}") &
local pid="$!"
{ sleep 10 && kill "${pid}"; } &>/dev/null &
wait "${pid}" &>/dev/null || {
echo "Could not initialize repository, is SVN server ${SVNSERVER} correct?"
echo "The supplied username and password may be incorrect."
exit 1
}
}
# Verify we can reach our main git URL.
function test_git_url {
echo -n "Testing Chromium git URL... "
mkdir -p "${TMP}"
(cd "${TMP}" &&
rm -rf .git .gitignore &&
git init &&
git remote add origin git://"${GITSERVER}"/chromium.git &&
git remote show origin) &>/dev/null &
local pid="$!"
{ sleep 10 && kill "${pid}"; } &>/dev/null &
wait "${pid}" &>/dev/null || {
echo "timeout accessing Chromium git URL, is ${GITSERVER} correct?"
exit 1
}
echo OK
}
# Grab a clone of the Chromium git repository.
function cr_git_clone {
echo "Grabbing Chromium git repository..."
git clone git://"${GITSERVER}"/chromium.git src || {
echo "git clone exited with error"
echo "You should probably remove 'src' before retrying"
exit 1
}
}
# Configure the git repository to know about the upstream SVN server.
function cr_git_svn_init {
echo "Configuring upstream SVN..."
(cd src && git svn init --username="${EMAIL}" --prefix=origin/ -T trunk/src \
"${SVNSERVER}") || {
echo "'git svn init' exited with error"
exit 1
}
}
# Initialize the SVN history in the repository, also sanity checks our upstream
# SVN configuration.
function cr_git_svn_fetch {
echo "Fetching SVN history..."
(cd src && git svn fetch && git pull) || {
echo "'git svn fetch' exited with error"
exit 1
}
}
# Remaining configuration of the git repository:
# - associate with codereview/rietveld
# - set the repository's email address
# - disable crlf munging
# - grab a stock .gclient file
function git_config {
echo -n "Associating with Rietveld... "
(cd src && git cl config http://src.chromium.org/svn/)
echo OK
echo -n "Configuring email address... "
(cd src && git config user.email "${EMAIL}")
echo OK
echo -n "Disabling crlf munging... "
(cd src && git config --global core.autocrlf false)
echo OK
echo -n "Creating a .gclient file... "
gclient config http://src.chromium.org/svn/trunk/src
echo OK
}
get_email
check_dirs
test_git
test_git_svn
test_git_url
cr_git_clone
cr_git_svn_init
cr_git_svn_fetch
git_config
echo
echo "A Chromium Git repository was created in 'src'."
echo
echo " To create a CL..."
echo " Update: git pull && gclient sync"
echo " Create and use a branch mychange: git checkout -q -b mychange origin"
echo " Edit files and commit: git commit -a -v"
echo " Upload CL: git cl upload"
echo " Try a change: git try origin"
echo " Commit a CL: git cl dcommit"
echo " Switch to the trunk: git checkout trunk"
echo " Delete a branch mychange: git branch -d mychange"
echo
echo " If while on a branch you need to switch back to the trunk..."
echo " Switch to the trunk: git checkout trunk"
echo " List all branches: git branch"
echo " Switch to branch mychange: git checkout mychange"
echo
echo " Examining files and changes..."
echo " Log with patches: git log -p"
echo " Changes to DEPS: git log -p DEPS"
echo " View latest commit: git cat-file commit HEAD"
echo
echo "You should run: gclient sync"
echo
trap cleanup EXIT