You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			201 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Bash
		
	
			
		
		
	
	
			201 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Bash
		
	
#!/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
 |