The goals here are multiple:
- simpler configuration through autodetection
- allows seamless upgrading to git worktree for the aux checkouts
- eventually I want to split up drm-misc into a separate remote ...

And yes this is just a start.

v2: Print errors to stderr, otherwise they can't be seen when directly
assigning the result of get_remote_name to a variable.

Signed-off-by: Daniel Vetter <daniel.vet...@intel.com>
---
 dim | 112 +++++++++++++++++++++++++++++++++++---------------------------------
 1 file changed, 58 insertions(+), 54 deletions(-)

diff --git a/dim b/dim
index 2601bb7dbbad..90eb553c6575 100755
--- a/dim
+++ b/dim
@@ -192,6 +192,24 @@ if [[ "$((`date +%s` % 100))" -eq "0" ]] ; then
         dim_uptodate
 fi
 
+function get_remote_name
+{
+       local remote_url=$1
+
+       local remote=`git remote -v | grep $remote_url | \
+               head -n1 | sed -e 's/^\(.*\)\t.*/\1/'`
+
+       if [[ $remote == "" ]] ; then
+               echoerr No git remote for $remote_url found in `pwd`.
+               echoerr Please set it up using
+               echoerr     $ git remote add '<name>' $remote_url
+               echoerr with a name of your choice.
+               exit 1
+       fi
+
+       echo $remote
+}
+
 # get message id from file
 # $1 = file
 message_get_id ()
@@ -1044,8 +1062,36 @@ function dim_update_branches
        update_rerere_cache
 }
 
+function setup_aux_checkout # name remote
+{
+       local name=$1
+       local remote_url=$2
+       local dir=$3
+       local remote
+
+       echo "Setting up $dir ..."
+
+       if [ ! -d $dir ]; then
+               git clone --reference=$DIM_PREFIX/$DIM_DRM_INTEL/.git 
$remote_url $dir
+               cd $dir
+               git config remote.origin.url $remote_url
+               echo "$DIM_PREFIX/$DIM_DRM_INTEL/.git/objects" > 
.git/objects/info/alternates
+               git repack -a -d -l
+               remote=origin
+       else
+               cd $dir
+               remote=`get_remote_name $drm_intel_ssh`
+       fi
+       if ! git branch | grep $name > /dev/null ; then
+               git checkout -t $remote/$name
+       fi
+       cd ..
+}
+
 function dim_setup
 {
+       local remote
+
        if [ ! -d $DIM_PREFIX ]; then
                echo "please set up your repository directory with:"
                echo "    mkdir -p $DIM_PREFIX"
@@ -1062,76 +1108,34 @@ function dim_setup
                exit 1
        fi
        cd $DIM_DRM_INTEL
-       if ! git remote -v | grep "^origin[[:space:]]" | grep 
$linux_upstream_git > /dev/null; then
-               echo "please set up remote origin for $linux_upstream_git"
-               exit 1
-       fi
-       if ! git remote -v | grep "^$DIM_DRM_INTEL_REMOTE[[:space:]]" | grep 
$drm_intel_ssh > /dev/null; then
-               echo "please set up remote $DIM_DRM_INTEL_REMOTE for 
$drm_intel_ssh with:"
-               echo "    git remote add $DIM_DRM_INTEL_REMOTE $drm_intel_ssh"
-               echo "or update your configuration."
-               exit 1
-       fi
-       if ! git remote -v | grep "^$DIM_DRM_UPSTREAM_REMOTE[[:space:]]" | grep 
$drm_upstream_git > /dev/null; then
-               echo "please set up remote $DIM_DRM_UPSTREAM_REMOTE for 
$drm_upstream_git with:"
-               echo "    git remote add $DIM_DRM_UPSTREAM_REMOTE 
$drm_upstream_git"
-               echo "or update your configuration."
-               exit 1
-       fi
-       cd ..
 
-       echo "Setting up maintainer-tools ..."
-       if [ ! -d maintainer-tools ]; then
-               git clone --reference=$DIM_PREFIX/$DIM_DRM_INTEL/.git 
$drm_intel_ssh maintainer-tools
-       fi
-       cd maintainer-tools
-       git config remote.origin.url $drm_intel_ssh
-       echo "$DIM_PREFIX/$DIM_DRM_INTEL/.git/objects" > 
.git/objects/info/alternates
-       git repack -a -d -l
-       if ! git branch | grep maintainer-tools > /dev/null ; then
-               git checkout -t origin/maintainer-tools
-       fi
-       cd ..
+       # check remote configuration
+       remote=`get_remote_name $linux_upstream_git`
+       remote=`get_remote_name $drm_intel_ssh`
+       remote=`get_remote_name $drm_upstream_git`
 
-       echo "Setting up drm-intel-rerere ..."
-       if [ ! -d drm-intel-rerere ]; then
-               git clone --reference=$DIM_PREFIX/$DIM_DRM_INTEL/.git 
$drm_intel_ssh drm-intel-rerere
-       fi
-       cd drm-intel-rerere
-       git config remote.origin.url $drm_intel_ssh
-       echo "$DIM_PREFIX/$DIM_DRM_INTEL/.git/objects" > 
.git/objects/info/alternates
-       git repack -a -d -l
-       if ! git branch | grep rerere-cache > /dev/null ; then
-               git checkout -t origin/rerere-cache
-       fi
        cd ..
 
-       echo "Setting up drm-intel-nightly ..."
-       if [ ! -d drm-intel-nightly ]; then
-               git clone --reference=$DIM_PREFIX/$DIM_DRM_INTEL/.git 
$drm_intel_ssh drm-intel-nightly
-       fi
+       setup_aux_checkout maintainer-tools $drm_intel_ssh maintainer-tools
+
+       setup_aux_checkout rerere-cache $drm_intel_ssh drm-intel-rerere
+
+       setup_aux_checkout drm-intel-nightly $drm_intel_ssh drm-intel-nightly
        cd drm-intel-nightly
-       mkdir -p .git/rr-cache
-       git config remote.origin.url $drm_intel_ssh
-       echo "$DIM_PREFIX/$DIM_DRM_INTEL/.git/objects" > 
.git/objects/info/alternates
-       git repack -a -d -l
-       if ! git branch | grep drm-intel-nightly > /dev/null ; then
-               git checkout -t origin/drm-intel-nightly
-       fi
        if git remote | grep drm-upstream > /dev/null ; then
                git config remote.drm-upstream.url $drm_upstream_git
        else
-               git remote add drm-upstream $drm_upstream_git
+               remote=`get_remote_name $drm_upstream_git`
        fi
        if git remote | grep sound-upstream > /dev/null ; then
                git config remote.sound-upstream.url $sound_upstream_git
        else
-               git remote add sound-upstream $sound_upstream_git
+               remote=`get_remote_name $sound_upstream_git`
        fi
        if git remote | grep driver-core-upstream > /dev/null ; then
                git config remote.driver-core-upstream.url 
$driver_core_upstream_git
        else
-               git remote add driver-core-upstream $driver_core_upstream_git
+               remote=`get_remote_name $driver_core_upstream_git`
        fi
 
        echo "dim setup successfully completed!"
-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to