[dim PATCH] dim: allow a space separated list of URLs for each repo in drm_tip_repos

Jani Nikula jani.nikula at intel.com
Thu Sep 28 14:51:47 UTC 2017


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 at 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



More information about the dri-devel mailing list