#!/bin/bash # # Edit URL of remote $1 using vipe(1) # warn() { echo "$@" >&2 } die() { warn "$@" exit 3 } usage() { warn "usage: git $(basename "$0") [-v|--verbose] REMOTE" exit 2 } think() { $verbose && echo "$@" } main() { local remote local oldurl local newurl local verbose=false while true; do case $1 in -v|--verbose) verbose=true; shift ;; -*) usage ;; *) break ;; esac done remote="$1" test -n "$remote" || usage command -v vipe >/dev/null \ || die "need vipe(1) from moreutils" think "remote='$remote'" oldurl=$(git remote get-url "$remote") \ || die "failed to get old URL" test "$newurl" == "$oldurl" && { warn "URL was not changed" return 1 } think "oldurl='$oldurl'" think "EDITOR='$EDITOR'" think "VISUAL='$VISUAL'" newurl=$(vipe <<<"$oldurl") \ || die "failed to edit URL (is vipe installed?)" think "newurl='$newurl'" git remote set-url "$remote" "$newurl" \ || die "failed to set new remote URL" } main "$@"