-
Bug
-
Resolution: Fixed
-
Critical
-
None
-
Platform: All, OS: Windows XP
In our setup we have a master Hudson machine running on Linux with one slave
macine running Windows XP. This last machine is responsible for any
Windows-specific builds in our environment. To have some metrics, we make use of
SLOCCount both for the Linux and Windows projects, the SLOCCount plugin works
perfect for our Linux projects but fails to work on the Windows ones.
On Windows SLOCCount itself has to be executed from CygWin (Linux Emulation)
which works without problems and gives the proper output format. An extract of
this file is as follows:
Have a non-directory at the top, so creating directory top_dir
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/BetaUpdate.exe to
top_dir
Creating filelist for Config
Creating filelist for FsInt
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/IvAp.sln to top_dir
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/IvAp.svnprops to
top_dir
Creating filelist for IvapMsgLib
Creating filelist for NetInt
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/ResourceMerge.exe
to top_dir
Creating filelist for UsrHost
Creating filelist for UsrInt
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/cppcheck.txt to top_dir
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/cppcheck.xml to top_dir
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/errors.h to top_dir
Creating filelist for installtester
Creating filelist for ivapconfig
Creating filelist for libraries
Creating filelist for mtlbuilder
Adding /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/version.h to top_dir
Categorizing files.
Finding a working MD5 command....
Found a working MD5 command.
Computing results.
177 ansic FsInt
/cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/FsInt/ModuleUser.c
120 ansic FsInt
/cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/FsInt/AdvWeather.h
70 ansic FsInt
/cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src/FsInt/FSUIPCNewWeather.h
57 ansic FsInt /cygdrive/h/###_Hudson/workspace/IvAp_v1.x/ivap/src
As soon as Hudson starts collecting the results, we find this exception in our
console log:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at
hudson.plugins.sloccount.model.SloccountReport.extractFolder(SloccountReport.java:64)
at hudson.plugins.sloccount.model.SloccountReport.add(SloccountReport.java:42)
at
hudson.plugins.sloccount.model.SloccountParser.parseLine(SloccountParser.java:91)
at hudson.plugins.sloccount.model.SloccountParser.parse(SloccountParser.java:58)
at hudson.plugins.sloccount.model.SloccountParser.parse(SloccountParser.java:49)
at hudson.plugins.sloccount.model.SloccountParser.invoke(SloccountParser.java:39)
at hudson.plugins.sloccount.model.SloccountParser.invoke(SloccountParser.java:17)
at hudson.FilePath$FileCallableWrapper.call(FilePath.java:2068)
at hudson.remoting.UserRequest.perform(UserRequest.java:104)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:250)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at hudson.remoting.Engine$1$1.run(Engine.java:58)
at java.lang.Thread.run(Unknown Source)
Based on a quick look at your source code I am assuming this is a problem
related to the file separator. I.e. the data is collected on a Windows slave
(separator = ), while the paths in the file are from CygWin (separator = /). I
suggest to use both for detecting the paths.