2020-09-29 13:16:19 +02:00
|
|
|
#!/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"
|
2020-09-29 13:28:00 +02:00
|
|
|
|
|
|
|
# o ← r2 Extend file1 even further
|
2020-09-29 13:16:19 +02:00
|
|
|
# o r1 Extend file1
|
|
|
|
# o r0 Add file1
|
|
|
|
lit log
|
|
|
|
|
|
|
|
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"
|
|
|
|
|
2020-09-29 13:28:00 +02:00
|
|
|
# o ← r3 Add file2
|
2020-09-29 13:16:19 +02:00
|
|
|
# │ 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
|
|
|
|
|
2020-09-29 13:28:00 +02:00
|
|
|
# o─┐ ← r4 Merge r3 into r2
|
2020-09-29 13:16:19 +02:00
|
|
|
# │ 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 ontop of r4."
|
|
|
|
lit commit "Extend file1 one way" # r5
|
|
|
|
|
|
|
|
lit checkout r3
|
|
|
|
echo >>file1 "Third line ontop of r3."
|
|
|
|
lit commit "Extend file1 another way" # r6
|
|
|
|
|
2020-09-29 13:28:00 +02:00
|
|
|
# o ← r6 Extend file1 another way
|
2020-09-29 13:16:19 +02:00
|
|
|
# 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 ontop of r4.
|
|
|
|
EOF
|
|
|
|
|
|
|
|
# other breanch
|
|
|
|
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 ontop 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
|
|
|
|
|
|
|
|
# To resolve the conflict, we simply take the version of the current commit.
|
|
|
|
rm file1.r6 file1.r3
|
|
|
|
|
|
|
|
lit commit # r7
|
|
|
|
|
2020-09-29 13:28:00 +02:00
|
|
|
# o─┐ ← r7 Merge r6 into r5
|
2020-09-29 13:16:19 +02:00
|
|
|
# │ 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"
|