Closed henryju closed 8 years ago
@mjdetullio Thanks for testing. I'm a bit surprised of the failure on CE side since the message Ignoring blame result since provider returned 63 blame lines but file [redacted] has 62 lines
should mean the file is completely skipped (and so should not be processed by compute engine. Are you testing from scratch (ie from a new project) or do you have existing data for the same project in SQ server?
SQ 5.2, new project.
On that note, an existing project in our production SQ 5.2 started failing with the Changeset must have a date
error in CE after testing this PR when it was not failing before. I only noticed this just yesterday. After reverting back to current master
branch, it was fine again.
Testing with a local SQ 5.3-RC2 instance, this PR, and as a new project, it now fails during analysis and not in CE. No apparent error message, even with sonar.verbose=true
. Analysis seems to stop on the problem file without noting which one it is. Adding the -e
argument to the runner (or --stacktrace
to Gradle) reveals the same problem... Blame date is null for file [redacted] at line 22
.
Note that this file shows no issues when running the p4 filelog
and p4 annotate
commands that are equivalent of those used in p4java
, so it's not related to the other Perforce bug I mentioned. I can go to the changelist assigned for that line using P4V and there is indeed a "date submitted" there.
11:07:44.306 INFO - Sensor SCM Sensor (wrapped)
11:07:44.310 INFO - SCM provider for this project is: perforce
11:07:44.315 INFO - 2445 files to be analyzed
11:07:44.316 DEBUG - Working directory: /Users/mjdetullio/redacted-project
11:07:44.815 DEBUG - info
11:07:45.108 DEBUG - Command completed in 711ms
11:07:45.119 DEBUG - login -s
11:07:45.547 DEBUG - Command completed in 434ms
11:07:45.549 DEBUG - User mjdetullio ticket expires in 11 hours 59 minutes.
11:07:45.550 DEBUG - User mjdetullio ticket expires in 11 hours 59 minutes.
11:07:45.557 DEBUG - client -o myp4client
11:07:46.150 DEBUG - Command completed in 600ms
11:07:46.184 DEBUG - where /Users/mjdetullio/redacted-project
11:07:46.594 DEBUG - Command completed in 417ms
11:07:46.605 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:47.052 DEBUG - Command completed in 453ms
11:07:47.096 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:47.719 DEBUG - Command completed in 665ms
11:07:47.735 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:48.382 DEBUG - Command completed in 653ms
11:07:48.390 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:48.898 DEBUG - Command completed in 516ms
11:07:49.028 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:49.546 DEBUG - Command completed in 647ms
11:07:49.553 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:50.021 DEBUG - Command completed in 474ms
11:07:50.028 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:50.568 DEBUG - Command completed in 546ms
11:07:50.575 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:50.971 DEBUG - Command completed in 402ms
11:07:50.978 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:51.384 DEBUG - Command completed in 412ms
11:07:51.391 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:51.821 DEBUG - Command completed in 437ms
11:07:51.829 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:52.234 DEBUG - Command completed in 411ms
11:07:52.240 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:52.654 DEBUG - Command completed in 420ms
11:07:52.662 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:53.082 DEBUG - Command completed in 426ms
11:07:53.088 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:53.485 DEBUG - Command completed in 403ms
11:07:53.492 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:53.910 DEBUG - Command completed in 424ms
11:07:53.918 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:54.278 DEBUG - Command completed in 367ms
11:07:54.286 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:07:54.315 INFO - 8/2445 files analyzed
... omitted for brevity - nothing useful here ...
11:08:04.317 INFO - 18/2445 files analyzed
... omitted for brevity - nothing useful here ...
11:08:14.318 INFO - 29/2445 files analyzed
... omitted for brevity - nothing useful here ...
11:08:24.320 INFO - 40/2445 files analyzed
... omitted for brevity - nothing useful here ...
11:08:34.320 INFO - 51/2445 files analyzed
11:08:34.536 DEBUG - Command completed in 424ms
11:08:34.543 DEBUG - annotate -c -i -db /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:08:34.961 DEBUG - Command completed in 425ms
11:08:34.967 DEBUG - filelog -i /Users/mjdetullio/redacted-project/redacted-file.ext#have
11:08:35.366 DEBUG - Command completed in 405ms
11:08:35.368 INFO - 52/2445 files analyzed
11:08:35.368 WARN - Missing blame information for the following files:
11:08:35.368 WARN - * /Users/mjdetullio/redacted-project/redacted-file.ext
... list of remaining 2393 files in the index that were not blamed yet ...
11:08:35.433 WARN - * /Users/mjdetullio/redacted-project/redacted-file.ext
11:08:35.433 WARN - This may lead to missing/broken features in SonarQube
11:08:35.435 INFO - Analysis report generated in /Users/mjdetullio/redacted-project/build/sonar/batch-report
:sonarqube FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':sonarqube'.
> Unable to execute Sonar
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':sonarqube'.
... omitted for brevity ...
Caused by: org.sonar.runner.impl.RunnerException: Unable to execute Sonar
... omitted for brevity ...
Caused by: java.lang.IllegalArgumentException: Blame date is null for file [redacted] at line 22
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:148)
at org.sonar.batch.scm.DefaultBlameOutput.validateLine(DefaultBlameOutput.java:105)
at org.sonar.batch.scm.DefaultBlameOutput.blameResult(DefaultBlameOutput.java:87)
at org.sonar.plugins.scm.perforce.PerforceBlameCommand.computeBlame(PerforceBlameCommand.java:119)
at org.sonar.plugins.scm.perforce.PerforceBlameCommand.blame(PerforceBlameCommand.java:96)
at org.sonar.plugins.scm.perforce.PerforceBlameCommand.blame(PerforceBlameCommand.java:62)
at org.sonar.batch.scm.ScmSensor.execute(ScmSensor.java:84)
... omitted for brevity ...
BUILD FAILED
This is giving me more trouble than I expected. There is no combination of p4 filelog
arguments that will give ALL possible changelist numbers given by p4 annotate
. Adding the -h
option to filelog will show some CLs needed by one file and work fine, but then it hides CLs needed for others.
The only way it's possible to get authors/dates for all revisions is to build a list of revisions from the annotate command and then get info for each of those revisions. What a nightmare.
Hi all! @henryju sent me here in response to an issue I've been having with Perforce SCM since 5.2, which I've been discussing on the Google Group. I'm now running 5.3-RC2 and just pulled the perforce plugin snapshot (1.3-rc1).
This is what I'm getting now when running the analysis (client side):
[INFO] [08:40:02.628] Sensor SCM Sensor (wrapped)
[INFO] [08:40:02.628] SCM provider for this project is: perforce
[INFO] [08:40:02.628] 2 files to be analyzed
[DEBUG] [08:40:02.628] Working directory: D:\jenkins\jenkins-05\workspace\prodcore-trunk-funcTests-sonar\dev\services\coreservice\core
[DEBUG] [08:40:02.753] info
[DEBUG] [08:40:02.753] Command completed in 31ms
[DEBUG] [08:40:02.769] client -o prodcore-trunk-funcTests-sonar--1491847797
[DEBUG] [08:40:02.769] Command completed in 0ms
[DEBUG] [08:40:02.785] where D:\jenkins\jenkins-05\workspace\prodcore-trunk-funcTests-sonar\dev\services\coreservice\core
[DEBUG] [08:40:02.800] Command completed in 15ms
[DEBUG] [08:40:02.800] annotate -c -i -db D:/jenkins/jenkins-05/workspace/prodcore-trunk-funcTests-sonar/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#have
[DEBUG] [08:40:03.097] Command completed in 297ms
[DEBUG] [08:40:03.097] change -o 888936
[DEBUG] [08:40:03.113] Command completed in 16ms
[DEBUG] [08:40:03.113] change -o 878541
[DEBUG] [08:40:03.113] Command completed in 0ms
[DEBUG] [08:40:03.113] change -o 106336
[DEBUG] [08:40:03.160] Command completed in 47ms
[DEBUG] [08:40:03.160] change -o 106385
[DEBUG] [08:40:03.160] Command completed in 0ms
[ERROR] [08:40:03.160] Change 106385 unknown.
[INFO] [08:40:03.160] 0/2 files analyzed
[WARN] [08:40:03.160] Missing blame information for the following files:
[WARN] [08:40:03.160] * D:/jenkins/jenkins-05/workspace/prodcore-trunk-funcTests-sonar/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java
[WARN] [08:40:03.160] * D:/jenkins/jenkins-05/workspace/prodcore-trunk-funcTests-sonar/dev/services/coreservice/core/src/test/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverterTestCase.java
[WARN] [08:40:03.160] This may lead to missing/broken features in SonarQube
The error here is "Change 106385 unknown.". This changelist is from a different Perforce server (it was imported by branching from one linked server to another), so it can't be queried. The same goes for the prior one, 106336 -- this changelist happens to exist on both, but it's the WRONG CHANGELIST if you query it on this server! IT MUST NOT BE INCLUDED.
When you were previously using p4 filelog, these changelists would have shown as being checked in by remote@remote (user@workspace), which tells you that it can be ignored. However when you're using just p4 annotate there's no way to know that, so you've now lost some information.
Here's what the filelog looks like for this file the way that the 1.2 plugin runs it:
//our_product/trunk/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java
... #6 change 911479 edit on 2015/11/19 by jons@jons-prd-trunk (text+ko) 'Rally US803. Maps the legacy ty'
... #5 change 888936 edit on 2015/07/20 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Add IDEA copyright settings fil'
... ... branch into //our_product/Haifa/trunk/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1
... ... branch into //our_product/branches/12.2/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1
... ... branch into //users/davisa/prd/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1
... #4 change 888919 edit on 2015/07/20 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Address a lot of major SonarQub'
... #3 change 888362 edit on 2015/07/14 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Replace all tab characters with'
... #2 change 880692 edit on 2015/05/26 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Add PMD static code analysis in'
... #1 change 878541 move/add on 2015/05/11 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Move to com.ourcompany and bett'
... ... moved from //our_product/trunk/dev/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1
//our_product/trunk/dev/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java
... #1 change 878223 move/add on 2015/05/08 by tyrelha@tyrel3-everything (text+ko) 'Move files into dev '
... ... moved into //our_product/trunk/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1
... ... moved from //our_product/trunk/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1
//our_product/trunk/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java
... #1 change 878215 import on 2015/05/08 by tyrelha@tyrel3-everything (text+ko) 'Initial integration of code int'
... ... branch from //OurProduct_1666/Trunk/Dev/com/cmp/prd/server/resources/LegacyTypeConverter.java#1,#4
... ... moved into //our_product/trunk/dev/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1
//OurProduct_1666/Trunk/Dev/com/cmp/prd/server/resources/LegacyTypeConverter.java
... #4 change 106385 edit on 2015/03/27 by remote@remote (text+ko)
... ... branch into //OurProduct/Trunk/Dev/com/cmp/prd/server/resources/LegacyTypeConverter.java#1
... ... branch into //our_product/trunk/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1
... #3 change 106360 edit on 2015/03/23 by remote@remote (text+ko)
... #2 change 106339 edit on 2015/03/17 by remote@remote (text+ko)
... #1 change 106336 add on 2015/03/16 by remote@remote (text+ko)
All of the changelists from remote@remote should be ignored.
So then what's the best solution? Like I said, p4 filelog doesn't always produce a complete list of CLs.
Should p4 filelog still be used and then fall back to p4 change if the change isn't found? What if it's still not found by p4 change?
Because of SQ 5.2+'s requirement of date and author for each line, we need to settle on a way to populate data for these edge cases. On Jan 5, 2016 11:55 AM, "Tyrel Haveman" notifications@github.com wrote:
Hi all! @henryju https://github.com/henryju sent me here in response to an issue I've been having with Perforce SCM since 5.2, which I've been discussing on the Google Group. I'm now running 5.3-RC2 and just pulled the perforce plugin snapshot (1.3-rc1).
This is what I'm getting now when running the analysis (client side):
[INFO] [08:40:02.628] Sensor SCM Sensor (wrapped) [INFO] [08:40:02.628] SCM provider for this project is: perforce [INFO] [08:40:02.628] 2 files to be analyzed [DEBUG] [08:40:02.628] Working directory: D:\jenkins\jenkins-05\workspace\prodcore-trunk-funcTests-sonar\dev\services\coreservice\core [DEBUG] [08:40:02.753] info [DEBUG] [08:40:02.753] Command completed in 31ms [DEBUG] [08:40:02.769] client -o prodcore-trunk-funcTests-sonar--1491847797 [DEBUG] [08:40:02.769] Command completed in 0ms [DEBUG] [08:40:02.785] where D:\jenkins\jenkins-05\workspace\prodcore-trunk-funcTests-sonar\dev\services\coreservice\core [DEBUG] [08:40:02.800] Command completed in 15ms [DEBUG] [08:40:02.800] annotate -c -i -db D:/jenkins/jenkins-05/workspace/prodcore-trunk-funcTests-sonar/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#have [DEBUG] [08:40:03.097] Command completed in 297ms [DEBUG] [08:40:03.097] change -o 888936 [DEBUG] [08:40:03.113] Command completed in 16ms [DEBUG] [08:40:03.113] change -o 878541 [DEBUG] [08:40:03.113] Command completed in 0ms [DEBUG] [08:40:03.113] change -o 106336 [DEBUG] [08:40:03.160] Command completed in 47ms [DEBUG] [08:40:03.160] change -o 106385 [DEBUG] [08:40:03.160] Command completed in 0ms [ERROR] [08:40:03.160] Change 106385 unknown. [INFO] [08:40:03.160] 0/2 files analyzed [WARN] [08:40:03.160] Missing blame information for the following files: [WARN] [08:40:03.160] * D:/jenkins/jenkins-05/workspace/prodcore-trunk-funcTests-sonar/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java [WARN] [08:40:03.160] * D:/jenkins/jenkins-05/workspace/prodcore-trunk-funcTests-sonar/dev/services/coreservice/core/src/test/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverterTestCase.java [WARN] [08:40:03.160] This may lead to missing/broken features in SonarQube
The error here is "Change 106385 unknown.". This changelist is from a different Perforce server (it was imported by branching from one linked server to another), so it can't be queried. The same goes for the prior one, 106336 -- this changelist happens to exist on both, but it's the WRONG CHANGELIST if you query it on this server! IT MUST NOT BE INCLUDED.
When you were previously using p4 filelog, these changelists would have shown as being checked in by remote@remote (user@workspace), which tells you that it can be ignored. However when you're using just p4 annotate there's no way to know that, so you've now lost some information.
Here's that the filelog looks like for this file the way that the 1.2 plugin runs it:
//our_product/trunk/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java ... #6 change 911479 edit on 2015/11/19 by jons@jons-prd-trunk (text+ko) 'Rally US803. Maps the legacy ty' ... #5 change 888936 edit on 2015/07/20 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Add IDEA copyright settings fil' ... ... branch into //our_product/Haifa/trunk/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1 ... ... branch into //our_product/branches/12.2/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1 ... ... branch into //users/davisa/prd/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1 ... #4 change 888919 edit on 2015/07/20 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Address a lot of major SonarQub' ... #3 change 888362 edit on 2015/07/14 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Replace all tab characters with' ... #2 change 880692 edit on 2015/05/26 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Add PMD static code analysis in' ... #1 change 878541 move/add on 2015/05/11 by tyrelha@tyrel3-prdcore-trunk (text+ko) 'Move to com.ourcompany and bett' ... ... moved from //our_product/trunk/dev/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1 //our_product/trunk/dev/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java ... #1 change 878223 move/add on 2015/05/08 by tyrelha@tyrel3-everything (text+ko) 'Move files into dev ' ... ... moved into //our_product/trunk/dev/services/coreservice/core/src/main/java/com/ourcompany/ourprod/core/resources/LegacyTypeConverter.java#1 ... ... moved from //our_product/trunk/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1 //our_product/trunk/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java ... #1 change 878215 import on 2015/05/08 by tyrelha@tyrel3-everything (text+ko) 'Initial integration of code int' ... ... branch from //OurProduct_1666/Trunk/Dev/com/cmp/prd/server/resources/LegacyTypeConverter.java#1,#4 ... ... moved into //our_product/trunk/dev/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1 //OurProduct_1666/Trunk/Dev/com/cmp/prd/server/resources/LegacyTypeConverter.java ... #4 change 106385 edit on 2015/03/27 by remote@remote (text+ko) ... ... branch into //OurProduct/Trunk/Dev/com/cmp/prd/server/resources/LegacyTypeConverter.java#1 ... ... branch into //our_product/trunk/services/coreservice/core/src/main/java/com/cmp/prd/server/resources/LegacyTypeConverter.java#1 ... #3 change 106360 edit on 2015/03/23 by remote@remote (text+ko) ... #2 change 106339 edit on 2015/03/17 by remote@remote (text+ko) ... #1 change 106336 add on 2015/03/16 by remote@remote (text+ko)
All of the changelists from remote@remote should be ignored.
— Reply to this email directly or view it on GitHub https://github.com/SonarSource/sonar-scm-perforce/pull/7#issuecomment-169059905 .
In my opinion, SQ must not require a date and author for each line of code. Sometimes (like here, with imported source control data), that's simply not available.
Alternatively, instead of p4 change -o ####, you could try p4 filelog -c ####, which would just return the filelog for that changelist. Hopefully in the case if imported changelists it will show remote@remote which will be sufficient information.
Can you verify that functionality of p4 filelog -c
with your imported
changelists? If it gives you your intended results I'll prototype it with
my projects.
On Jan 5, 2016 12:40 PM, "Tyrel Haveman" notifications@github.com wrote:
Alternatively, instead of p4 change -o ####, you could try p4 filelog -c
, which would just return the filelog for that changelist. Hopefully in
the case if imported changelists it will show remote@remote which will be sufficient information.
— Reply to this email directly or view it on GitHub https://github.com/SonarSource/sonar-scm-perforce/pull/7#issuecomment-169076637 .
Sorry, filelog -c doesn't do what I thought it would do.
I noticed that IntelliJ IDEA I can annotate the file I posted info about earlier, and it shows a username on every line, even though many of them are from imported revisions. It's displaying my own username; that could either because I was the one that imported it or because I'm the current user. I will investigate how it is doing this and get back to you.
Based on what I'm seeing in IDEA, it looks like it's using annotate -I
rather than annotate -i
. The changelist numbers its showing are consistent with that. Does that seem like an unreasonable thing to do here?
You can use -I
instead of -i
(you can only use one or the other) by changing options.setFollowBranches(true)
to options.setFollowAllIntegrations(true)
. I tried this before and didn't notice much of a difference in results.
If you can rebuild from source with that change and report back results it would be useful.
Good news! I pulled the branch feature/ignore_unsubmitted_files
, changed it to use options.setFollowAllIntegrations(true)
as you suggested, and it works great. We're getting source control information in SonarQube for the first time in a few months!
By the way, the Perforce documentation says that -c
is implied with either -i
or -I
, so you can remove the call to options.setUseChangeNumbers(true)
.
Alright, I can live with that. -I
works fine for me as well. Opened additional PR. Hopefully that gives us a solid 1.3 release.
Outstanding! Thanks @mjdetullio
Properly skips unsubmitted files, allowing analysis to complete, but still got the
Changeset must have a date
error in the Compute Engine. I haven't tested it with a 5.3 RC that has the new logging yet though. Going to try that to get the file that is failing in CE.The warning at the end of the analysis reported missing info for two files, one was my unsubmitted file and the other was submitted with only one revision. There is a Perforce bug (I won't go into detail) that results in the null date. The logs for it report
Ignoring blame result since provider returned 63 blame lines but file [redacted] has 62 lines
, which would be correct since the bug occurs on one line. I just feel as if this should not cause a CE failure.