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 |