Merge Request UI does not count all adds/removals for large commits
Summary
- a customer noticed a significant difference between the Merge Request UI and the GraphQL API when viewing line differences.
- an MR with 30k+ additions, 20k- deletions shows to have +637 -61 in the MR UI
- same MR shows +34720 additions and -21580 deletions with the GraphQL API
Steps to reproduce
Have not been able to reproduce this in test systems, but perhaps the reproduction methods are not good enough? Here is what I tried:
- Generate a lot of adds and deletes in a file, for diffing
Click to expand a script which mangles files
require 'fileutils'
def generate_file(filename, lines, additions, deletions)
content = (1..lines).map { |i| "Line #{i}" }
# Make random alterations within lines
(additions + deletions).times do
line_index = rand(content.length)
line = content[line_index]
# Choose whether to add or delete characters
action = rand(2) == 0 ? :add : :delete
if action == :add
# Insert a random character at a random position
position = rand(line.length)
line.insert(position, ('a'..'z').to_a.sample)
else
# Delete a random character
line.slice!(rand(line.length))
end
content[line_index] = line
end
File.write(filename, content.join("\n"))
end
# Create a directory for the generated files
FileUtils.mkdir_p('generated_files')
# Generate a file with 30,000 lines, 10,000 additions, and 5,000 deletions
generate_file('generated_files/large_file.txt', 30000, 10000, 5000)
puts "Generated file: generated_files/large_file.txt"
- Add the file to a git project, then make a branch, repeat the script to generate a differnt file, add than in an MR
- Review the Commits tab of the MR page.
- Run a graphql for the same MR
Click to expand GraphQL query
query ($fullPath: ID!, $mrIid: String!) {
project(fullPath: $fullPath) {
mergeRequest(iid: $mrIid) {
id
iid
title
sourceBranch
targetBranch
diffStatsSummary {
additions
deletions
changes
fileCount
}
}
}
}
Example Project
What is the current bug behavior?
- an MR with 30k+ additions, 20k- deletions shows to have +637 -61 in the MR UI. It appears as if not all of the lines are counted, or perhaps the MR metrics are stale?
What is the expected correct behavior?
Summary should show the actual number of lines added and deleted in the commits for the MR.
Relevant logs and/or screenshots
Output of checks
Results of GitLab environment info
Expand for output related to GitLab environment info
(For installations with omnibus-gitlab package run and paste the output of: `sudo gitlab-rake gitlab:env:info`) (For installations from source run and paste the output of: `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)
Results of GitLab application Check
Expand for output related to the GitLab application check
(For installations with omnibus-gitlab package run and paste the output of:
sudo gitlab-rake gitlab:check SANITIZE=true
)(For installations from source run and paste the output of:
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production SANITIZE=true
)(we will only investigate if the tests are passing)
Possible fixes
Edited by Mike Lockhart | GitLab