[JIRA] (JENKINS-14576) NullPointerException in hudson.plugins.repo.ChangeLogEntry when using Jenkins API

2012-07-25 Thread jenkins-j...@zackelan.com (JIRA)














































Zack Elan
 created  JENKINS-14576


NullPointerException in hudson.plugins.repo.ChangeLogEntry when using Jenkins API















Issue Type:


Bug



Affects Versions:


current



Assignee:


Unassigned


Components:


repo



Created:


25/Jul/12 9:52 PM



Description:


Steps to reproduce:

	Have a build job that uses the repo plugin
	Run that job such that it pulls down changes where one or more commits had no files changed (these seem to be merge commits in our case)
	Access that job through the Jenkins API



Behavior:

	Going directly to the build's page in Jenkins works as I expect. However, I'm using a script that accesses Jenkins through its API. When I tack on '/api/json' or '/api/xml' to the URL, I get the following exception:



Caused by: java.lang.NullPointerException
at hudson.plugins.repo.ChangeLogEntry$1.size(ChangeLogEntry.java:296)
at java.util.AbstractList$Itr.hasNext(AbstractList.java:339)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:180)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:136)
at org.kohsuke.stapler.export.Property.writeTo(Property.java:113)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:231)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:168)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:136)
at org.kohsuke.stapler.export.Property.writeTo(Property.java:113)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:231)
at org.kohsuke.stapler.export.Property.writeValue(Property.java:136)
at org.kohsuke.stapler.export.Property.writeTo(Property.java:113)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)
at org.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)
at org.kohsuke.stapler.export.Model.writeTo(Model.java:152)
at org.kohsuke.stapler.ResponseImpl.serveExposedBean(ResponseImpl.java:200)
at hudson.model.Api.doJson(Api.java:181)
at sun.reflect.GeneratedMethodAccessor980.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:288)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:151)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:90)
at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:111)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:659)
at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:203)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:659)
at org.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:384)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:659)
at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:241)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:659)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:488)
at org.kohsuke.stapler.Stapler.service(Stapler.java:162)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

Looking at the code (git rev 3fb046cc), I see line 296 is 

[JIRA] (JENKINS-14576) NullPointerException in hudson.plugins.repo.ChangeLogEntry when using Jenkins API

2012-07-25 Thread jenkins-j...@zackelan.com (JIRA)














































Zack Elan
 updated  JENKINS-14576


NullPointerException in hudson.plugins.repo.ChangeLogEntry when using Jenkins API
















Change By:


Zack Elan
(25/Jul/12 10:18 PM)




Description:


Stepstoreproduce:-Haveabuildjobthatusestherepoplugin-Runthatjob
suchthatitpullsdownchanges
whereoneormore
commitshadnofileschanged(theseseemtobemergecommitsinourcase)
projectswereadded/removedfromthemanifest
-AccessthatjobthroughtheJenkinsAPIBehavior:-GoingdirectlytothebuildspageinJenkinsworksasIexpect.However,ImusingascriptthataccessesJenkinsthroughitsAPI.WhenItackon/api/jsonor/api/xmltotheURL,Igetthefollowingexception:Causedby:java.lang.NullPointerExceptionathudson.plugins.repo.ChangeLogEntry$1.size(ChangeLogEntry.java:296)atjava.util.AbstractList$Itr.hasNext(AbstractList.java:339)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:180)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:136)atorg.kohsuke.stapler.export.Property.writeTo(Property.java:113)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:231)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:168)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:136)atorg.kohsuke.stapler.export.Property.writeTo(Property.java:113)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:231)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:136)atorg.kohsuke.stapler.export.Property.writeTo(Property.java:113)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Model.writeTo(Model.java:152)atorg.kohsuke.stapler.ResponseImpl.serveExposedBean(ResponseImpl.java:200)athudson.model.Api.doJson(Api.java:181)atsun.reflect.GeneratedMethodAccessor980.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:597)atorg.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:288)atorg.kohsuke.stapler.Function.bindAndInvoke(Function.java:151)atorg.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:90)atorg.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:111)atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:203)atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:384)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:241)atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:488)atorg.kohsuke.stapler.Stapler.service(Stapler.java:162)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:820)Lookingatthecode(gitrev3fb046cc),Iseeline296isreturnmodifiedFiles.size()inthismethod:	@Override	publicCollectionStringgetAffectedPaths(){		returnnewAbstractListString(){			@Override			publicStringget(finalintindex){returnmodifiedFiles.get(index).getPath();			}			@Override			publicintsize(){returnmodifiedFiles.size();			}		};	}IfmodifiedFilesisnull,itwouldcausethebehaviorImseeing.
InChangeLog.javathereappeartobe2placeswherenullispassedinasthemodifiedFilesofChangeLogEntry-lines125and133,handlingmanifestaddsandremovals.