• Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • integrity-plugin
    • None
    • Windows

      We have for all build jobs configurations the following settings:

      • Integrity - CM Configuration Name set as ${env['JOB_NAME']}
      • Integrity - CM Checkpoint Configuration Name set as ${env['JOB_NAME']}

      When checkpoint is executed at post build step for project related to job XYZ and at the same time another job ABC is doing resynchronization (and ABC may be was started earlier but still running), checkpoint is executed for project related to the job ABC with label defined in the build for XYZ.

      By the way, PTC is really slow on our side.

          [JENKINS-25629] Checkpoints are done against wrong project!

          Code changed in jenkins
          User: Cletus D'Souza
          Path:
          src/main/java/hudson/scm/IntegritySCM.java
          src/main/resources/hudson/scm/IntegritySCM/config.jelly
          http://jenkins-ci.org/commit/integrity-plugin/ed1cb6651df4e233778a9418c749073918b326bf
          Log:
          Integrity Configuration Names are now enforced to be unique
          JENKINS-25629 - Checkpoints are done against wrong project!
          JENKINS-22066 - PTC plugin has massive memory leak if scm names are not
          unique

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Cletus D'Souza Path: src/main/java/hudson/scm/IntegritySCM.java src/main/resources/hudson/scm/IntegritySCM/config.jelly http://jenkins-ci.org/commit/integrity-plugin/ed1cb6651df4e233778a9418c749073918b326bf Log: Integrity Configuration Names are now enforced to be unique JENKINS-25629 - Checkpoints are done against wrong project! JENKINS-22066 - PTC plugin has massive memory leak if scm names are not unique

          I've implemented a uniqueness check to ensure Configuration Names are unique. This should not be happening anymore.

          Cletus D'Souza added a comment - I've implemented a uniqueness check to ensure Configuration Names are unique. This should not be happening anymore.

          I have tried new version of the Plugin today. It does not work at all.
          Attempt to build old build jobs fails because of the NullPointerException during beginning of the build.
          Configuration of the new jobs impossible to save because of the another NullPointerException which happened during attempt to save!

          Old build jobs NullPointerException happend during the build:

          [EnvInject] - Loading node environment variables.
          [EnvInject] - Preparing an environment for the build.
          [EnvInject] - Keeping Jenkins system variables.
          [EnvInject] - Keeping Jenkins build variables.
          [EnvInject] - Injecting as environment variables the properties content
          . . .
          [EnvInject] - Variables injected successfully.
          [EnvInject] - Injecting contributions.
          BuildingFATAL: null
          java.lang.NullPointerException
          at hudson.scm.IntegritySCM.buildEnvVars(IntegritySCM.java:463)
          at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:910)
          at hudson.model.AbstractBuild$AbstractBuildExecution.decideWorkspace(AbstractBuild.java:477)
          at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:517)
          at hudson.model.Run.execute(Run.java:1759)
          at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
          at hudson.model.ResourceController.execute(ResourceController.java:89)
          at hudson.model.Executor.run(Executor.java:240)

          NullPointerException during saving of the new job configuration

          Stack trace

          javax.servlet.ServletException: java.lang.NullPointerException
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
          at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
          at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
          at hudson.plugins.audit_trail.AuditTrailFilter.doFilter(AuditTrailFilter.java:95)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:99)
          at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
          at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
          at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
          at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
          at org.eclipse.jetty.server.Server.handle(Server.java:370)
          at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
          at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960)
          at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021)
          at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
          at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
          at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
          at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
          at java.lang.Thread.run(Unknown Source)
          Caused by: java.lang.NullPointerException
          at hudson.scm.IntegritySCM$DescriptorImpl.newInstance(IntegritySCM.java:970)
          at hudson.scm.IntegritySCM$DescriptorImpl.newInstance(IntegritySCM.java:927)
          at hudson.scm.SCMS.parseSCM(SCMS.java:63)
          at hudson.model.AbstractProject.submit(AbstractProject.java:1856)
          at hudson.model.Project.submit(Project.java:224)
          at hudson.model.Job.doConfigSubmit(Job.java:1188)
          at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:780)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
          at java.lang.reflect.Method.invoke(Unknown Source)
          at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
          at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
          at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
          at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          ... 65 more

          Grigoriy Milman added a comment - I have tried new version of the Plugin today. It does not work at all. Attempt to build old build jobs fails because of the NullPointerException during beginning of the build. Configuration of the new jobs impossible to save because of the another NullPointerException which happened during attempt to save! Old build jobs NullPointerException happend during the build: [EnvInject] - Loading node environment variables. [EnvInject] - Preparing an environment for the build. [EnvInject] - Keeping Jenkins system variables. [EnvInject] - Keeping Jenkins build variables. [EnvInject] - Injecting as environment variables the properties content . . . [EnvInject] - Variables injected successfully. [EnvInject] - Injecting contributions. BuildingFATAL: null java.lang.NullPointerException at hudson.scm.IntegritySCM.buildEnvVars(IntegritySCM.java:463) at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:910) at hudson.model.AbstractBuild$AbstractBuildExecution.decideWorkspace(AbstractBuild.java:477) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:517) at hudson.model.Run.execute(Run.java:1759) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:89) at hudson.model.Executor.run(Executor.java:240) NullPointerException during saving of the new job configuration Stack trace javax.servlet.ServletException: java.lang.NullPointerException at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649) at org.kohsuke.stapler.Stapler.service(Stapler.java:238) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96) at hudson.plugins.audit_trail.AuditTrailFilter.doFilter(AuditTrailFilter.java:95) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:99) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NullPointerException at hudson.scm.IntegritySCM$DescriptorImpl.newInstance(IntegritySCM.java:970) at hudson.scm.IntegritySCM$DescriptorImpl.newInstance(IntegritySCM.java:927) at hudson.scm.SCMS.parseSCM(SCMS.java:63) at hudson.model.AbstractProject.submit(AbstractProject.java:1856) at hudson.model.Project.submit(Project.java:224) at hudson.model.Job.doConfigSubmit(Job.java:1188) at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:780) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96) at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) ... 65 more

          Please review change logs for new plugin releases - https://wiki.jenkins-ci.org/display/JENKINS/PTC+Integrity+Plugin#PTCIntegrityPlugin-Version1.29%28Feb03%2C2015%29

          I've been pretty explicit about the warning that this version will not work with old data.

          Cletus D'Souza added a comment - Please review change logs for new plugin releases - https://wiki.jenkins-ci.org/display/JENKINS/PTC+Integrity+Plugin#PTCIntegrityPlugin-Version1.29%28Feb03%2C2015%29 I've been pretty explicit about the warning that this version will not work with old data.

          By the way, is it now OK to use Integrity - CM Configuration Name set as ${env['JOB_NAME']}

          Grigoriy Milman added a comment - By the way, is it now OK to use Integrity - CM Configuration Name set as ${env ['JOB_NAME'] }

          To ensure uniqueness, the plugin scans through all instances of the IntegritySCM plugin when a new job is created. Basically all jobs that use the Integrity plugin. Hence as you create a new job the old job data (from different existing jobs) have to be loaded. Due to the nature of changes in this plugin, it couldn't be backward compatible. So, we get the null pointer exception.

          No, it is not OK to use environment variables for the Configuration Name. The Configuration Name needs to be unique as some folks want to use this plugin inside of the Multiple SCM plugin.

          Cletus D'Souza added a comment - To ensure uniqueness, the plugin scans through all instances of the IntegritySCM plugin when a new job is created. Basically all jobs that use the Integrity plugin. Hence as you create a new job the old job data (from different existing jobs) have to be loaded. Due to the nature of changes in this plugin, it couldn't be backward compatible. So, we get the null pointer exception. No, it is not OK to use environment variables for the Configuration Name. The Configuration Name needs to be unique as some folks want to use this plugin inside of the Multiple SCM plugin.

          Daniel Beck added a comment - - edited

          In general backwards-incompatible plugin releases (if they cannot be prevented by means such as readResolve'ing into new types etc.) should be indicated by:

          Daniel Beck added a comment - - edited In general backwards-incompatible plugin releases (if they cannot be prevented by means such as readResolve'ing into new types etc.) should be indicated by: a new major version (e.g. Subversion Plugin 2.0 to indicate overhaul of the authentication system) to indicate a major, potentially incompatible change of some kind, and/or at least marked as such in the plugin metadata (see e.g. https://github.com/jenkinsci/build-flow-plugin/blob/master/pom.xml#L106 or https://github.com/jenkinsci/ldap-plugin/blob/master/pom.xml#L121 ) so users see a compatibility warning in plugin manager.

          Good to know about the major version number, I will keep that in mind.

          Not sure In understand your examples in the second point - are you saying I need to add the maven-hpi-plugin in the build/plugin section of the integrity-plugin's pom.xml?

          Cletus D'Souza added a comment - Good to know about the major version number, I will keep that in mind. Not sure In understand your examples in the second point - are you saying I need to add the maven-hpi-plugin in the build/plugin section of the integrity-plugin's pom.xml?

          Daniel Beck added a comment -

          Not sure In understand your examples in the second point - are you saying I need to add the maven-hpi-plugin in the build/plugin section of the integrity-plugin's pom.xml?

          Yes. To clarify, it's not really adding the plugin, as you get it from your plugin's parent pom anyway – otherwise, you wouldn't bundle as HPI/JPI – you just configure it.

          For more information, see https://wiki.jenkins-ci.org/display/JENKINS/Marking+a+new+plugin+version+as+incompatible+with+older+versions

          Daniel Beck added a comment - Not sure In understand your examples in the second point - are you saying I need to add the maven-hpi-plugin in the build/plugin section of the integrity-plugin's pom.xml? Yes. To clarify, it's not really adding the plugin, as you get it from your plugin's parent pom anyway – otherwise, you wouldn't bundle as HPI/JPI – you just configure it. For more information, see https://wiki.jenkins-ci.org/display/JENKINS/Marking+a+new+plugin+version+as+incompatible+with+older+versions

          Done. This will probably go into effect when the next release is done.

          Thanks!

          Cletus D'Souza added a comment - Done. This will probably go into effect when the next release is done. Thanks!

            cdsouza Cletus D'Souza
            gremlm Grigoriy Milman
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: