diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh --- a/tools/tools/git/git-arc.sh +++ b/tools/tools/git/git-arc.sh @@ -229,7 +229,7 @@ diff2status() { - local diff tmp phid status status_color status_name summary term_color + local diff phid status status_color status_name summary term_color diff=$1 if ! expr "$diff" : 'D[1-9][0-9]*$' >/dev/null; then @@ -237,11 +237,11 @@ fi tmp=$(mktemp) + trap cleanup EXIT HUP INT QUIT TRAP USR1 TERM echo '{"names":["'"$diff"'"]}' | arc_call_conduit -- phid.lookup > "$tmp" phid=$(jq -r ".response[].phid" "$tmp") if [ -z "$phid" ] || [ "$phid" = "null" ]; then - rm -f "$tmp" err "invalid Phabricator ID for ${diff}" fi @@ -255,7 +255,6 @@ summary=$(jq -r "select(.response != []) | .response.${diff}.fullName" < "$tmp") printf "${term_color}%-15s\033[0m %s\n" "${status_name}" "${summary}" - rm -f "$tmp" } log2diff() @@ -315,8 +314,7 @@ create_one_review() { - local childphid commit doprompt msg parent parentphid reviewers - local subscribers + local childphid commit doprompt parent parentphid reviewers subscribers commit=$1 reviewers=$2 @@ -329,6 +327,7 @@ fi msg=$(mktemp) + trap cleanup EXIT HUP INT QUIT TRAP USR1 TERM git show -s --format='%B' "$commit" > "$msg" printf "\nTest Plan:\n" >> "$msg" printf "\nReviewers:\n" >> "$msg" @@ -357,7 +356,6 @@ ]}' | arc_call_conduit -- differential.revision.edit >&3 fi - rm -f "$msg" return 0 } @@ -591,31 +589,32 @@ patch_commit() { - local diff reviewid review_data authorid user_data user_addr user_name author - local tmp author_addr author_name + local diff reviewid review_data authorid user_data user_addr user_name + local diff_data author_addr author_name author tmp diff=$1 reviewid=$(diff2phid "$diff") + tmp_data_dir=$(mktemp -d) + trap cleanup EXIT HUP INT QUIT TRAP USR1 TERM # Get the author phid for this patch - review_data=$(mktemp) + review_data="${tmp_data_dir}/review" echo '{"constraints": {"phids": ["'"$reviewid"'"]}}' | \ arc_call_conduit -- differential.revision.search > "$review_data" authorid=$(jq -r '.response.data[].fields.authorPHID' "$review_data") # Get metadata about the user that submitted this patch - user_data=$(mktemp) + user_data="${tmp_data_dir}/user" echo '{"constraints": {"phids": ["'"$authorid"'"]}}' | \ arc_call_conduit -- user.search | \ jq -r '.response.data[].fields' > "$user_data" user_addr=$(jq -r '.username' "$user_data") user_name=$(jq -r '.realName' "$user_data") - rm "$user_data" # Dig the data out of querydiffs api endpoint, although it's deprecated, # since it's one of the few places we can get email addresses. It's unclear # if we can expect multiple difference ones of these. Some records don't # have this data, so we remove all the 'null's. We sort the results and # remove duplicates 'just to be sure' since we've not seen multiple # records that match. - diff_data=$(mktemp) + diff_data="${tmp_data_dir}/diff" echo '{"revisionIDs": [ '"${diff#D}"' ]}' | \ arc_call_conduit -- differential.querydiffs | jq -r '.response | flatten | .[]' > "$diff_data" @@ -632,7 +631,6 @@ fi author=$(find_author "$user_addr" "$user_name" "$author_addr" "$author_name") - rm "$diff_data" # If we had to guess, and the user didn't want to guess, abort if [ "${author}" = "ABORT" ]; then @@ -640,12 +638,11 @@ exit 1 fi - tmp=$(mktemp) + tmp="${tmp_data_dir}/tmp" jq -r '.response.data[].fields.title' "$review_data" > $tmp echo >> $tmp jq -r '.response.data[].fields.summary' "$review_data" >> $tmp echo >> $tmp - rm "$review_data" # XXX this leaves an extra newline in some cases. reviewers=$(diff2reviewers "$diff" | sed '/^$/d' | paste -sd ',' - | sed 's/,/, /g') if [ -n "$reviewers" ]; then @@ -654,7 +651,6 @@ # XXX TODO refactor with gitarc__stage maybe? printf "Differential Revision:\thttps://reviews.freebsd.org/%s\n" "${diff}" >> "$tmp" git commit --author "${author}" --file "$tmp" - rm "$tmp" } gitarc__patch() @@ -691,7 +687,7 @@ gitarc__stage() { - local author branch commit commits diff reviewers title tmp + local author branch commit commits diff reviewers title branch=main while getopts b: o; do @@ -715,6 +711,7 @@ fi tmp=$(mktemp) + trap cleanup EXIT HUP INT QUIT TRAP USR1 TERM for commit in $commits; do git show -s --format=%B "$commit" > "$tmp" title=$(git show -s --format=%s "$commit") @@ -794,6 +791,14 @@ done } +cleanup() +{ + rc=$? + rm -fr "$msg" "$tmp" "$tmp_data_dir" + trap - EXIT + exit $rc +} + set -e ASSUME_YES=