Looking up the remote for deleting the branch is a bit an exercise.
v2: Correctly keep the fake remote name from nightly.conf and the real (local) remote name apart.
Signed-off-by: Daniel Vetter daniel.vetter@intel.com --- dim | 54 +++++++++++++++++++++++++++++++++++++++++++++--------- dim.rst | 5 ++++- 2 files changed, 49 insertions(+), 10 deletions(-)
diff --git a/dim b/dim index 1ab86d5a4ee9..f42b1eebf48b 100755 --- a/dim +++ b/dim @@ -654,7 +654,9 @@ function dim_create_branch echo "usage: $dim $subcommand branch [commit-ish]" exit 1 fi - branch=$1 + local branch=$1 + local nightly_remote="drm-intel" + if [[ "x$2" = "x" ]]; then start=HEAD else @@ -663,10 +665,19 @@ function dim_create_branch
cd $DIM_PREFIX/$DIM_DRM_INTEL
+ source $DIM_PREFIX/drm-rerere/nightly.conf + + if ( map_nightly_remote ${branch%%/*} ) &> /dev/null ; then + nightly_remote=${branch%%/*} + branch=${branch#*/} + fi + + local remote=`map_nightly_remote $nightly_remote` + $DRY git branch $branch $start - git push $DRY_RUN $DIM_DRM_INTEL_REMOTE +$branch --set-upstream + git push $DRY_RUN $remote +$branch --set-upstream cd $DIM_PREFIX/drm-rerere - $DRY echo "nightly_branches="$nightly_branches origin/$branch"" \ + $DRY echo "nightly_branches="$nightly_branches $nightly_remote/$branch"" \ >> nightly.conf $DRY git add nightly.conf $DRY git commit --quiet -m "Adding $branch to -nightly" @@ -678,23 +689,48 @@ function dim_remove_branch echo "usage: $dim $subcommand branch" exit 1 fi - branch=$1 + local branch=$1
cd $DIM_PREFIX/$DIM_DRM_INTEL
- if ! $DRY git branch -d $branch ; then - warn_or_fail "Can't remove $branch in working repo" + if [[ `git branch --list $branch` != "" ]] && + ! $DRY git branch -d $branch ; then + warn_or_fail "Can't remove $branch in working repo" fi
if [[ -d $DIM_PREFIX/$branch ]] ; then rm -R $DIM_PREFIX/$branch + git worktree prune &> /dev/null || true fi
cd $DIM_PREFIX/drm-tip - git push $DRY_RUN origin --delete $branch - $DRY git fetch origin --prune + + source $DIM_PREFIX/drm-rerere/nightly.conf + + local nightly_remote="" + + for tree in $nightly_branches; do + local nightly_branch=${tree%:*} + local nightly_remote=${nightly_branch%%/*} + nightly_branch=${nightly_branch#*/} + + if [[ $nightly_branch == $branch ]] ; then + nightly_remote=$nightly_remote + break + fi + done + + if [[ $nightly_remote == "" ]] ; then + echoerr "$branch not found in nightly.conf" + exit 1 + fi + + local remote=`map_nightly_remote $nightly_remote` + + git push $DRY_RUN $remote --delete $branch + $DRY git fetch $remote --prune cd $DIM_PREFIX/drm-rerere - full_branch="origin/$branch" + full_branch="$nightly_remote/$branch" $DRY sed -e "/${full_branch////\/}/d" -i nightly.conf $DRY git add nightly.conf $DRY git commit --quiet -m "Deleted $branch and removed from -nightly" diff --git a/dim.rst b/dim.rst index 171c71bfdb6d..886d94f9231c 100644 --- a/dim.rst +++ b/dim.rst @@ -283,7 +283,10 @@ create-branch *branch* [*commit-ish*] -------------------------------------
Create a new topic branch with the given name. Note that topic/ is not -automatically prepended. The branch starts at HEAD or the given commit-ish. +automatically prepended. The branch starts at HEAD or the given commit-ish. Note +that by default the new branch is created in the drm-intel.git repository. If +you want to create a branch somewhere else, then you need to prepend the remote +name from nigthly.conf, e.g. "drm-misc/topic/branch".
remove-branch *branch* ----------------------