《操作系统》的实验代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

65 lines
1.4 KiB

#!/bin/bash
# change working dir to where this script resides in
pushd `dirname "$0"` > /dev/null
if [ -n "$1" ]; then
RESULT_SAVETO=""
fi
BASE_COMMIT=1d8c85670d03ce745e32bbc57147835b210fe560
if [ -n "$2" ] && git log $2 > /dev/null 2>&1; then
BASE_COMMIT=$2
elif ! git log $BASE_COMMIT > /dev/null 2>&1; then
echo "No valid base commit found."
exit 0
fi
LABS=`git diff $BASE_COMMIT --stat | grep -o "lab[1-8]" | sort | uniq`
COMMIT=`git rev-parse HEAD`
if [ "$LABS" = "" ]; then
echo "No updated lab found. Skip."
exit 0
fi
failed=0
pwd=`pwd`
summary=$pwd/.score_summary
echo -n > $summary
for lab in $LABS; do
pushd $lab > /dev/null
if ! make grade > .score 2>&1; then
failed=`echo $lab | grep -o [0-9]`
fi
if [ -n "$RESULT_SAVETO" ]; then
mkdir -p $RESULT_SAVETO/$COMMIT/$lab
mv .score .score_orig
../tools/split_score_log.py .score_orig > .score
for i in .*.log .*.error; do
cp $i $RESULT_SAVETO/$COMMIT/$lab/${i#.}
done
fi
score=`egrep -o "Score: [0-9]+/[0-9]+" .score`
echo "$lab $score" >> $summary
make clean > /dev/null
popd > /dev/null
done
echo "Labs with changes detected: " $LABS
echo
echo "============================== Summary =============================="
cat $summary
rm $summary
echo
for lab in $LABS; do
echo "================================ $lab ==============================="
cat $lab/.score
done
find . -name '.*' -delete
popd > /dev/null
exit $failed