Save intermediate logs
Signed-off-by: Junjie Mao <eternal.n08@gmail.com>
This commit is contained in:
parent
67f05c0ce0
commit
1d8c85670d
2
.gitignore
vendored
2
.gitignore
vendored
@ -15,5 +15,5 @@ tags
|
|||||||
*.project
|
*.project
|
||||||
*.workspace
|
*.workspace
|
||||||
a.out
|
a.out
|
||||||
make.log
|
*.log
|
||||||
*.exe
|
*.exe
|
||||||
|
@ -1,10 +1,23 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# change working dir to where this script resides in
|
||||||
|
pushd `dirname "$0"` > /dev/null
|
||||||
|
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
RESULT_SAVETO=`realpath $1`
|
||||||
|
fi
|
||||||
BASE_COMMIT=95a80f598fc57c60aed3737c60ee437d94eb8540
|
BASE_COMMIT=95a80f598fc57c60aed3737c60ee437d94eb8540
|
||||||
|
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[0-9]" | uniq`
|
LABS=`git diff $BASE_COMMIT --stat | grep -o "lab[0-9]" | uniq`
|
||||||
|
COMMIT=`git rev-parse HEAD`
|
||||||
|
|
||||||
if [ "$LABS" = "" ]; then
|
if [ "$LABS" = "" ]; then
|
||||||
echo "No solutions provided. Skip this time."
|
echo "No updated lab found. Skip."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -19,6 +32,14 @@ for lab in $LABS; do
|
|||||||
if ! make grade > .score 2>&1; then
|
if ! make grade > .score 2>&1; then
|
||||||
failed=`echo $lab | grep -o [0-9]`
|
failed=`echo $lab | grep -o [0-9]`
|
||||||
fi
|
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`
|
score=`egrep -o "Score: [0-9]+/[0-9]+" .score`
|
||||||
echo "$lab $score" >> $summary
|
echo "$lab $score" >> $summary
|
||||||
make clean > /dev/null
|
make clean > /dev/null
|
||||||
@ -35,7 +56,10 @@ echo
|
|||||||
for lab in $LABS; do
|
for lab in $LABS; do
|
||||||
echo "================================ $lab ==============================="
|
echo "================================ $lab ==============================="
|
||||||
cat $lab/.score
|
cat $lab/.score
|
||||||
rm $lab/.score
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
find . -name '.*' -delete
|
||||||
|
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
exit $failed
|
exit $failed
|
||||||
|
44
labcodes/formatter.py
Normal file
44
labcodes/formatter.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
if len(sys.argv) < 5:
|
||||||
|
print 'Usage: formatter.py <section name> <result-dir> <repo> <tid>'
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
tid_regex = re.compile('([a-z0-9]+)-.*')
|
||||||
|
lab_title = re.compile('=* (lab[0-9]) =*')
|
||||||
|
test_entry_title = re.compile('^([\w][\w -]+)(:.*)')
|
||||||
|
|
||||||
|
section = sys.argv[1]
|
||||||
|
result_dir = sys.argv[2]
|
||||||
|
repo = sys.argv[3]
|
||||||
|
tid = sys.argv[4]
|
||||||
|
m = tid_regex.match(tid)
|
||||||
|
if not m:
|
||||||
|
print 'Invalid tid'
|
||||||
|
sys.exit()
|
||||||
|
commit = m.group(1)
|
||||||
|
|
||||||
|
lab = ''
|
||||||
|
while True:
|
||||||
|
l = sys.stdin.readline()
|
||||||
|
if not l:
|
||||||
|
break
|
||||||
|
line = l.rstrip('\n')
|
||||||
|
output = line
|
||||||
|
m = test_entry_title.match(line)
|
||||||
|
if m and lab:
|
||||||
|
test_entry = m.group(1).lower().replace(' ', '_')
|
||||||
|
test_log = os.path.join(result_dir, repo, commit, lab, test_entry + ".error")
|
||||||
|
if os.path.exists(test_log):
|
||||||
|
rest = m.group(2)
|
||||||
|
output = '<a href="/repo/' + '/'.join([repo, commit, lab, test_entry]) + '">' + m.group(1) + '</a>' + rest
|
||||||
|
m = lab_title.match(line)
|
||||||
|
if m:
|
||||||
|
lab = m.group(1)
|
||||||
|
|
||||||
|
sys.stdout.write(output + '<br>')
|
||||||
|
|
||||||
|
sys.stdout.flush()
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
@ -183,6 +183,8 @@ build_run() {
|
|||||||
run_qemu
|
run_qemu
|
||||||
|
|
||||||
show_time
|
show_time
|
||||||
|
|
||||||
|
cp $qemu_out .`echo $tag | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g'`.log
|
||||||
}
|
}
|
||||||
|
|
||||||
check_result() {
|
check_result() {
|
||||||
|
29
labcodes/tools/split_score_log.py
Normal file
29
labcodes/tools/split_score_log.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Note: This script is intended to be executed at labcodes/labX
|
||||||
|
|
||||||
|
import sys, os
|
||||||
|
import re
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print 'Usage: split_score_log.py <raw log file> <lab>'
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
raw_log_f = sys.argv[1]
|
||||||
|
test_entry_title = re.compile('^([\w][\w -]+): *\([0-9.]*s\)')
|
||||||
|
|
||||||
|
raw_log = open(raw_log_f, 'r')
|
||||||
|
current_test = ''
|
||||||
|
for line in raw_log.readlines():
|
||||||
|
line = line.strip('\n')
|
||||||
|
m = test_entry_title.match(line)
|
||||||
|
if m:
|
||||||
|
print line
|
||||||
|
current_test = m.group(1)
|
||||||
|
error_log = open('.' + current_test.lower().replace(' ', '_') + '.error', 'w+')
|
||||||
|
print >> error_log, line
|
||||||
|
continue
|
||||||
|
if (not line or line[0] == ' ') and current_test != '':
|
||||||
|
print >> error_log, line
|
||||||
|
if (line and line[0] != ' ') or line.find('-check') >= 0:
|
||||||
|
print line
|
Loading…
Reference in New Issue
Block a user