+g-push)
+ # For the times when repo is being stupid, push directly to gerrit myself.
+ if ! branch=$(g symbolic-ref -q HEAD) ; then
+ err "could not figure out active branch"
+ fi
+ branch=${branch#refs/heads/}
+ if ! remote_branch=$(g cfg --get "branch.${branch}.merge") ; then
+ echo "could not figure out remote branch; using ${branch}"
+ remote_branch=${branch}
+ fi
+ if ! remote=$(g cfg --get "branch.${branch}.remote") ; then
+ for remote in cros-internal cros origin ; do
+ g cfg --get "remote.${remote}.url" >/dev/null && break
+ done
+ fi
+ review=$(g cfg --get "remote.${remote}.review")
+ remote_branch=${remote_branch#refs/heads/}
+
+ git_args=()
+ reviewers=""
+ while [[ $# -gt 0 ]] ; do
+ case $1 in
+ --re)
+ process_reviewers "$2"
+ shift
+ ;;
+ -n|--dry-run|--draft)
+ git_args+=( $1 )
+ ;;
+ *)
+ err "unknown option: $1"
+ ;;
+ esac
+ shift
+ done
+
+ ref_spec="${branch}:refs/for/${remote_branch}"
+ if [[ -n ${reviewers} ]] ; then
+ reviewers=( ${reviewers//,/ } )
+ if [[ ${review} != ssh://* ]] ; then
+ gob_args=$(printf 'r=%s,' "${reviewers[@]}")
+ ref_spec+="%${gob_args%,}"
+ else
+ git_args+=( "--receive-pack=git receive-pack ${reviewers[*]/#/--reviewer=}" )
+ fi
+ fi
+
+ vr git push "${git_args[@]}" ${remote} ${ref_spec} && exit
+ err "could not figure out remote to push to"
+ ;;
+sync)
+ set -- -j16 -c "$@"
+ ;;
+upload)
+ args=()
+ while [[ $# -gt 0 ]] ; do
+ case $1 in
+ --re)
+ process_reviewers "$2"
+ args+=( --re "${reviewers}" )
+ shift 2
+ continue
+ ;;
+ esac
+ args+=( "$1" )
+ shift
+ done
+ set -- "${args[@]}"
+ ;;
+email)
+ email=${1:-${USER}@chromium.org}
+
+ root=$(repo_root)
+ git --git-dir="${root}/.repo/manifests.git" cfg user.email "${email}"
+ git --git-dir="${root}/.repo/repo/.git" cfg user.email "${email}"
+
+ cmd='forall'
+ set -- -c "git cfg user.email '${email}'"
+ ;;