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.nik...@intel.com>

---

!!! 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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to