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@xxxxxxxxx> --- 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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx