Skip to content

GitHub DiffNote importer error: Fails to import when there is no line

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

Problem

When importing kubernetes/kubernetes we noticed a failure when importing a DiffNote https://gitlab.com/gitlab-org/manage/import-and-integrate/discussions/-/issues/61#note_1689481972.

The failure happened when trying to import a comment with id 1014519798 which was on a diff on PR with iid 113599.

This is the note as it appears in the UI: https://github.com/kubernetes/kubernetes/pull/113599#discussion_r1014519798.

This is the data of the API response: https://api.github.com/repositories/20580498/pulls/113599/comments (search for note with id 1014519798).

The error thrown was

"NoMethodError"
"undefined method `-' for nil:NilClass

              end_line - start_line
                       ^"
Click to expand the error stacktrace
exception.backtrace: [
0: "lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb:61:in `line_count'"
1: "lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb:56:in `suggestion_range'"
2: "lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb:35:in `formatted_note'"
3: "lib/gitlab/github_import/representation/diff_note.rb:84:in `note'"
4: "lib/gitlab/github_import/importer/diff_note_importer.rb:105:in `note_body'"
5: "lib/gitlab/github_import/importer/diff_note_importer.rb:93:in `import_with_diff_note'"
6: "lib/gitlab/github_import/importer/diff_note_importer.rb:31:in `execute'"
7: "app/workers/concerns/gitlab/github_import/object_importer.rb:53:in `import'"
8: "app/workers/concerns/gitlab/github_import/rescheduling_methods.rb:39:in `try_import'"
9: "app/workers/concerns/gitlab/github_import/rescheduling_methods.rb:31:in `perform'"
10: "lib/gitlab/sidekiq_middleware/skip_jobs.rb:49:in `call'"
11: "lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb:29:in `call'"
12: "lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing.rb:16:in `perform'"
13: "lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb:44:in `perform'"
14: "lib/gitlab/sidekiq_middleware/duplicate_jobs/server.rb:8:in `call'"
15: "lib/gitlab/sidekiq_middleware/pause_control/strategies/base.rb:31:in `perform'"
16: "lib/gitlab/sidekiq_middleware/pause_control/strategy_handler.rb:22:in `perform'"
17: "lib/gitlab/sidekiq_middleware/pause_control/server.rb:8:in `call'"
18: "lib/gitlab/sidekiq_middleware/worker_context.rb:9:in `wrap_in_optional_context'"
19: "lib/gitlab/sidekiq_middleware/worker_context/server.rb:19:in `block in call'"
20: "lib/gitlab/application_context.rb:130:in `block in use'"
21: "lib/gitlab/application_context.rb:130:in `use'"
22: "lib/gitlab/application_context.rb:64:in `with_context'"
23: "lib/gitlab/sidekiq_middleware/worker_context/server.rb:17:in `call'"
24: "lib/gitlab/sidekiq_status/server_middleware.rb:7:in `call'"
25: "lib/gitlab/sidekiq_versioning/middleware.rb:9:in `call'"
26: "lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `block in call'"
27: "lib/gitlab/database/query_analyzer.rb:37:in `within'"
28: "lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `call'"
29: "lib/gitlab/sidekiq_middleware/admin_mode/server.rb:14:in `call'"
30: "lib/gitlab/sidekiq_middleware/instrumentation_logger.rb:9:in `call'"
31: "lib/gitlab/sidekiq_middleware/batch_loader.rb:7:in `call'"
32: "lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb:7:in `call'"
33: "lib/gitlab/sidekiq_middleware/request_store_middleware.rb:8:in `block in call'"
34: "lib/gitlab/sidekiq_middleware/request_store_middleware.rb:7:in `call'"
35: "lib/gitlab/sidekiq_middleware/server_metrics.rb:105:in `block in call'"
36: "lib/gitlab/sidekiq_middleware/server_metrics.rb:133:in `block in instrument'"
37: "lib/gitlab/metrics/background_transaction.rb:33:in `run'"
38: "lib/gitlab/sidekiq_middleware/server_metrics.rb:133:in `instrument'"
39: "lib/gitlab/sidekiq_middleware/server_metrics.rb:104:in `call'"
40: "lib/gitlab/sidekiq_middleware/monitor.rb:10:in `block in call'"
41: "lib/gitlab/sidekiq_daemon/monitor.rb:46:in `within_job'"
42: "lib/gitlab/sidekiq_middleware/monitor.rb:9:in `call'"
43: "lib/gitlab/sidekiq_middleware/size_limiter/server.rb:13:in `call'"
44: "lib/gitlab/sidekiq_logging/structured_logger.rb:21:in `call'"
]

end_line is assigned the line value from the API response. In the note with ID 1014519798, it has these values:

"start_line": 426,
"line": null,

We should work out how to handle this object.

Edited by 🤖 GitLab Bot 🤖