On Tue, 18 Oct 2016, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> 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.vetter at 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/'`

'cut -f 1' seems cleaner than the sed.

> +
> +     if [[ $remote == "" ]] ; then

I'd prefer

        if [[ -z "$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.

I'm fond of wrapping the strings in double quotes. Gives me nicer
highlighting in the editor. ;)

Otherwise seems nice.

BR,
Jani.

> +             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!"

-- 
Jani Nikula, Intel Open Source Technology Center

Reply via email to