[go: nahoru, domu]

blob: 32c4c120f85f87085c0b459fae60aad08165a78d [file] [log] [blame]
Dustin Lam864a56c92020-07-14 18:09:00 -07001#!/bin/bash
2
3function fn_aosp_ls {
4 CHANGE_ID=$1
5 curl -s "https://android-review.googlesource.com/changes/$CHANGE_ID?o=CURRENT_REVISION" | tail -n +2
6}
7
8function fn_aosp_checkout {
9 CHANGE_ID=$1
10 REPO_ID=`fn_aosp_ls $CHANGE_ID \
11 | jq "(._number|tostring) + \"/\" + (.revisions | to_entries[].value._number|tostring)"`
12
13 if [ -z $DEP_CHANGE_ID ]; then
14 echo "Failed to parse aosp command for Change-Id: $CHANGE_ID"
15 exit 1
16 fi
17
18 repo download "platform/frameworks/support" ${REPO_ID:1:-1} \
19 && BRANCH=`git log -1 | grep Change-Id | awk '{print $2}'` \
20 && git checkout -B "aosp/$BRANCH" \
Alan Viverette106ea082020-12-15 12:38:33 -050021 && git branch --set-upstream-to=aosp/androidx-main
Dustin Lam864a56c92020-07-14 18:09:00 -070022}
23
24function fn_aosp_merged {
25 CHANGE_ID=$1
26 echo $CHANGE_ID
27 fn_aosp_ls $CHANGE_ID
28}
29
30function fn_git_changeid {
31 BRANCH=$1
32 git log $BRANCH -1 | grep Change-Id | awk '{print $2}'
33}
34
35function fn_git_check_uncommitted_changes {
36 if [[ `git status --porcelain` ]]; then
37 echo "Uncommitted changes; exiting"
38 exit
39 fi
40}
41
42# Check that jq is installed.
43if [ -z `which jq` ]; then
44 echo "jq not installed; exiting"
45 exit
46fi
47
48if [[ -z "$1" ]] || [[ "$1" == "help" ]]; then
49 echo -n \
50"usage: aosp <command> [<args>]
51
52A 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.
53
54Commands:
55 help Display this help text
56 ls [<gerrit-email>] Query gerrit for open CLs; you must run this before aosp c. <gerrit-email> defaults to `whoami`@google.com
57 c <id> Force checkout a change in gerrit by the id returned from aosp ls command into a branch named `whoami`/<change-id>
58 prune Delete any branches whose HEAD has a Change-Id for a CL that has been MERGED or ABANDONED in Gerrit
59 r Checkout the latest patchset of HEAD~1's Change-Id, and cherry-pick HEAD ontop of it
60"
61elif [[ "$1" == "ls" ]]; then
62 OWNER="${2:-`whoami`@google.com}"
63 curl -s "https://android-review.googlesource.com/changes/?q=owner:$OWNER+status:open&o=CURRENT_REVISION" \
64 | tail -n +2 \
65 | jq -r ".[] | [._number, .subject, (.revisions | to_entries[].value._number), (.revisions[.current_revision].fetch.http | .url, .ref)] | @csv" \
66 | awk -F, '{ printf "%s,%s/%s,%s,%s,%s\n", NR, $1, $3, $2, $4, $5}' \
67 | column -t -s, \
68 | tee ~/.dustinlam_aosp
69elif [[ "$1" == "prune" ]]; then
70 git branch \
71 | grep -v "^\*" \
72 | awk '{print $1}' \
73 | while read line
74 do
Dustin Lam9f8d8cc2020-10-27 11:15:29 -070075 CHANGE_ID=`fn_git_changeid $line`
76 if [ ! -z "$CHANGE_ID" ]; then
77 STATUS=`fn_aosp_ls "$CHANGE_ID" | jq .status`
78 if [[ $STATUS == "\"MERGED\"" ]] || [[ $STATUS == "\"ABANDONED\"" ]]; then
79 git branch -D $line
80 fi
81 else
82 echo "Failed to prune $line due to missing Change-Id"
Dustin Lam864a56c92020-07-14 18:09:00 -070083 fi
84 done
85elif [[ "$1" == "c" ]]; then
86 fn_git_check_uncommitted_changes
87
88 PATCH=`cat ~/.dustinlam_aosp | sed -n "$2p" | awk '{print $2}'` \
89 && repo download "platform/frameworks/support" "$PATCH" \
90 && BRANCH=`git log -1 | grep Change-Id | awk '{print $2}'` \
91 && git checkout -B "`whoami`/$BRANCH" \
Alan Viverette106ea082020-12-15 12:38:33 -050092 && git branch --set-upstream-to=aosp/androidx-main
Dustin Lam864a56c92020-07-14 18:09:00 -070093elif [[ "$1" == "r" ]]; then
94 fn_git_check_uncommitted_changes
95
96 HEAD_COMMIT_HASH=`git rev-parse HEAD`
97 CURRENT_BRANCH=`git branch | grep \* | awk '{print $2}'`
98 DEP_CHANGE_ID=`git log --skip 1 -1 | grep Change-Id | awk '{print $2}'`
99 if [ -z $DEP_CHANGE_ID ]; then
100 echo "Dependent change is missing Change-Id"
101 exit 1
102 fi
103
104 fn_aosp_checkout $DEP_CHANGE_ID \
105 && git checkout -B $CURRENT_BRANCH \
106 && git cherry-pick $HEAD_COMMIT_HASH
107fi