History

remove unneed script, MD5 check and simplified the case check logic

huade committed 10 years ago

Commit 62b4f5d1 parent f22c47c3 files · +62 −139Browse files

Showing the changes to test/encoder_binary_comparison/Scripts (2 of 3 files). Show all

Unified · Split

2 files
  1. test/encoder_binary_comparison/Scripts/run_BinarySHA1Comparison.sh +54 −131
  2. test/encoder_binary_comparison/Scripts/run_BitStreamToYUV.sh +1 −1
test/encoder_binary_comparison/Scripts/run_BinarySHA1Comparison.sh+54−131
@@ -22,25 +22,19 @@ · 21 unmodified lines
22#usage runGlobalVariableDef22#usage runGlobalVariableDef
23runGlobalVariableDef()23runGlobalVariableDef()
24{24{
25 WorkingDirDir=""
26 #test data space25 #test data space
27 FinalResultPath=""26 FinalResultPath=""
28 IssueDataPath=""27 IssueDataPath=""
29 TempDataPath=""28 TempDataPath=""
30 #for test sequence info29 #for test sequence info
31 TestSequenceName=""
32 PicW=""30 PicW=""
33 PicH=""31 PicH=""
34 #test cfg file and test info output file
35 ConfigureFile=""
36 AllCaseFile=""
37 #xxx.csv32 #xxx.csv
38 AllCasePassStatusFile=""33 AllCasePassStatusFile=""
39 #for encoder command34 #for encoder command
40 declare -a aEncoderCommandSet35 declare -a aEncoderCommandSet
41 declare -a aEncoderCommandName36 declare -a aEncoderCommandName
42 declare -a aEncoderCommandValue37 declare -a aEncoderCommandValue
43 declare -a aRecYUVFileList
44 #encoder parameters change based on the case info38 #encoder parameters change based on the case info
45 let "EncoderFlag = 0"39 let "EncoderFlag = 0"
46 CaseInfo=""40 CaseInfo=""
@@ -55,7 +49,6 @@ runGlobalVariableDef() · 8 unmodified lines
55#usage runEncoderCommandInital49#usage runEncoderCommandInital
56runEncoderCommandInital()50runEncoderCommandInital()
57{51{
58
59 aEncoderCommandSet=( -utype -frms -numl -numtl \52 aEncoderCommandSet=( -utype -frms -numl -numtl \
60 -sw -sh "-dw 0" "-dh 0" "-dw 1" "-dh 1" "-dw 2" "-dh 2" "-dw 3" "-dh 3" \53 -sw -sh "-dw 0" "-dh 0" "-dw 1" "-dh 1" "-dw 2" "-dh 2" "-dw 3" "-dh 3" \
61 "-frout 0" "-frout 1" "-frout 2" "-frout 3" \54 "-frout 0" "-frout 1" "-frout 2" "-frout 3" \
@@ -95,16 +88,11 @@ runGlobalVariableInitial() · 33 unmodified lines
95 IssueDataPath="${CurrentDir}/issue"88 IssueDataPath="${CurrentDir}/issue"
96 TempDataPath="TempData"89 TempDataPath="TempData"
97 TestSequencePath="${CurrentDir}"90 TestSequencePath="${CurrentDir}"
98 #get YUV detail info $picW $picH $FPS91
99 declare -a aYUVInfo92 #test info output file
100 aYUVInfo=(`./run_ParseYUVInfo.sh ${TestSequenceName}`)93 AllCasePassStatusFile="${FinalResultPath}/${TestYUVName}_AllCaseOutput.csv"
101 PicW=${aYUVInfo[0]}94 UnpassCaseFile="${FinalResultPath}/${TestYUVName}_unpassCaseOutput.csv"
102 PicH=${aYUVInfo[1]}95 UpdateSHA1TableFile="${FinalResultPath}/${TestYUVName}_UpdateSHA1Table.csv"
103 #test cfg file and test info output file
104 ConfigureFile=welsenc.cfg
105 AllCasePassStatusFile="${FinalResultPath}/${TestSequenceName}_AllCaseOutput.csv"
106 UnpassCaseFile="${FinalResultPath}/${TestSequenceName}_unpassCaseOutput.csv"
107 UpdateSHA1TableFile="${FinalResultPath}/${TestSequenceName}_UpdateSHA1Table.csv"
108 96
109 HeadLine1="EncoderFlag, DecoderFlag, FPS, BitSreamSHA1, BitSreamMD5, InputYUVSHA1, InputYUVMD5,\97 HeadLine1="EncoderFlag, DecoderFlag, FPS, BitSreamSHA1, BitSreamMD5, InputYUVSHA1, InputYUVMD5,\
110 -utype, -frms, -numl, -numtl, -sw, -sh,\98 -utype, -frms, -numl, -numtl, -sw, -sh,\
@@ -144,13 +132,15 @@ runGlobalVariableInitial() · 33 unmodified lines
144 EncoderCommand=""132 EncoderCommand=""
145 EncoderLogFile="${TempDataPath}/Encoder.log"133 EncoderLogFile="${TempDataPath}/Encoder.log"
146 TargetSHA1=""134 TargetSHA1=""
147 TargetMD5=""
148 TargetYUVSHA1=""135 TargetYUVSHA1=""
149 TargetYUVMD5=""
150 BenchmarkSHA1=""136 BenchmarkSHA1=""
151 BenchmarkMD5=""
152 BenchmarkYUVSHA1=""137 BenchmarkYUVSHA1=""
153 BenchmarkYUVMD5=""138
139 RecParam=""
140 for((i=0;i<4;i++))
141 do
142 RecParam="${RecParam} -drec ${i} ${TempDataPath}/${TestYUVName}_rec${i}.yuv"
143 done
154}144}
155#***********************************************************145#***********************************************************
156#called by runAllCaseTest146#called by runAllCaseTest
@@ -163,76 +153,31 @@ runParseCaseInfo() · 6 unmodified lines
163 echo "no parameter!"153 echo "no parameter!"
164 return 1154 return 1
165 fi155 fi
166 local TempData=""156
167 local CaseData=$@157 local CaseData=$@
168 local BitstreamPrefix=""
169 BenchmarkSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $1} ' `158 BenchmarkSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $1} ' `
170 BenchmarkMD5=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $2} ' `
171 BenchmarkYUVSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $3} ' `159 BenchmarkYUVSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $3} ' `
172 BenchmarkYUVMD5=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $4} ' `160 aEncoderCommandValue=(`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s",$i)} ' `)
173 161 BitstreamTarget=${TempDataPath}/${TestYUVName}_codec_target.264
174
175 declare -a aTempParamIndex=( 6 7 8 9 10 11 12 13 15 16 17 19 20 21 25 26 27 28 31 32 33 34 35 36 )
176 TempData=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s",$i)} ' `
177 aEncoderCommandValue=(${TempData})
178 let "TempParamFlag=0"
179
180 for((i=0; i<$NumParameter; i++))
181 do
182 for ParnmIndex in ${aTempParamIndex[@]}
183 do
184 if [ $i -eq ${ParnmIndex} ]
185 then
186 let "TempParamFlag=1"
187 fi
188 done
189
190 if [ ${TempParamFlag} -eq 0 ]
191 then
192 BitstreamPrefix=${BitstreamPrefix}_${aEncoderCommandName[$i]}_${aEncoderCommandValue[$i]}
193 fi
194 let "TempParamFlag=0"
195 done
196
197 BitstreamTarget=${TempDataPath}/${TestSequenceName}_${BitstreamPrefix}_codec_target.264
198 echo ""
199 echo "BitstreamPrefix is ${BitstreamPrefix}"
200 echo ""
201}162}
202 163
203runEncodeOneCase()164runEncodeOneCase()
204{165{
205 local ParamCommand=""166 EncoderCommand=""
206 BitStreamFile=${BitstreamTarget}167 BitStreamFile=${BitstreamTarget}
207 168
208 for ((i=4; i<${NumParameter}; i++))169 for ((i=0; i<${NumParameter}; i++))
209 do170 do
210 ParamCommand="${ParamCommand} ${aEncoderCommandSet[$i]} ${aEncoderCommandValue[$i]} "171 EncoderCommand="${EncoderCommand} ${aEncoderCommandSet[$i]} ${aEncoderCommandValue[$i]} "
211 done172 done
212 173
213 for((i=0;i<4;i++))174 EncoderCommand="./h264enc welsenc.cfg -lconfig 0 layer0.cfg -lconfig 1 layer1.cfg -lconfig 2 layer2.cfg -lconfig 3 layer3.cfg \
214 do175 -bf ${BitStreamFile} -org ${TestSequencePath}/${TestYUVName} ${RecParam} ${EncoderCommand}"
215 aRecYUVFileList[$i]="${TempDataPath}/${TestYUVName}_rec${i}.yuv"176 echo -e "\n---------------Encode One Case-------------------------------------------"
216 done177 echo -e "case encode command is : \n ${EncoderCommand} "
217 178
218 ParamCommand="${aEncoderCommandSet[0]} ${aEncoderCommandValue[0]} ${aEncoderCommandSet[1]} ${aEncoderCommandValue[1]} \
219 ${aEncoderCommandSet[2]} ${aEncoderCommandValue[2]} \
220 -lconfig 0 layer0.cfg -lconfig 1 layer1.cfg -lconfig 2 layer2.cfg -lconfig 3 layer3.cfg \
221 ${aEncoderCommandSet[3]} ${aEncoderCommandValue[3]} \
222 ${ParamCommand}"
223 echo ""
224 echo "---------------Encode One Case-------------------------------------------"
225 echo "case line is :"
226 EncoderCommand="./h264enc welsenc.cfg ${ParamCommand} -bf ${BitStreamFile} \
227 -drec 0 ${aRecYUVFileList[0]} -drec 1 ${aRecYUVFileList[1]} \
228 -drec 2 ${aRecYUVFileList[2]} -drec 3 ${aRecYUVFileList[3]} \
229 -org ${TestSequencePath}/${TestSequenceName}"
230 echo ${EncoderCommand}
231 echo -e "\n\n"179 echo -e "\n\n"
232 ./h264enc welsenc.cfg ${ParamCommand} -bf ${BitStreamFile} \180 ${EncoderCommand} 2>${EncoderLogFile}
233 -drec 0 ${aRecYUVFileList[0]} -drec 1 ${aRecYUVFileList[1]} \
234 -drec 2 ${aRecYUVFileList[2]} -drec 3 ${aRecYUVFileList[3]} \
235 -org ${TestSequencePath}/${TestSequenceName} 2>${EncoderLogFile}
236 if [ $? -eq 0 ]181 if [ $? -eq 0 ]
237 then182 then
238 let "EncoderFlag=0"183 let "EncoderFlag=0"
@@ -255,9 +200,8 @@ runEncodeOneCase() · 16 unmodified lines
255#usage runJSVMVerify200#usage runJSVMVerify
256runBitStreamVerify()201runBitStreamVerify()
257{202{
258 echo ""203 echo -e "\n******************************************"
259 echo "******************************************"204 echo -e "Bit stream SHA1 value comparison.... "
260 echo "Bit streamSHA1 value comparison.... "
261 #*******************************************205 #*******************************************
262 TargetSHA1="NULL"206 TargetSHA1="NULL"
263 TargetMD5="NULL"207 TargetMD5="NULL"
@@ -267,7 +211,7 @@ runBitStreamVerify() · 3 unmodified lines
267 if [ ${EncoderFlag} -eq 1 ]211 if [ ${EncoderFlag} -eq 1 ]
268 then212 then
269 let "UnpassCaseNum++"213 let "UnpassCaseNum++"
270 echo "1:unpassed! encoder initial failed or crash!"214 echo "1:unpassed! encoder initial failed or crash!"
271 DiffFlag="1:unpassed! encoder initial failed or crash!"215 DiffFlag="1:unpassed! encoder initial failed or crash!"
272 return 1216 return 1
273 fi217 fi
@@ -275,46 +219,30 @@ runBitStreamVerify() · 1 unmodified line
275 if [ ! -s ${BitStreamFile} ]219 if [ ! -s ${BitStreamFile} ]
276 then220 then
277 let "UnpassCaseNum++"221 let "UnpassCaseNum++"
278 echo "2:unpassed! 0 bits--bit stream"222 echo "2:unpassed! 0 bits--bit stream"
279 DiffFlag="2:unpassed! 0 bits--bit stream"223 DiffFlag="2:unpassed! 0 bits--bit stream"
280 return 1224 return 1
281 fi225 fi
226
282 #*******************************************227 #*******************************************
283 #*******************************************
284 echo ""
285 echo "${BitStreamFile}"
286 #SHA1228 #SHA1
287 TargetSHA1=`openssl sha1 ${BitStreamFile}`229 TargetSHA1=`openssl sha1 ${BitStreamFile} | awk '{print $2}'`
288 TargetSHA1=`echo ${TargetSHA1} | awk '{print $2}' `230 TargetYUVSHA1=`openssl sha1 ${TestSequencePath}/${TestYUVName} | awk '{print $2}'`
289 TargetMD5=`openssl md5 ${BitStreamFile}`231 if [[ "${TargetSHA1}" =~ "${BenchmarkSHA1}" ]]
290 TargetMD5=`echo ${TargetMD5} | awk '{print $2}' `
291
292 TargetYUVSHA1=`openssl sha1 ${TestSequencePath}/${TestSequenceName} `
293 TargetYUVSHA1=`echo ${TargetYUVSHA1} | awk '{print $2}' `
294 TargetYUVMD5=`openssl md5 ${TestSequencePath}/${TestSequenceName} `
295 TargetYUVMD5=`echo ${TargetYUVMD5} | awk '{print $2}' `
296
297 if [[ "${TargetSHA1}" =~ "${BenchmarkSHA1}" ]]
298 then232 then
299 echo "bitstream pass! SHA1--${TargetSHA1} ----- ${BenchmarkSHA1}"233 echo "bitstream pass! SHA1--${TargetSHA1} ----- ${BenchmarkSHA1} YUV--SHA1--info: ${TargetYUVSHA1} ---- ${BenchmarkYUVSHA1}"
300 echo "MD5 info: MD5--${TargetMD5} ----- ${BenchmarkMD5}"
301 echo "YUV SHA1 info: SHA1--${TargetYUVSHA1} ---- ${BenchmarkYUVSHA1} "
302 echo "YUV MD5 info: MD5--${TargetYUVMD5} ---- ${BenchmarkYUVMD5}"
303 DiffFlag="0:passed!"234 DiffFlag="0:passed!"
304 let "PassCaseNum++"235 let "PassCaseNum++"
305 return 0236 return 0
306 else237 else
307 echo "!!! SHA1 string not match: ${TargetSHA1} ----- ${BenchmarkSHA1} "238 echo "!!! SHA1 string not match: ${TargetSHA1} ----- ${BenchmarkSHA1} YUV--SHA1--info: ${TargetYUVSHA1} ---- ${BenchmarkYUVSHA1}"
308 echo "MD5 info: MD5--${TargetMD5} ----- ${BenchmarkMD5}"
309 echo "YUV SHA1 info: SHA1--${TargetYUVSHA1} ---- ${BenchmarkYUVSHA1} "
310 echo "YUV MD5 info: MD5--${TargetYUVMD5} ---- ${BenchmarkYUVMD5}"
311 DiffFlag="3:unpassed!"239 DiffFlag="3:unpassed!"
312 let "UnpassCaseNum++"240 let "UnpassCaseNum++"
313 return 1241 return 1
314 fi242 fi
315}243}
316 244
317#called by runAllCaseTest245#called by runAllCaseTest
318#delete temp data files and output single case test result to log file246#delete temp data files and output single case test result to log file
319#usage runSingleCasePostAction $CaseData247#usage runSingleCasePostAction $CaseData
320runSingleCasePostAction()248runSingleCasePostAction()
@@ -326,16 +254,15 @@ runSingleCasePostAction() · 5 unmodified lines
326 fi254 fi
327 local CaseData=$@255 local CaseData=$@
328 CaseInfo=`echo $CaseData | awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s,",$i)} '`256 CaseInfo=`echo $CaseData | awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s,",$i)} '`
329 PassStatusInfo="${DiffFlag}, ${TargetSHA1}, ${BenchmarkSHA1}, ${TargetMD5}, ${BenchmarkMD5},\257 PassStatusInfo="${DiffFlag}, ${TargetSHA1}, ${BenchmarkSHA1}, ${TargetYUVSHA1}, ${BenchmarkYUVSHA1}, ${CaseInfo}, ${EncoderCommand} "
330 ${TargetYUVMD5}, ${BenchmarkYUVMD5}, ${TargetYUVSHA1}, ${BenchmarkYUVSHA1},\
331 ${CaseInfo}, ${EncoderCommand} "
332 echo "${PassStatusInfo}">>${AllCasePassStatusFile}258 echo "${PassStatusInfo}">>${AllCasePassStatusFile}
333 if [ "$DiffFlag" != "0:passed!" ]259 if [ "$DiffFlag" != "0:passed!" ]
334 then260 then
335 echo "${PassStatusInfo}">>${UnpassCaseFile}261 echo "${PassStatusInfo}">>${UnpassCaseFile}
336 fi262 fi
337 echo "${TargetSHA1}, ${TargetMD5},${TargetYUVMD5}, ${TargetYUVSHA1},${CaseInfo}">>${UpdateSHA1TableFile}263
338 ./run_SafeDelete.sh ${BitstreamTarget} >>${AllCaseConsoleLogFile}264 echo "${TargetSHA1}, ${TargetMD5},${TargetYUVMD5}, ${TargetYUVSHA1},${CaseInfo}">>${UpdateSHA1TableFile}
265 #./run_SafeDelete.sh ${BitstreamTarget} >>${AllCaseConsoleLogFile}
339}266}
340 267
341#usage runOutputPassNum268#usage runOutputPassNum
@@ -344,7 +271,7 @@ runOutputPassNum() · 2 unmodified lines
344 # output file locate in ../result271 # output file locate in ../result
345 echo ""272 echo ""
346 echo "***********************************************************"273 echo "***********************************************************"
347 echo "${TestSequenceName}"274 echo "${TestYUVName}"
348 echo "total case Num is: ${TotalCaseNum}"275 echo "total case Num is: ${TotalCaseNum}"
349 echo "pass case Num is: ${PassCaseNum}"276 echo "pass case Num is: ${PassCaseNum}"
350 echo "unpass case Num is: ${UnpassCaseNum}"277 echo "unpass case Num is: ${UnpassCaseNum}"
@@ -376,17 +303,15 @@ runAllCaseTest() · 25 unmodified lines
376 then303 then
377 if [ "$DiffFlag" = "0:passed!" ]304 if [ "$DiffFlag" = "0:passed!" ]
378 then305 then
379 echo -e "\033[32m OK! ${TestSequenceName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m"306 echo -e "\033[32m OK! ${TestYUVName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m"
380 echo -e "\033[32m ----MD5 (Current--Benchmark): ${TargetMD5}-----${BenchmarkMD5} \033[0m"307 echo -e "\033[32m ----YUVSHA1: ${TargetYUVSHA1}, ${BenchmarkYUVSHA1} \033[0m"
381 echo -e "\033[32m ----YUVMD5: ${TargetYUVMD5}, ${BenchmarkYUVMD5} YUVSHA1: ${TargetYUVSHA1}, ${BenchmarkYUVSHA1} \033[0m"
382 fi308 fi
383 fi309 fi
384 #******************************************310 #******************************************
385 if [ ! "$DiffFlag" = "0:passed!" ]311 if [ ! "$DiffFlag" = "0:passed!" ]
386 then312 then
387 echo -e "\033[31m Failed! ${TestSequenceName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m"313 echo -e "\033[31m Failed! ${TestYUVName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m"
388 echo -e "\033[31m ----MD5 (Current--Benchmark): ${TargetMD5}-----${BenchmarkMD5} \033[0m"314 echo -e "\033[31m ----YUVSHA1: ${TargetYUVSHA1}, ${BenchmarkYUVSHA1} \033[0m"
389 echo -e "\033[31m ----YUVMD5: ${TargetYUVMD5}, ${BenchmarkYUVMD5} YUVSHA1: ${TargetYUVSHA1}, ${BenchmarkYUVSHA1} \033[0m"
390 EncoderLogInfo=`cat ${EncoderLogFile}`315 EncoderLogInfo=`cat ${EncoderLogFile}`
391 echo -e "\033[31m ${EncoderLogInfo} \033[0m"316 echo -e "\033[31m ${EncoderLogInfo} \033[0m"
392 fi317 fi
@@ -399,28 +324,18 @@ runAllCaseTest() · 6 unmodified lines
399# usage: runMain $TestYUV $AllCaseFile324# usage: runMain $TestYUV $AllCaseFile
400runMain()325runMain()
401{326{
402 if [ ! $# -eq 2 ]
403 then
404 echo "usage: run_BinarySHA1Comparison.sh \$TestYUV \$AllCaseFile"
405 return 1
406 fi
407
408 runGlobalVariableDef327 runGlobalVariableDef
409
410 #for test sequence info
411 TestSequenceName=$1
412 AllCaseFile=$2
413 runGlobalVariableInitial328 runGlobalVariableInitial
414 TestFolder=`echo $CurrentDir | awk 'BEGIN {FS="/"} { i=NF; print $i}'`329 TestFolder=`echo $CurrentDir | awk 'BEGIN {FS="/"} { i=NF; print $i}'`
415 AllCaseConsoleLogFile="${FinalResultPath}/${TestSequenceName}.TestLog"330 AllCaseConsoleLogFile="${FinalResultPath}/${TestYUVName}.TestLog"
416 CaseSummaryFile="${FinalResultPath}/${TestSequenceName}.Summary"331 CaseSummaryFile="${FinalResultPath}/${TestYUVName}.Summary"
417 FlagFile=""332 FlagFile=""
418 333
419 #run all cases334 #run all cases
420 runAllCaseTest335 runAllCaseTest
421 336
422 # output file locate in ./result337 # output file locate in ./result
423 echo "${TestSequenceName}, \338 echo "${TestYUVName}, \
424 ${PassCaseNum} pass!, \339 ${PassCaseNum} pass!, \
425 ${UnpassCaseNum} unpass!,\340 ${UnpassCaseNum} unpass!,\
426 detail file located in ../AllTestData/${TestFolder}/result">${CaseSummaryFile}341 detail file located in ../AllTestData/${TestFolder}/result">${CaseSummaryFile}
@@ -436,7 +351,15 @@ runMain() · 9 unmodified lines
436 exit 0351 exit 0
437 fi352 fi
438}353}
354#************************************************************************
355# main entry
356#************************************************************************
357if [ ! $# -eq 2 ]
358then
359 echo "usage: run_BinarySHA1Comparison.sh \$TestYUV \$AllCaseFile"
360 return 1
361fi
439TestYUVName=$1362TestYUVName=$1
440AllCaseFile=$2363AllCaseFile=$2
441runMain ${TestYUVName} ${AllCaseFile}364runMain
442 365
test/encoder_binary_comparison/Scripts/run_BitStreamToYUV.sh+1−1
@@ -110,7 +110,7 @@ runMain() · 109 unmodified lines
110 run_BitStream2YUV ${BitStreameFile} ${DecodedYUVName} ${DecoderLogFile}110 run_BitStream2YUV ${BitStreameFile} ${DecodedYUVName} ${DecoderLogFile}
111 if [ ! $? -eq 0 ]111 if [ ! $? -eq 0 ]
112 then112 then
113 echo "bit stream decoded failed!"113 echo "bit stream decoded failed!"
114 return 1114 return 1
115 fi115 fi
116 #*********************116 #*********************

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t