This lets us configure a space separated list of URLs for each repo in drm_tip_repos, with all accepted protocols and sources, and the first one found gets picked. This way we don't have to have a complicated set of rules for converting between ssh, git and https protocol URLs. Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> --- !!! UNTESTED !!! --- dim | 97 +++++++++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 34 deletions(-) diff --git a/dim b/dim index c6c746cdb154..d2f165893161 100755 --- a/dim +++ b/dim @@ -255,44 +255,73 @@ fi # The below functions map between these. # -function url_to_remote # url +function url_to_remote # url [url ...] { local url remote - url="$1" - - if [[ -z "$url" ]]; then - echoerr "$0 without url" + if [[ "$#" = "0" ]]; then + echoerr "url_to_remote without URLs" return 1 fi - remote=$(git remote -v | grep -m 1 "$url" | cut -f 1) - - if [[ -z "$remote" ]]; then - git_url=$(echo $url | sed -e 's/git\./anongit./' -e 's/ssh:/git:/') - remote=$(git remote -v | grep -m 1 "$git_url" | cut -f 1) + for url; do + remote=$(git remote -v | grep -m 1 "$url" | cut -f 1) + if [[ -n "$remote" ]]; then + echo "$remote" + return 0 + fi + done - if [[ -z "$remote" ]]; then - echoerr "No git remote for url $url or $git_url found in $(pwd)" - remote=${url%.git} - remote=${remote##*/} - read -r -i "$remote" -e -p "Enter a name to auto-add this remote, leave blank to abort: " || true - if [[ "$REPLY" == "" ]] ; then - echoerr "Please set it up yourself using:" - echoerr " $ git remote add <name> $url" - echoerr "with a name of your choice." - exit 1 - fi + echoerr "No git remote for any of the URLs $* found in $(pwd)" - git remote add $remote $url - fi + url=$1 + remote=${url%.git} + remote=${remote##*/} + read -r -i "$remote" -e -p "Enter a name to auto-add this remote, leave blank to abort: " || true + if [[ "$REPLY" == "" ]] ; then + echoerr "Please set it up yourself using:" + echoerr " $ git remote add <name> $url" + echoerr "with a name of your choice." + exit 1 fi + git remote add $remote $url + echo $remote return 0 } +function url_to_git_url # url [url ...] +{ + local url git_url + + if [[ "$#" = "0" ]]; then + echoerr "url_to_git_url without URLs" + return 1 + fi + + # Find the git:// URL, converting from ssh:// URL as fallback + for url; do + case $url in + git://*) + git_url=$url + break + ;; + ssh://*) + git_url=$(echo $url | sed -e 's/git\./anongit./' -e 's/ssh:/git:/') + ;; + esac + done + + if [[ -z "$git_url" ]]; then + echoerr "No git or ssh URL in any of the URLs $*" + return 1 + fi + + echo $git_url +} + function branch_to_remote # branch { local branch remote @@ -595,7 +624,7 @@ function commit_rerere_cache function dim_rebuild_tip { - local integration_branch specfile time first rerere repo url remote + local integration_branch specfile time first rerere repo url_list remote integration_branch=drm-tip specfile=$(mktemp) @@ -627,8 +656,8 @@ function dim_rebuild_tip echo "Done." for repo in "${!drm_tip_repos[@]}"; do - url=${drm_tip_repos[$repo]} - remote=$(url_to_remote $url) + url_list=${drm_tip_repos[$repo]} + remote=$(url_to_remote $url_list) echo -n "Fetching $repo (local remote $remote)... " git_fetch_helper $remote echo "Done." @@ -639,8 +668,8 @@ function dim_rebuild_tip local branch override sha1 fixup_file read -r repo branch override <<< $conf - url=${drm_tip_repos[$repo]} - remote=$(url_to_remote $url) + url_list=${drm_tip_repos[$repo]} + remote=$(url_to_remote $url_list) sha1=$remote/$branch echo -n "Merging $repo (local remote $remote) $branch... " @@ -1641,7 +1670,7 @@ function prep_pull_tag_summary # dim_pull_request branch upstream function dim_pull_request { - local branch upstream remote repo req_file url git_url suffix tag + local branch upstream remote repo req_file url_list git_url suffix tag branch=${1:?$usage} upstream=${2:?$usage} @@ -1679,8 +1708,8 @@ function dim_pull_request repo=$(branch_to_repo $branch) fi - url=${drm_tip_repos[$repo]} - git_url=$(echo $url | sed -e 's/git\./anongit./' -e 's/ssh:/git:/') + url_list=${drm_tip_repos[$repo]} + git_url=$(url_to_git_url $url_list) git request-pull $upstream $git_url $tag >> $req_file $DRY $DIM_MUA -s "[PULL] $branch" \ @@ -1729,7 +1758,7 @@ function dim_list_branches dim_alias_ub=update-branches function dim_update_branches { - local repo remote + local repo remote url_list cd $DIM_PREFIX/$DIM_DRM_INTEL @@ -1740,8 +1769,8 @@ function dim_update_branches fi for repo in "${!drm_tip_repos[@]}"; do - url=${drm_tip_repos[$repo]} - if ! remote=$(url_to_remote $url 2>/dev/null); then + url_list=${drm_tip_repos[$repo]} + if ! remote=$(url_to_remote $url_list 2>/dev/null); then continue fi echo -n "Fetching $repo (local remote $remote)... " -- 2.11.0 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel