GraphQL - expose full merge request diff stats
## Problem
The current GraphQL interface doesn't expose enough information about what files have changed in an MR. This makes it unusable for representing the whole MR diff.
Example DiffStats response:
```json
{
"additions": 2,
"deletions": 5,
"path": "test.js"
}
```
From this response **it's impossible to know whether the file has been moved, deleted or created**. That is important when representing the diff. We can't show the old file in the diff without knowing its path.
## Proposal
At the very least, we should add `oldPath` and `newPath` to the `DiffStats` model.
## Detailed explanation
It's possible to ask for the [`DiffStats`](https://docs.gitlab.com/ee/api/graphql/reference/#diffstats).
Query:
```graphql
{
project(fullPath:"viktomas/test-project"){
mergeRequest(iid: "1"){
diffStats{
additions
deletions
path
}
}
}
}
```
Response:
```json
{
"data": {
"project": {
"mergeRequest": {
"diffStats": [
{
"additions": 0,
"deletions": 0,
"path": "README1.md"
},
{
"additions": 2,
"deletions": 5,
"path": "test.js"
}
]
}
}
}
}
```
This is used for the left file tree in our web interface:

### Compare that with the REST API
```sh
curl -H "Authorization: Bearer $TOKEN" 'https://gitlab.com/api/v4/projects/20486274/merge_requests/1/versions/123390038' | jq
```
Response:
```json
{
...
"diffs": [
{
"old_path": "README.md",
"new_path": "README1.md",
"a_mode": "100644",
"b_mode": "100644",
"new_file": false,
"renamed_file": true,
"deleted_file": false,
"diff": ""
},
{
"old_path": "test.js",
"new_path": "test.js",
"a_mode": "100644",
"b_mode": "100644",
"new_file": false,
"renamed_file": false,
"deleted_file": false,
"diff": "@@ -13,14 +13,11 @@\n function containingFunction(){\n function subFunction(){\n console.log(\"Some Output\");\n+ console.log(\"Some Output1\");\n }\n // Issue is not present when the line after the function name and opening { is empty\n function subFunction(){\n \n- console.log(\"OPutput\");\n+ console.log(\"Output\");\n }\n }\n-\n-function anotherFunction(){\n- console.log(\"Other Output\");\n-}\n"
}
]
}
```
issue