#!/bin/bash function fn_aosp_ls { CHANGE_ID=$1 curl -s "https://android-review.googlesource.com/changes/$CHANGE_ID?o=CURRENT_REVISION" | tail -n +2 } function fn_aosp_checkout { CHANGE_ID=$1 REPO_ID=`fn_aosp_ls $CHANGE_ID \ | jq "(._number|tostring) + \"/\" + (.revisions | to_entries[].value._number|tostring)"` if [ -z $DEP_CHANGE_ID ]; then echo "Failed to parse aosp command for Change-Id: $CHANGE_ID" exit 1 fi repo download "platform/frameworks/support" ${REPO_ID:1:-1} \ && BRANCH=`git log -1 | grep Change-Id | awk '{print $2}'` \ && git checkout -B "aosp/$BRANCH" \ && git branch --set-upstream-to=aosp/androidx-main } function fn_aosp_merged { CHANGE_ID=$1 echo $CHANGE_ID fn_aosp_ls $CHANGE_ID } function fn_git_changeid { BRANCH=$1 git log $BRANCH -1 | grep Change-Id | awk '{print $2}' } function fn_git_check_uncommitted_changes { if [[ `git status --porcelain` ]]; then echo "Uncommitted changes; exiting" exit fi } # Check that jq is installed. if [ -z `which jq` ]; then echo "jq not installed; exiting" exit fi if [[ -z "$1" ]] || [[ "$1" == "help" ]]; then echo -n \ "usage: aosp [] A CLI for Gerrit UI that works with the cli tool, repo, to make it easier to search, checkout, and rebase changes. This script currently only works within frameworks/support. Commands: help Display this help text ls [] Query gerrit for open CLs; you must run this before aosp c. defaults to `whoami`@google.com c Force checkout a change in gerrit by the id returned from aosp ls command into a branch named `whoami`/ prune Delete any branches whose HEAD has a Change-Id for a CL that has been MERGED or ABANDONED in Gerrit r Checkout the latest patchset of HEAD~1's Change-Id, and cherry-pick HEAD ontop of it " elif [[ "$1" == "ls" ]]; then OWNER="${2:-`whoami`@google.com}" curl -s "https://android-review.googlesource.com/changes/?q=owner:$OWNER+status:open&o=CURRENT_REVISION" \ | tail -n +2 \ | jq -r ".[] | [._number, .subject, (.revisions | to_entries[].value._number), (.revisions[.current_revision].fetch.http | .url, .ref)] | @csv" \ | awk -F, '{ printf "%s,%s/%s,%s,%s,%s\n", NR, $1, $3, $2, $4, $5}' \ | column -t -s, \ | tee ~/.dustinlam_aosp elif [[ "$1" == "prune" ]]; then git branch \ | grep -v "^\*" \ | awk '{print $1}' \ | while read line do CHANGE_ID=`fn_git_changeid $line` if [ ! -z "$CHANGE_ID" ]; then STATUS=`fn_aosp_ls "$CHANGE_ID" | jq .status` if [[ $STATUS == "\"MERGED\"" ]] || [[ $STATUS == "\"ABANDONED\"" ]]; then git branch -D $line fi else echo "Failed to prune $line due to missing Change-Id" fi done elif [[ "$1" == "c" ]]; then fn_git_check_uncommitted_changes PATCH=`cat ~/.dustinlam_aosp | sed -n "$2p" | awk '{print $2}'` \ && repo download "platform/frameworks/support" "$PATCH" \ && BRANCH=`git log -1 | grep Change-Id | awk '{print $2}'` \ && git checkout -B "`whoami`/$BRANCH" \ && git branch --set-upstream-to=aosp/androidx-main elif [[ "$1" == "r" ]]; then fn_git_check_uncommitted_changes HEAD_COMMIT_HASH=`git rev-parse HEAD` CURRENT_BRANCH=`git branch | grep \* | awk '{print $2}'` DEP_CHANGE_ID=`git log --skip 1 -1 | grep Change-Id | awk '{print $2}'` if [ -z $DEP_CHANGE_ID ]; then echo "Dependent change is missing Change-Id" exit 1 fi fn_aosp_checkout $DEP_CHANGE_ID \ && git checkout -B $CURRENT_BRANCH \ && git cherry-pick $HEAD_COMMIT_HASH fi