Commit 5170422e authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Add support for orphan branches to git-supertree

parent cb640806
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -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 ...]]
@@ -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)' \
@@ -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
@@ -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"
@@ -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" ;;
@@ -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()