200 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
set -euo pipefail
 | 
						|
 | 
						|
readonly TEST_DIR=$(mktemp --tmpdir --directory lit-test.XXXXXX)
 | 
						|
 | 
						|
echo "== Using $TEST_DIR"
 | 
						|
pushd "$TEST_DIR"
 | 
						|
 | 
						|
echo "== Initializing repository"
 | 
						|
lit init
 | 
						|
 | 
						|
echo "== Creating the first commit"
 | 
						|
cat >file1 <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
EOF
 | 
						|
 | 
						|
# Let's check the status. Should look something like this:
 | 
						|
# Changes:
 | 
						|
#   Add file1
 | 
						|
lit status
 | 
						|
 | 
						|
# We expect the first commit to be identified as r0.
 | 
						|
lit commit "Add file1"
 | 
						|
 | 
						|
echo "== Creating more commits"
 | 
						|
echo >>file1 "A third line is added to the first file."
 | 
						|
 | 
						|
# Let's check the status again, just to be sure.
 | 
						|
lit status
 | 
						|
 | 
						|
# This one would be r1.
 | 
						|
lit commit "Extend file1"
 | 
						|
 | 
						|
echo >>file1 "A forth line is added."
 | 
						|
 | 
						|
# This should be r2.
 | 
						|
lit commit "Extend file1 even further"
 | 
						|
 | 
						|
echo "== Displaying graph"
 | 
						|
 | 
						|
# o ← r2 Extend file1 even further
 | 
						|
# o   r1 Extend file1
 | 
						|
# o   r0 Add file1
 | 
						|
lit log
 | 
						|
 | 
						|
echo "== Inspecting r0"
 | 
						|
lit show r0
 | 
						|
 | 
						|
echo "== Switching to r0"
 | 
						|
lit checkout r0
 | 
						|
 | 
						|
# Checking the file content.
 | 
						|
diff -s file1 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
EOF
 | 
						|
 | 
						|
echo "== Switching back to r2"
 | 
						|
lit checkout r2
 | 
						|
 | 
						|
# Checking the file content again.
 | 
						|
diff -s file1 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
	A third line is added to the first file.
 | 
						|
	A forth line is added.
 | 
						|
EOF
 | 
						|
 | 
						|
echo "== Adding and discarding changes"
 | 
						|
echo >>file1 "This fifth line should be gone in an instant."
 | 
						|
lit checkout
 | 
						|
 | 
						|
# Let's confirm.
 | 
						|
diff -s file1 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
	A third line is added to the first file.
 | 
						|
	A forth line is added.
 | 
						|
EOF
 | 
						|
 | 
						|
echo "== Creating another branch"
 | 
						|
lit checkout r0
 | 
						|
mkdir subfolder
 | 
						|
cat >subfolder/file2 <<-EOF
 | 
						|
	This is the first line of the second file.
 | 
						|
	And another line in the second file.
 | 
						|
EOF
 | 
						|
 | 
						|
# This should be r3.
 | 
						|
lit commit "Add file2"
 | 
						|
 | 
						|
# o   ← r3 Add file2
 | 
						|
# │ o   r2 Extend file1 even further
 | 
						|
# │ o   r1 Extend file1
 | 
						|
# o─┘   r0 Add file1
 | 
						|
lit log
 | 
						|
 | 
						|
echo "== Going back"
 | 
						|
lit checkout r2
 | 
						|
 | 
						|
# file2 should be gone.
 | 
						|
test ! -f subfolder/file2
 | 
						|
 | 
						|
echo "== Merging (no conflict)"
 | 
						|
 | 
						|
# This creates a merge commit r4.
 | 
						|
lit merge r3
 | 
						|
 | 
						|
# file2 should now be present.
 | 
						|
diff -s subfolder/file2 - <<-EOF
 | 
						|
	This is the first line of the second file.
 | 
						|
	And another line in the second file.
 | 
						|
EOF
 | 
						|
 | 
						|
# o─┐ ← r4 Merge r3 into r2
 | 
						|
# │ o   r3 Add file2
 | 
						|
# o │   r2 Extend file1 even further
 | 
						|
# o │   r1 Extend file1
 | 
						|
# o─┘   r0 Add file1
 | 
						|
lit log
 | 
						|
 | 
						|
echo "== Setting up a conflict"
 | 
						|
echo >>file1 "Fifth line on top of r4."
 | 
						|
lit commit "Extend file1 one way" # r5
 | 
						|
 | 
						|
lit checkout r3
 | 
						|
echo >>file1 "Third line on top of r3."
 | 
						|
lit commit "Extend file1 another way" # r6
 | 
						|
 | 
						|
#   o ← r6 Extend file1 another way
 | 
						|
# o │   r5 Extend file1 one way
 | 
						|
# o─┤   r4 Merge r3 into r2
 | 
						|
# │ o   r3 Add file2
 | 
						|
# o │   r2 Extend file1 even further
 | 
						|
# o │   r1 Extend file1
 | 
						|
# o─┘   r0 Add file1
 | 
						|
lit log
 | 
						|
 | 
						|
# Going back and merging.
 | 
						|
lit checkout r5
 | 
						|
lit merge r6 || true
 | 
						|
 | 
						|
# Let's check all file versions:
 | 
						|
#   Current commit
 | 
						|
diff -s file1 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
	A third line is added to the first file.
 | 
						|
	A forth line is added.
 | 
						|
	Fifth line on top of r4.
 | 
						|
EOF
 | 
						|
 | 
						|
#   other branch
 | 
						|
diff -s file1.r6 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
	Third line on top of r3.
 | 
						|
EOF
 | 
						|
 | 
						|
#  common base
 | 
						|
diff -s file1.r3 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
EOF
 | 
						|
 | 
						|
# Let's simulate some conflict resolution.
 | 
						|
echo >>file1 "Sixth line added during merge conflict."
 | 
						|
 | 
						|
# Before continuing we need to cleanup the leftover files.
 | 
						|
rm file1.r6 file1.r3
 | 
						|
 | 
						|
lit commit "Merge r6 into r5" # r7
 | 
						|
 | 
						|
# Let's verify the final result.
 | 
						|
 | 
						|
diff -s file1 - <<-EOF
 | 
						|
	This is the first line of the first file. 🚀
 | 
						|
	This is the second line of the first file.
 | 
						|
	A third line is added to the first file.
 | 
						|
	A forth line is added.
 | 
						|
	Fifth line on top of r4.
 | 
						|
	Sixth line added during merge conflict.
 | 
						|
EOF
 | 
						|
 | 
						|
# o─┐ ← r7 Merge r6 into r5
 | 
						|
# │ o   r6 Extend file1 another way
 | 
						|
# o │   r5 Extend file1 one way
 | 
						|
# o─┤   r4 Merge r3 into r2
 | 
						|
# │ o   r3 Add file2
 | 
						|
# o │   r2 Extend file1 even further
 | 
						|
# o │   r1 Extend file1
 | 
						|
# o─┘   r0 Add file1
 | 
						|
lit log
 | 
						|
 | 
						|
echo "== Cleanup"
 | 
						|
popd
 | 
						|
rm -r "$TEST_DIR"
 |