function jj-clone --description "Clone a repo into a jj workspace layout with a colocated main" if test (count $argv) -eq 0 echo "Usage: jj-clone [directory]" return 1 end set -l url $argv[1] set -l project_dir if test (count $argv) -ge 2 set project_dir $argv[2] end # Create a local temp directory and cd into it # jj will create the repo directory inside here based on the URL set -l temp_dir (mktemp -d -p . jj-clone.XXXXXX) # Clone without destination - jj creates directory based on URL # Use pushd to run in the temp directory pushd "$temp_dir" jj git clone "$url" set -l clone_status $status popd if test $clone_status -ne 0 rm -rf "$temp_dir" return 1 end # jj creates exactly one directory inside temp_dir set -l repo_dirs (ls -d $temp_dir/*/ 2>/dev/null) set -l repo_dir_count (count $repo_dirs) if test $repo_dir_count -ne 1 echo "error: unexpected clone result (expected 1 directory, found $repo_dir_count)" rm -rf "$temp_dir" return 1 end # If no explicit directory name provided, use the name jj chose if test -z "$project_dir" set project_dir (basename "$repo_dirs") end if test -d "$project_dir" echo "error: directory '$project_dir' already exists" rm -rf "$temp_dir" return 1 end # Create workspace layout: project_dir/main/ mkdir -p "$project_dir" mv "$repo_dirs" "$project_dir/main" rmdir "$temp_dir" cd "$project_dir/main" end