#!/bin/sh
# -*- mode: sh; coding: utf-8 -*-
# Simple mv tests on explicitly tagged files/directories/symlinks
# Copyright © 2003 Colin Walters <walters@verbum.org>, Rob Weir <rweir@ertius.org>
#
# See the file "COPYING" for further information about
# the copyright and warranty status of this work.

set -e

arg0="$0"
srcdir=`dirname "$arg0"`

. ${srcdir}/test-framework

setup_with_somewhat_interesting_explicit_tla_archives

test_class "mv"

setup () {
  tla get -s jane@example.com--2003/hello-world--mainline--1.0 hello-world
  copy_tree hello-world hello-world.good
  cd hello-world
}  

assert_output_changes () {
   tla status 1>../what-changed-output || test $? = 1
}  

verify_cleanup () {
  cd ..
  rm -rf ',what-changed'
  rm -f what-changed-output
  rm -rf hello-world
  mv hello-world.good hello-world
}

cleanup () {
  :
}
  
begin_test "move file to new file"
setup
tla mv hello-world.c hello_world.c
assert_output_changes
#egrep 'R   \.arch-ids/hello-world\.c\.id => \.arch-ids/hello_world\.c\.id' ../what-changed-output 1>/dev/null
egrep 'R   hello-world\.c => hello_world\.c' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file onto an existing file"
setup
tla mv hello-world.c goodbye-world.c
assert_output_changes
egrep '^D[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null
egrep '^D[[:space:]]*.arch-ids/goodbye-world.c' ../what-changed-output 1>/dev/null
egrep '^R   hello-world\.c => goodbye-world.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/hello-world\.c\.id => \.arch-ids/goodbye-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file into existing directory"
setup
tla mv hello-world.c old_directory
assert_output_changes
egrep '^R   hello-world\.c => old_directory/hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   .arch-ids/hello-world\.c\.id => old_directory/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file onto an existing symlink to a file"
setup
# echo "a file which will not change" > linked_file
tla mv hello-world.c link_to_goodbye-world.c
assert_output_changes
egrep '^R   hello-world\.c => link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null
egrep '^D   link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null
egrep '^D   \.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/hello-world\.c\.id => \.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file into an existing symlink to a directory"
setup
tla mv hello-world.c link_to_old_directory
assert_output_changes
egrep '^R   hello-world\.c => old_directory/hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/hello-world\.c\.id => old_directory/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move symlink to new file"
setup
tla mv link_to_hello-world.c hello_world.c
assert_output_changes
egrep '^R   link_to_hello-world\.c => hello_world\.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/link_to_hello-world\.c\.id => \.arch-ids/hello_world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move symlink onto an existing file"
setup
tla mv link_to_hello-world.c goodbye-world.c
assert_output_changes
egrep '^D[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null
egrep '^D[[:space:]]*.arch-ids/goodbye-world.c' ../what-changed-output 1>/dev/null
egrep '^R   link_to_hello-world\.c => goodbye-world.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/link_to_hello-world\.c\.id => \.arch-ids/goodbye-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move symlink into existing directory"
setup
tla mv link_to_hello-world.c old_directory
assert_output_changes
egrep '^R   link_to_hello-world\.c => old_directory/link_to_hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/link_to_hello-world\.c\.id => old_directory/\.arch-ids/link_to_hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move symlink onto an existing symlink to a file"
setup
tla mv link_to_hello-world.c link_to_goodbye-world.c
assert_output_changes
egrep '^R   link_to_hello-world\.c => link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/link_to_hello-world\.c\.id => \.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null
egrep -v '^M[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move symlink onto an existing symlink to a directory"
setup
tla mv link_to_hello-world.c link_to_old_directory
assert_output_changes
egrep '^R   link_to_hello-world\.c => old_directory/link_to_hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/link_to_hello-world\.c\.id => old_directory/\.arch-ids/link_to_hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move directory to a previously non-existent name"
setup
tla mv old_directory renamed_directory
assert_output_changes
egrep '^D   old_directory/\.arch-ids' ../what-changed-output 1>/dev/null
egrep '^A   renamed_directory/\.arch-ids' ../what-changed-output 1>/dev/null
egrep '^R   old_directory/.arch-ids/=id => renamed_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null
egrep '^R   old_directory => renamed_directory' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move directory into an existing directory"
setup
tla mv old_directory new_directory
assert_output_changes
egrep '^D   old_directory/\.arch-ids' ../what-changed-output 1>/dev/null
egrep '^A   new_directory/old_directory/\.arch-ids' ../what-changed-output 1>/dev/null
egrep '^R   old_directory/\.arch-ids/=id => new_directory/old_directory/\.arch-ids/=id' ../what-changed-output 1>/dev/null
egrep '^R   old_directory => new_directory/old_directory' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move directory into a symlink to an existing directory"
setup
tla mv old_directory link_to_new_directory
assert_output_changes
egrep '^D   old_directory/\.arch-ids' ../what-changed-output 1>/dev/null
egrep '^A   new_directory/old_directory/\.arch-ids' ../what-changed-output 1>/dev/null
egrep '^R   old_directory/.arch-ids/=id => new_directory/old_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null
egrep '^R   old_directory => new_directory/old_directory' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file into a directory tree"
setup
tla mv hello-world.c hierarchy/left/
assert_output_changes
egrep '^R   hello-world\.c => hierarchy/left/hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   \.arch-ids/hello-world\.c\.id => hierarchy/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
tla commit -L"moved hello-world.c into the tree" 1>/dev/null
verify_cleanup
end_test 

begin_test "move file out of a directory tree"
setup
tla mv hierarchy/left/hello-world.c .
assert_output_changes
egrep '^R   hierarchy/left/hello-world\.c => hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   hierarchy/left/\.arch-ids/hello-world\.c\.id => \.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file around a directory tree"
setup
cd hierarchy/left/
tla mv hello-world.c ../right/left/
cd ../..
assert_output_changes
egrep '^R   hierarchy/left/hello-world\.c => hierarchy/right/left/hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   hierarchy/left/\.arch-ids/hello-world\.c\.id => hierarchy/right/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file into a directory tree and rename"
setup
tla mv hierarchy/left/hello-world.c hierarchy/left/renamed.c
assert_output_changes
egrep '^R   hierarchy/left/hello-world\.c => hierarchy/left/renamed\.c' ../what-changed-output 1>/dev/null
egrep '^R   hierarchy/left/\.arch-ids/hello-world\.c\.id => hierarchy/left/\.arch-ids/renamed\.c\.id' ../what-changed-output 1>/dev/null
tla commit -L"moved hello-world.c to renamed.c into the tree" 1> /dev/null
verify_cleanup
end_test 

begin_test "move file out of a directory tree and rename"
setup
tla mv hierarchy/left/renamed.c hello-world.c
assert_output_changes
egrep '^R   hierarchy/left/renamed\.c => hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   hierarchy/left/\.arch-ids/renamed\.c\.id => \.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

begin_test "move file around a directory tree and rename"
setup
pwd
cd hierarchy/left/
tla mv renamed.c ../right/left/hello-world.c
cd ../..
assert_output_changes
egrep '^R   hierarchy/left/renamed\.c => hierarchy/right/left/hello-world\.c' ../what-changed-output 1>/dev/null
egrep '^R   hierarchy/left/\.arch-ids/renamed\.c\.id => hierarchy/right/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null
verify_cleanup
end_test 

clean_workdir

# tag: Rob Weir Tue Sep 23 16:31:25 EST 2003 (test-mv-explicit.sh)
#


syntax highlighted by Code2HTML, v. 0.9.1