]> git.wh0rd.org - home.git/blobdiff - .bin/r
vcs-url: more updates
[home.git] / .bin / r
diff --git a/.bin/r b/.bin/r
index 003121a4edd3fc6aaa2d45d6a7b2eec9df69ba67..22628b4211e0c29c995befac6fbedd0cf02a6ac4 100755 (executable)
--- a/.bin/r
+++ b/.bin/r
@@ -3,6 +3,10 @@ g() { git "$@"; }
 err() { printf '%b\n' "$*" 1>&2; exit 1; }
 vr() { echo "$@"; "$@"; }
 
+case $1 in
+-x) set -x; shift;;
+esac
+
 case $1 in
 ""|-*) ;;
 l)
@@ -61,7 +65,12 @@ process_reviewers() {
        for r in ${*//,/ } ; do
                case ${r} in
                *OWNERS)
-                       local owners=$(awk -F'@' '{list = list "," $1} END {print substr(list, 2)}' "${r}")
+                       local owners=$(
+                               awk -F'@' '
+                                       ($2 == "chromium.org" || $2 == "google.com") {list = list "," $1}
+                                       END {print substr(list, 2)}
+                               ' "${r}"
+                       )
                        if [[ -z ${owners} ]] ; then
                                err "cannot find OWNERS list"
                        else
@@ -89,7 +98,10 @@ rebase)
                        while read -a line ; do
                                dir=${line[0]}
                                proj=${line[2]}
-                               cd "${root}/${dir}"
+                               if ! cd "${root}/${dir}" ; then
+                                       echo "bad ${proj}"
+                                       continue
+                               fi
                                (
                                out=$(env _proj=${proj} r rb all . 2>&1)
                                if [[ -n ${out} ]] ; then
@@ -99,7 +111,8 @@ rebase)
                                                        printf '%s### %s%-40s%s: %s\n' \
                                                                "${BRACKET}" "${GOOD}" "${line%%:*}" "${NORMAL}" "${line#*:}"
                                                else
-                                                       echo "${line}"
+                                                       printf '%s### %s%-40s%s: ERROR: %s\n' \
+                                                               "${BRACKET}" "${BAD}" "${dir}" "${NORMAL}" "${line}"
                                                fi
                                        done < <(echo "${out}")
                                fi
@@ -116,7 +129,7 @@ rebase)
                        {
                                if ($0 ~ "^[*] *[(]no branch[)]") {
                                        next
-                               } else if ($0 ~ "^[*] *[(]detached from ") {
+                               } else if ($0 ~ "^[*] *[(](HEAD )?detached (from|at) ") {
                                        next
                                } else if ($1 == "*") {
                                        b = $2
@@ -165,7 +178,15 @@ clean)
        mj_finish
        exit
        ;;
-sb-push)
+sb)
+       sb_cmd=$1
+       case ${sb_cmd} in
+       pull) ;;
+       push) ;;
+       f|fetch) sb_cmd="fetch" ;;
+       *) err "unknown sandbox command: $1"
+       esac
+
        sync_branch="v"
 
        root=$(repo_root)
@@ -194,8 +215,17 @@ sb-push)
                printf '### (%*i/%i %3i%%) %s\n' \
                        ${#tcnt} $((cnt++)) ${tcnt} $(( cnt * 100 / tcnt )) ${proj}
                src="${sync_branch}"
-               g l -1 ${src} >& /dev/null || src=
-               mj_child g push --force ${remote}/${proj} ${src}:refs/sandbox/${USER}/${sync_branch} >/dev/null
+               case ${sb_cmd} in
+               push)
+                       g l -1 ${src} >& /dev/null || src=
+                       mj_child g push --force ${remote}/${proj} ${src}:refs/sandbox/${USER}/${sync_branch} >/dev/null
+                       ;;
+               pull)
+                       ;;
+               fetch)
+                       mj_child g fetch ${remote}/${proj} refs/sandbox/${USER}/${sync_branch}:refs/remotes/sb/${sync_branch} >/dev/null
+                       ;;
+               esac
        done < <(echo "${rlist}")
        mj_finish
 
@@ -277,4 +307,4 @@ email)
        ;;
 esac
 
-exec repo ${acmd:-${cmd}} "$@"
+exec python2 $(type -P repo) ${acmd:-${cmd}} "$@"