update
This commit is contained in:
127
.check-build
Executable file
127
.check-build
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
REFERENCE_FILES=(
|
||||
# lab 1
|
||||
src/mrapps/crash.go
|
||||
src/mrapps/indexer.go
|
||||
src/mrapps/mtiming.go
|
||||
src/mrapps/nocrash.go
|
||||
src/mrapps/rtiming.go
|
||||
src/mrapps/wc.go
|
||||
src/main/mrsequential.go
|
||||
src/main/mrmaster.go
|
||||
src/main/mrworker.go
|
||||
|
||||
# lab 2
|
||||
src/raft/persister.go
|
||||
src/raft/test_test.go
|
||||
src/raft/config.go
|
||||
src/labrpc/labrpc.go
|
||||
|
||||
# lab 3
|
||||
src/kvraft/test_test.go
|
||||
src/kvraft/config.go
|
||||
|
||||
# lab 4a
|
||||
src/shardmaster/test_test.go
|
||||
src/shardmaster/config.go
|
||||
|
||||
# lab 4b
|
||||
src/shardkv/test_test.go
|
||||
src/shardkv/config.go
|
||||
)
|
||||
|
||||
main() {
|
||||
upstream="$1"
|
||||
labnum="$2"
|
||||
|
||||
# make sure we have reference copy of lab, in FETCH_HEAD
|
||||
git fetch "$upstream" 2>/dev/null || die "unable to git fetch $upstream"
|
||||
|
||||
# copy existing directory
|
||||
tmpdir="$(mktemp -d)"
|
||||
find src -type s -delete # cp can't copy sockets
|
||||
cp -r src "$tmpdir"
|
||||
orig="$PWD"
|
||||
cd "$tmpdir"
|
||||
|
||||
# check out reference files
|
||||
for f in ${REFERENCE_FILES[@]}; do
|
||||
mkdir -p "$(dirname $f)"
|
||||
git --git-dir="$orig/.git" show "FETCH_HEAD:$f" > "$f"
|
||||
done
|
||||
|
||||
case $labnum in
|
||||
"lab1") check_lab1;;
|
||||
"lab2a"|"lab2b"|"lab2c") check_lab2;;
|
||||
"lab3a"|"lab3b") check_lab3;;
|
||||
"lab4a") check_lab4a;;
|
||||
"lab4b") check_lab4b;;
|
||||
*) die "unknown lab: $labnum";;
|
||||
esac
|
||||
|
||||
cd
|
||||
rm -rf "$tmpdir"
|
||||
}
|
||||
|
||||
check_lab1() {
|
||||
check_cmd cd src/mrapps
|
||||
check_cmd go build -buildmode=plugin wc.go
|
||||
check_cmd go build -buildmode=plugin indexer.go
|
||||
check_cmd go build -buildmode=plugin mtiming.go
|
||||
check_cmd go build -buildmode=plugin rtiming.go
|
||||
check_cmd go build -buildmode=plugin crash.go
|
||||
check_cmd go build -buildmode=plugin nocrash.go
|
||||
check_cmd cd ../main
|
||||
check_cmd go build mrmaster.go
|
||||
check_cmd go build mrworker.go
|
||||
check_cmd go build mrsequential.go
|
||||
}
|
||||
|
||||
check_lab2() {
|
||||
check_cmd cd src/raft
|
||||
check_cmd go test -c
|
||||
}
|
||||
|
||||
check_lab3() {
|
||||
check_cmd cd src/kvraft
|
||||
check_cmd go test -c
|
||||
}
|
||||
|
||||
check_lab4a() {
|
||||
check_cmd cd src/shardmaster
|
||||
check_cmd go test -c
|
||||
}
|
||||
|
||||
check_lab4b() {
|
||||
check_cmd cd src/shardkv
|
||||
check_cmd go test -c
|
||||
# also check other labs/parts
|
||||
cd "$tmpdir"
|
||||
check_lab4a
|
||||
cd "$tmpdir"
|
||||
check_lab3
|
||||
cd "$tmpdir"
|
||||
check_lab2
|
||||
}
|
||||
|
||||
check_cmd() {
|
||||
if ! "$@" >/dev/null 2>&1; then
|
||||
echo "We tried building your source code with testing-related files reverted to original versions, and the build failed. This copy of your code is preserved in $tmpdir for debugging purposes. Please make sure the code you are trying to hand in does not make changes to test code." >&2
|
||||
echo >&2
|
||||
echo "The build failed while trying to run the following command:" >&2
|
||||
echo >&2
|
||||
echo "$ $@" >&2
|
||||
echo " (cwd: ${PWD#$tmpdir/})" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
die() {
|
||||
echo "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user