]> git.wh0rd.org - home.git/blame - .bin/cros-repo
add atomicity
[home.git] / .bin / cros-repo
CommitLineData
3c347239 1#!/bin/sh
3c347239
MF
2
3usage() {
4 cat <<-EOF
d94e4fb7 5 Usage: repo-cros [options]
3c347239 6
d94e4fb7 7 Options:
97d64453 8 depot_tools clone depot_tools tree
3c347239
MF
9 int switch to internal tree
10 ext switch to external tree
d94e4fb7
MF
11 -b <branch> switch branches (use "master" to get to ToT)
12 -r <path> patch to reference repo (e.g. ~/chromiumos/)
13
14 Operates on the repo in ${PWD}
3c347239
MF
15 EOF
16 exit ${1:-1}
17}
3c347239 18
a72514e6 19v() {
5f57468d 20 printf '%s\n%s\n' "${PWD}" "$*"
a72514e6 21 "$@"
5f57468d 22}
3c347239 23
d94e4fb7
MF
24email="vapier@chromium.org"
25REF=
26BRANCH=
27MANIFEST=
28REPO_URL=
3c347239
MF
29while [[ $# -gt 0 ]] ; do
30 case $1 in
97d64453
MF
31 depot_tools)
32 exec git clone https://git.chromium.org/chromium/tools/depot_tools.git
33 ;;
d94e4fb7
MF
34 int)
35 MANIFEST='ssh://gerrit-int.chromium.org:29419/chromeos/manifest-internal.git'
b05e460b 36 REPO_URL='https://git.chromium.org/git/external/repo.git'
d94e4fb7
MF
37 ;;
38 ext)
b05e460b
MF
39 MANIFEST='https://git.chromium.org/git/chromiumos/manifest.git'
40 REPO_URL='https://git.chromium.org/git/external/repo.git'
d94e4fb7
MF
41 ;;
42 -b)
43 BRANCH=$2
44 shift
45 ;;
46 -r)
7dae893b
MF
47
48 REF=$(realpath "${2:-$(echo ~/chromiumos)}")
d94e4fb7
MF
49 shift
50 ;;
5f57468d 51 *)
d94e4fb7 52 usage
5f57468d 53 ;;
3c347239 54 esac
5f57468d 55 shift
3c347239 56done
d94e4fb7 57
b05e460b
MF
58if [[ ${#BRANCH} -eq 3 ]] && [[ -d ${REF} ]] ; then
59 BRANCH=$(git --git-dir="${REF}/.repo/manifests.git" branch -a | grep -o "release-${BRANCH}.*")
60fi
61
a72514e6
MF
62v repo init \
63 ${MANIFEST:+-u "${MANIFEST}"} \
64 ${REPO_URL:+--repo-url="${REPO_URL}"} \
65 ${REF:+--reference "${REF}"} \
66 ${BRANCH:+-b "${BRANCH}"}
67
d94e4fb7
MF
68rdir=$(realpath "`pwd`")
69while [[ ! -d ${rdir}/.repo ]] ; do
70 rdir=${rdir%/*}
71 [[ ${rdir:-/} == "/" ]] && break
72done
73rdir+="/.repo"
74if [[ -d ${rdir} ]] ; then
75 gcfg() { git --git-dir="$1" config user.email "${@:2}" ; }
76 if [[ $(gcfg "${rdir}/manifests.git") != "${email}" ]] ; then
77 echo "${rdir}: setting e-mail to ${email}"
78 find "${rdir}" -type d -name '*.git' | \
79 while read d ; do
80 gcfg "${d}" ${email}
81 done
82 fi
83fi
84
a72514e6 85exit 0