| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env -S bash -e | |
| 2 # | |
| 3 # Copyright (c) 2009 The Chromium Authors. All rights reserved. | |
| 4 # Use of this source code is governed by a BSD-style license that can be | |
| 5 # found in the LICENSE file. | |
| 6 # | |
| 7 # create-chromium-git-src | |
| 8 # | |
| 9 # Create and configure a local Chromium git repository. | |
| 10 # | |
| 11 | |
| 12 GITSERVER="${GITSERVER:-git.chromium.org}" | |
| 13 SVNSERVER="${SVNSERVER:-svn://svn.chromium.org/chrome}" | |
| 14 TMP=".create_chromium_git_src.$$" | |
| 15 | |
| 16 function cleanup { | |
| 17 rm -rf "${TMP}" | |
| 18 } | |
| 19 | |
| 20 trap 'cleanup; echo Failure!; tput bel; exit 1' TERM QUIT HUP INT EXIT | |
| 21 | |
| 22 function get_email { | |
| 23 # Get user email address. | |
| 24 EMAIL="" | |
| 25 while [ "x${EMAIL}" = "x" ]; do | |
| 26 echo -n "Email address git should configure in your checkout: " | |
| 27 read EMAIL | |
| 28 if [ "x${EMAIL}" = "x${EMAIL%@*}" ]; then | |
| 29 echo "Invalid email address (must contain @)!" | |
| 30 EMAIL="" | |
| 31 fi | |
| 32 done | |
| 33 echo -n "Using ${EMAIL} for email address... " | |
| 34 sleep 1 | |
| 35 echo OK | |
| 36 } | |
| 37 | |
| 38 # Verify we can write to particular directories. | |
| 39 function check_dirs { | |
| 40 if [ -d src ]; then | |
| 41 echo "Found a src directory, do you already have a Chromium checkout?" | |
| 42 exit 1 | |
| 43 fi | |
| 44 } | |
| 45 | |
| 46 # Test git and git --version. | |
| 47 function test_git { | |
| 48 echo -n "Trying git... " | |
| 49 local GITV="$(git --version)" || { | |
| 50 echo "git isn't installed, please install it" | |
| 51 exit 1 | |
| 52 } | |
| 53 | |
| 54 GITV="${GITV##* }" # Only examine last word (i.e. version number) | |
| 55 local GITD=( ${GITV//./ } ) # Split version number into decimals | |
| 56 if ((GITD[0] < 1 || (GITD[0] == 1 && GITD[1] < 6) )); then | |
| 57 echo "git version is ${GITV}, please update to a version later than 1.6" | |
| 58 exit 1 | |
| 59 fi | |
| 60 echo "found git version ${GITV}" | |
| 61 } | |
| 62 | |
| 63 # Test git svn and git svn --version. | |
| 64 function test_git_svn { | |
| 65 echo -n "Trying git-svn... " | |
| 66 rm -rf "${TMP}" | |
| 67 git clone git://github.com/git/hello-world.git "${TMP}" &>/dev/null && | |
| 68 local GITV="$(cd "${TMP}" && git svn --version)" || { | |
| 69 echo "git-svn isn't installed, please install it" | |
| 70 exit 1 | |
| 71 } | |
| 72 | |
| 73 GITV="${GITV#* version }" # git svn --version has extra output to remove. | |
| 74 GITV="${GITV% (svn*}" | |
| 75 local GITD=( ${GITV//./ } ) # Split version number into decimals | |
| 76 if ((GITD[0] < 1 || (GITD[0] == 1 && GITD[1] < 6) )); then | |
| 77 echo "git version is ${GITV}, please update to a version later than 1.6" | |
| 78 exit 1 | |
| 79 fi | |
| 80 echo "found git-svn version ${GITV}" | |
| 81 | |
| 82 echo "Testing git svn init..." | |
| 83 (cd "${TMP}" && git svn init --username="${EMAIL}" --prefix=origin/ \ | |
| 84 -T trunk/src "${SVNSERVER}") & | |
| 85 local pid="$!" | |
| 86 { sleep 10 && kill "${pid}"; } &>/dev/null & | |
| 87 wait "${pid}" &>/dev/null || { | |
| 88 echo "Could not initialize repository, is SVN server ${SVNSERVER} correct?" | |
| 89 echo "The supplied username and password may be incorrect." | |
| 90 exit 1 | |
| 91 } | |
| 92 } | |
| 93 | |
| 94 # Verify we can reach our main git URL. | |
| 95 function test_git_url { | |
| 96 echo -n "Testing Chromium git URL... " | |
| 97 mkdir -p "${TMP}" | |
| 98 (cd "${TMP}" && | |
| 99 rm -rf .git .gitignore && | |
| 100 git init && | |
| 101 git remote add origin git://"${GITSERVER}"/chromium.git && | |
| 102 git remote show origin) &>/dev/null & | |
| 103 local pid="$!" | |
| 104 { sleep 10 && kill "${pid}"; } &>/dev/null & | |
| 105 wait "${pid}" &>/dev/null || { | |
| 106 echo "timeout accessing Chromium git URL, is ${GITSERVER} correct?" | |
| 107 exit 1 | |
| 108 } | |
| 109 echo OK | |
| 110 } | |
| 111 | |
| 112 # Grab a clone of the Chromium git repository. | |
| 113 function cr_git_clone { | |
| 114 echo "Grabbing Chromium git repository..." | |
| 115 git clone git://"${GITSERVER}"/chromium.git src || { | |
| 116 echo "git clone exited with error" | |
| 117 echo "You should probably remove 'src' before retrying" | |
| 118 exit 1 | |
| 119 } | |
| 120 } | |
| 121 | |
| 122 # Configure the git repository to know about the upstream SVN server. | |
| 123 function cr_git_svn_init { | |
| 124 echo "Configuring upstream SVN..." | |
| 125 (cd src && git svn init --username="${EMAIL}" --prefix=origin/ -T trunk/src \ | |
| 126 "${SVNSERVER}") || { | |
| 127 echo "'git svn init' exited with error" | |
| 128 exit 1 | |
| 129 } | |
| 130 } | |
| 131 | |
| 132 # Initialize the SVN history in the repository, also sanity checks our upstream | |
| 133 # SVN configuration. | |
| 134 function cr_git_svn_fetch { | |
| 135 echo "Fetching SVN history..." | |
| 136 (cd src && git svn fetch && git pull) || { | |
| 137 echo "'git svn fetch' exited with error" | |
| 138 exit 1 | |
| 139 } | |
| 140 } | |
| 141 | |
| 142 # Remaining configuration of the git repository: | |
| 143 # - associate with codereview/rietveld | |
| 144 # - set the repository's email address | |
| 145 # - disable crlf munging | |
| 146 # - grab a stock .gclient file | |
| 147 function git_config { | |
| 148 echo -n "Associating with Rietveld... " | |
| 149 (cd src && git cl config http://src.chromium.org/svn/) | |
| 150 echo OK | |
| 151 | |
| 152 echo -n "Configuring email address... " | |
| 153 (cd src && git config user.email "${EMAIL}") | |
| 154 echo OK | |
| 155 | |
| 156 echo -n "Disabling crlf munging... " | |
| 157 (cd src && git config --global core.autocrlf false) | |
| 158 echo OK | |
| 159 | |
| 160 echo -n "Creating a .gclient file... " | |
| 161 gclient config http://src.chromium.org/svn/trunk/src | |
| 162 echo OK | |
| 163 } | |
| 164 | |
| 165 get_email | |
| 166 check_dirs | |
| 167 test_git | |
| 168 test_git_svn | |
| 169 test_git_url | |
| 170 cr_git_clone | |
| 171 cr_git_svn_init | |
| 172 cr_git_svn_fetch | |
| 173 git_config | |
| 174 | |
| 175 echo | |
| 176 echo "A Chromium Git repository was created in 'src'." | |
| 177 echo | |
| 178 echo " To create a CL..." | |
| 179 echo " Update: git pull && gclient sync" | |
| 180 echo " Create and use a branch mychange: git checkout -q -b mychange origin" | |
| 181 echo " Edit files and commit: git commit -a -v" | |
| 182 echo " Upload CL: git cl upload" | |
| 183 echo " Try a change: git try origin" | |
| 184 echo " Commit a CL: git cl dcommit" | |
| 185 echo " Switch to the trunk: git checkout trunk" | |
| 186 echo " Delete a branch mychange: git branch -d mychange" | |
| 187 echo | |
| 188 echo " If while on a branch you need to switch back to the trunk..." | |
| 189 echo " Switch to the trunk: git checkout trunk" | |
| 190 echo " List all branches: git branch" | |
| 191 echo " Switch to branch mychange: git checkout mychange" | |
| 192 echo | |
| 193 echo " Examining files and changes..." | |
| 194 echo " Log with patches: git log -p" | |
| 195 echo " Changes to DEPS: git log -p DEPS" | |
| 196 echo " View latest commit: git cat-file commit HEAD" | |
| 197 echo | |
| 198 echo "You should run: gclient sync" | |
| 199 echo | |
| 200 trap cleanup EXIT | |
| OLD | NEW |