Skip to content

Instantly share code, notes, and snippets.

@jclulow
Created October 17, 2018 17:26
Show Gist options
  • Save jclulow/d1a721112c444354a1e8e9bbd664b453 to your computer and use it in GitHub Desktop.
Save jclulow/d1a721112c444354a1e8e9bbd664b453 to your computer and use it in GitHub Desktop.
#!/bin/bash
# vim: set ts=8 sts=8 sw=8 noet:
GERRIT_HOSTNAME=${GERRIT_HOSTNAME:-cr.joyent.us}
COLUMN_COUNT=${COLUMN_COUNT:-60}
#
# Detect the Gerrit username and project by listing the URLs for each
# remote and looking for one which matches our Gerrit hostname:
#
if ! git_config=$(git config --local --list); then
printf 'ERROR: could not get git config\n' >&2
exit 1
fi
url=
if ! url=$(/usr/bin/nawk -v pat="@$GERRIT_HOSTNAME:" '
BEGIN {
pushurl = 0;
url = 0;
}
{
FS = "=";
$0 = $0;
key = $1;
val = $2;
FS = ".";
$0 = $1;
}
NF == 3 && $1 == "remote" && $3 ~ "url$" &&
index(val, pat) != 0 {
if ($3 == "pushurl") {
pushurl = val;
} else {
url = val;
}
}
END {
if (!pushurl && !url) {
exit(1);
}
printf("%s", pushurl ? pushurl : url);
exit (0);
}
' <<< "$git_config") ; then #|| [[ -z $url ]]; then
printf 'ERROR: could not find a Gerrit remote\n' >&2
exit 1
fi
#
# Trim the username and project name out of the Gerrit remote URL:
#
url=${url%.git}
project=${url##*@${GERRIT_HOSTNAME}:}
user=${url%@${GERRIT_HOSTNAME}:*}
if [[ -n $V ]]; then
printf 'user: %s\n' "$user" >&2
printf 'project: %s\n' "$project" >&2
fi
query="status:open project:$project"
if [[ $1 != "-a" ]]; then
query="$query owner:$user"
fi
if ! res=$(ssh "$user@cr.joyent.us" gerrit query "$query"); then
printf 'ERROR: could not query gerrit\n' >&2
exit 1
fi
/usr/bin/nawk -v cc=$COLUMN_COUNT '
BEGIN {
count = 0;
}
/^change/ {
number = -1;
subject = 0;
}
$1 == "number:" {
number = $2
}
$1 == "subject:" {
subject = $0;
gsub(".*subject: ", "", subject);
extra = "";
if (length(subject) >= cc) {
extra = "...";
}
subject = substr(subject, 1, cc) "" extra;
}
/^$/ {
printf("%d -- %s\n", number, subject);
count++;
}
END {
if (count == 0) {
printf("no open reviews found!\n");
}
}
' <<< "$res"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment