Loading bin/git-supertree +12 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ set -eu shopt -s nullglob shopt -s dotglob [[ -v DEBUG ]] && set -x || true SCRIPT=$(basename $0) USAGE="Usage: $SCRIPT [-h] {init|clone|convert|add} [OPTION [OPTION ...]] Loading Loading @@ -178,7 +179,7 @@ get_remote_head() new_worktree() { local WORKTREE=$1 BRANCH=$(git rev-parse --symbolic-full-name "$2" 2>/dev/null) local FROM=$3 HEAD local HEAD=$(git symbolic-ref HEAD) declare -a BRANCH_REMOTES=( $(git for-each-ref \ --format='%(refname)' \ Loading @@ -186,8 +187,8 @@ new_worktree() ) ) if [[ -n "$FROM" ]] && branch_exists "$BRANCH"; then arg_error "$BRANCH already exists, did you mean to use --from?" if [[ -v FROM ]] && branch_exists "$BRANCH"; then arg_error "$BRANCH already exists, did you intend to use --from?" fi # minimal manual worktree creation Loading @@ -200,16 +201,18 @@ new_worktree() echo "ref: refs/null" > "$WT_REPO/HEAD" if [[ "$BRANCH" = $(git symbolic-ref HEAD) ]]; then if [[ "$BRANCH" = "$HEAD" ]]; then echo "ref: $BRANCH" > "$WT_REPO/HEAD" (cd "$WORKTREE"; exec git reset --hard) elif branch_exists "$BRANCH"; then (cd "$WORKTREE"; exec git checkout $(git for-each-ref "$BRANCH" --format='%(refname:short)') ) elif [[ -n "$FROM" ]]; then elif [[ -v FROM ]]; then (cd "$WORKTREE"; exec git checkout -b "$BRANCH" "$FROM") elif [[ -v ORPHAN ]]; then (cd "$WORKTREE"; exec git checkout --orphan "$BRANCH") elif [[ ${#BRANCH_REMOTES[*]} -eq 1 ]]; then (cd "$WORKTREE"; exec git checkout -b "$BRANCH" "$BRANCH_REMOTES") elif branch_exists "${HEAD:=$(git symbolic-ref HEAD)}"; then elif branch_exists "$HEAD"; then (cd "$WORKTREE"; exec git checkout -b "$BRANCH" "$HEAD") else echo "ref: $BRANCH" > "$WT_REPO/HEAD" Loading Loading @@ -345,10 +348,11 @@ action_convert() action_add() { local BRANCH_SPEC FROM local BRANCH_SPEC FROM ORPHAN while [[ $# -gt 0 ]]; do case $1 in --from) FROM=$2; shift ;; --orphan) ORPHAN=yes ;; *) case '' in ${BRANCH_SPEC-}) BRANCH_SPEC=$1 ;; *) arg_error "Unknown argument: $1" ;; Loading @@ -370,7 +374,7 @@ action_add() die "$BRANCH_PATH exists, but is not a worktree" fi new_worktree "$BRANCH_PATH" "$BRANCH_NAME" "${FROM-}" new_worktree "$BRANCH_PATH" "$BRANCH_NAME" } action_rm() Loading Loading
bin/git-supertree +12 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ set -eu shopt -s nullglob shopt -s dotglob [[ -v DEBUG ]] && set -x || true SCRIPT=$(basename $0) USAGE="Usage: $SCRIPT [-h] {init|clone|convert|add} [OPTION [OPTION ...]] Loading Loading @@ -178,7 +179,7 @@ get_remote_head() new_worktree() { local WORKTREE=$1 BRANCH=$(git rev-parse --symbolic-full-name "$2" 2>/dev/null) local FROM=$3 HEAD local HEAD=$(git symbolic-ref HEAD) declare -a BRANCH_REMOTES=( $(git for-each-ref \ --format='%(refname)' \ Loading @@ -186,8 +187,8 @@ new_worktree() ) ) if [[ -n "$FROM" ]] && branch_exists "$BRANCH"; then arg_error "$BRANCH already exists, did you mean to use --from?" if [[ -v FROM ]] && branch_exists "$BRANCH"; then arg_error "$BRANCH already exists, did you intend to use --from?" fi # minimal manual worktree creation Loading @@ -200,16 +201,18 @@ new_worktree() echo "ref: refs/null" > "$WT_REPO/HEAD" if [[ "$BRANCH" = $(git symbolic-ref HEAD) ]]; then if [[ "$BRANCH" = "$HEAD" ]]; then echo "ref: $BRANCH" > "$WT_REPO/HEAD" (cd "$WORKTREE"; exec git reset --hard) elif branch_exists "$BRANCH"; then (cd "$WORKTREE"; exec git checkout $(git for-each-ref "$BRANCH" --format='%(refname:short)') ) elif [[ -n "$FROM" ]]; then elif [[ -v FROM ]]; then (cd "$WORKTREE"; exec git checkout -b "$BRANCH" "$FROM") elif [[ -v ORPHAN ]]; then (cd "$WORKTREE"; exec git checkout --orphan "$BRANCH") elif [[ ${#BRANCH_REMOTES[*]} -eq 1 ]]; then (cd "$WORKTREE"; exec git checkout -b "$BRANCH" "$BRANCH_REMOTES") elif branch_exists "${HEAD:=$(git symbolic-ref HEAD)}"; then elif branch_exists "$HEAD"; then (cd "$WORKTREE"; exec git checkout -b "$BRANCH" "$HEAD") else echo "ref: $BRANCH" > "$WT_REPO/HEAD" Loading Loading @@ -345,10 +348,11 @@ action_convert() action_add() { local BRANCH_SPEC FROM local BRANCH_SPEC FROM ORPHAN while [[ $# -gt 0 ]]; do case $1 in --from) FROM=$2; shift ;; --orphan) ORPHAN=yes ;; *) case '' in ${BRANCH_SPEC-}) BRANCH_SPEC=$1 ;; *) arg_error "Unknown argument: $1" ;; Loading @@ -370,7 +374,7 @@ action_add() die "$BRANCH_PATH exists, but is not a worktree" fi new_worktree "$BRANCH_PATH" "$BRANCH_NAME" "${FROM-}" new_worktree "$BRANCH_PATH" "$BRANCH_NAME" } action_rm() Loading