|
|
|
@ -12,6 +12,16 @@ setup() { |
|
|
|
|
cp -rp "$T_DIR_REPO" "$T_DIR_REMOTE" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
create_bootstrap() { |
|
|
|
|
make_parents "$T_YADM_BOOTSTRAP" |
|
|
|
|
{ |
|
|
|
|
echo "#!/bin/bash" |
|
|
|
|
echo "echo Bootstrap successful" |
|
|
|
|
echo "exit 123" |
|
|
|
|
} > "$T_YADM_BOOTSTRAP" |
|
|
|
|
chmod a+x "$T_YADM_BOOTSTRAP" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@test "Command 'clone' (bad remote)" { |
|
|
|
|
echo " |
|
|
|
|
When 'clone' command is provided, |
|
|
|
@ -193,3 +203,240 @@ setup() { |
|
|
|
|
[[ "$stashed_conflicts" =~ \+conflict ]] |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@test "Command 'clone' (force bootstrap, missing)" { |
|
|
|
|
echo " |
|
|
|
|
When 'clone' command is provided, |
|
|
|
|
with the --bootstrap parameter |
|
|
|
|
and bootstrap does not exists |
|
|
|
|
Create new repo with attributes: |
|
|
|
|
- 0600 permissions |
|
|
|
|
- not bare |
|
|
|
|
- worktree = \$YADM_WORK |
|
|
|
|
- showUntrackedFiles = no |
|
|
|
|
- yadm.managed = true |
|
|
|
|
Report the repo as cloned |
|
|
|
|
A remote named origin exists |
|
|
|
|
Exit with 0 |
|
|
|
|
" |
|
|
|
|
|
|
|
|
|
#; remove existing worktree and repo |
|
|
|
|
rm -rf "$T_DIR_WORK" |
|
|
|
|
mkdir -p "$T_DIR_WORK" |
|
|
|
|
rm -rf "$T_DIR_REPO" |
|
|
|
|
|
|
|
|
|
#; run clone |
|
|
|
|
run "${T_YADM_Y[@]}" clone --bootstrap -w "$T_DIR_WORK" "$REMOTE_URL" |
|
|
|
|
|
|
|
|
|
#; validate status and output |
|
|
|
|
[ "$status" -eq 0 ] |
|
|
|
|
[[ "$output" =~ Initialized ]] |
|
|
|
|
|
|
|
|
|
#; validate repo attributes |
|
|
|
|
test_perms "$T_DIR_REPO" "drw.--.--." |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.bare false |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" yadm.managed true |
|
|
|
|
|
|
|
|
|
#; test the remote |
|
|
|
|
local remote_output |
|
|
|
|
remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) |
|
|
|
|
[ "$remote_output" = "origin" ] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@test "Command 'clone' (force bootstrap, existing)" { |
|
|
|
|
echo " |
|
|
|
|
When 'clone' command is provided, |
|
|
|
|
with the --bootstrap parameter |
|
|
|
|
and bootstrap exists |
|
|
|
|
Create new repo with attributes: |
|
|
|
|
- 0600 permissions |
|
|
|
|
- not bare |
|
|
|
|
- worktree = \$YADM_WORK |
|
|
|
|
- showUntrackedFiles = no |
|
|
|
|
- yadm.managed = true |
|
|
|
|
Report the repo as cloned |
|
|
|
|
A remote named origin exists |
|
|
|
|
Run the bootstrap |
|
|
|
|
Exit with bootstrap's exit code |
|
|
|
|
" |
|
|
|
|
|
|
|
|
|
#; remove existing worktree and repo |
|
|
|
|
rm -rf "$T_DIR_WORK" |
|
|
|
|
mkdir -p "$T_DIR_WORK" |
|
|
|
|
rm -rf "$T_DIR_REPO" |
|
|
|
|
|
|
|
|
|
#; create the bootstrap |
|
|
|
|
create_bootstrap |
|
|
|
|
|
|
|
|
|
#; run clone |
|
|
|
|
run "${T_YADM_Y[@]}" clone --bootstrap -w "$T_DIR_WORK" "$REMOTE_URL" |
|
|
|
|
|
|
|
|
|
#; validate status and output |
|
|
|
|
[ "$status" -eq 123 ] |
|
|
|
|
[[ "$output" =~ Initialized ]] |
|
|
|
|
[[ "$output" =~ Bootstrap\ successful ]] |
|
|
|
|
|
|
|
|
|
#; validate repo attributes |
|
|
|
|
test_perms "$T_DIR_REPO" "drw.--.--." |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.bare false |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" yadm.managed true |
|
|
|
|
|
|
|
|
|
#; test the remote |
|
|
|
|
local remote_output |
|
|
|
|
remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) |
|
|
|
|
[ "$remote_output" = "origin" ] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@test "Command 'clone' (prevent bootstrap)" { |
|
|
|
|
echo " |
|
|
|
|
When 'clone' command is provided, |
|
|
|
|
with the --no-bootstrap parameter |
|
|
|
|
and bootstrap exists |
|
|
|
|
Create new repo with attributes: |
|
|
|
|
- 0600 permissions |
|
|
|
|
- not bare |
|
|
|
|
- worktree = \$YADM_WORK |
|
|
|
|
- showUntrackedFiles = no |
|
|
|
|
- yadm.managed = true |
|
|
|
|
Report the repo as cloned |
|
|
|
|
A remote named origin exists |
|
|
|
|
Do NOT run bootstrap |
|
|
|
|
Exit with 0 |
|
|
|
|
" |
|
|
|
|
|
|
|
|
|
#; remove existing worktree and repo |
|
|
|
|
rm -rf "$T_DIR_WORK" |
|
|
|
|
mkdir -p "$T_DIR_WORK" |
|
|
|
|
rm -rf "$T_DIR_REPO" |
|
|
|
|
|
|
|
|
|
#; create the bootstrap |
|
|
|
|
create_bootstrap |
|
|
|
|
|
|
|
|
|
#; run clone |
|
|
|
|
run "${T_YADM_Y[@]}" clone --no-bootstrap -w "$T_DIR_WORK" "$REMOTE_URL" |
|
|
|
|
|
|
|
|
|
#; validate status and output |
|
|
|
|
[ "$status" -eq 0 ] |
|
|
|
|
[[ $output =~ Initialized ]] |
|
|
|
|
[[ ! $output =~ Bootstrap\ successful ]] |
|
|
|
|
|
|
|
|
|
#; validate repo attributes |
|
|
|
|
test_perms "$T_DIR_REPO" "drw.--.--." |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.bare false |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" yadm.managed true |
|
|
|
|
|
|
|
|
|
#; test the remote |
|
|
|
|
local remote_output |
|
|
|
|
remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) |
|
|
|
|
[ "$remote_output" = "origin" ] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@test "Command 'clone' (existing bootstrap, answer n)" { |
|
|
|
|
echo " |
|
|
|
|
When 'clone' command is provided, |
|
|
|
|
and bootstrap exists |
|
|
|
|
Create new repo with attributes: |
|
|
|
|
- 0600 permissions |
|
|
|
|
- not bare |
|
|
|
|
- worktree = \$YADM_WORK |
|
|
|
|
- showUntrackedFiles = no |
|
|
|
|
- yadm.managed = true |
|
|
|
|
Report the repo as cloned |
|
|
|
|
A remote named origin exists |
|
|
|
|
Do NOT run bootstrap |
|
|
|
|
Exit with 0 |
|
|
|
|
" |
|
|
|
|
|
|
|
|
|
#; remove existing worktree and repo |
|
|
|
|
rm -rf "$T_DIR_WORK" |
|
|
|
|
mkdir -p "$T_DIR_WORK" |
|
|
|
|
rm -rf "$T_DIR_REPO" |
|
|
|
|
|
|
|
|
|
#; create the bootstrap |
|
|
|
|
create_bootstrap |
|
|
|
|
|
|
|
|
|
#; run clone |
|
|
|
|
run expect <<EOF |
|
|
|
|
set timeout 2; |
|
|
|
|
spawn ${T_YADM_Y[*]} clone -w "$T_DIR_WORK" "$REMOTE_URL"; |
|
|
|
|
expect "Would you like to execute it now" {send "n\n"} |
|
|
|
|
expect "$" |
|
|
|
|
foreach {pid spawnid os_error_flag value} [wait] break |
|
|
|
|
exit \$value |
|
|
|
|
EOF |
|
|
|
|
|
|
|
|
|
#; validate status and output |
|
|
|
|
[ "$status" -eq 0 ] |
|
|
|
|
[[ "$output" =~ Initialized ]] |
|
|
|
|
[[ ! "$output" =~ Bootstrap\ successful ]] |
|
|
|
|
|
|
|
|
|
#; validate repo attributes |
|
|
|
|
test_perms "$T_DIR_REPO" "drw.--.--." |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.bare false |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" yadm.managed true |
|
|
|
|
|
|
|
|
|
#; test the remote |
|
|
|
|
local remote_output |
|
|
|
|
remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) |
|
|
|
|
[ "$remote_output" = "origin" ] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@test "Command 'clone' (existing bootstrap, answer y)" { |
|
|
|
|
echo " |
|
|
|
|
When 'clone' command is provided, |
|
|
|
|
and bootstrap exists |
|
|
|
|
Create new repo with attributes: |
|
|
|
|
- 0600 permissions |
|
|
|
|
- not bare |
|
|
|
|
- worktree = \$YADM_WORK |
|
|
|
|
- showUntrackedFiles = no |
|
|
|
|
- yadm.managed = true |
|
|
|
|
Report the repo as cloned |
|
|
|
|
A remote named origin exists |
|
|
|
|
Run the bootstrap |
|
|
|
|
Exit with bootstrap's exit code |
|
|
|
|
" |
|
|
|
|
|
|
|
|
|
#; remove existing worktree and repo |
|
|
|
|
rm -rf "$T_DIR_WORK" |
|
|
|
|
mkdir -p "$T_DIR_WORK" |
|
|
|
|
rm -rf "$T_DIR_REPO" |
|
|
|
|
|
|
|
|
|
#; create the bootstrap |
|
|
|
|
create_bootstrap |
|
|
|
|
|
|
|
|
|
#; run clone |
|
|
|
|
run expect <<EOF |
|
|
|
|
set timeout 2; |
|
|
|
|
spawn ${T_YADM_Y[*]} clone -w "$T_DIR_WORK" "$REMOTE_URL"; |
|
|
|
|
expect "Would you like to execute it now" {send "y\n"} |
|
|
|
|
expect "$" |
|
|
|
|
foreach {pid spawnid os_error_flag value} [wait] break |
|
|
|
|
exit \$value |
|
|
|
|
EOF |
|
|
|
|
|
|
|
|
|
#; validate status and output |
|
|
|
|
[ "$status" -eq 123 ] |
|
|
|
|
[[ "$output" =~ Initialized ]] |
|
|
|
|
[[ "$output" =~ Bootstrap\ successful ]] |
|
|
|
|
|
|
|
|
|
#; validate repo attributes |
|
|
|
|
test_perms "$T_DIR_REPO" "drw.--.--." |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.bare false |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" core.worktree "$T_DIR_WORK" |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" status.showUntrackedFiles no |
|
|
|
|
test_repo_attribute "$T_DIR_REPO" yadm.managed true |
|
|
|
|
|
|
|
|
|
#; test the remote |
|
|
|
|
local remote_output |
|
|
|
|
remote_output=$(GIT_DIR="$T_DIR_REPO" git remote show) |
|
|
|
|
[ "$remote_output" = "origin" ] |
|
|
|
|
} |
|
|
|
|