Skip to content

Crashes when viewing a patch #26

@dinhngtu

Description

@dinhngtu

Encountered when viewing xcp-ng/edk2#1:

git-review-rebase ba0e0e4c6a174b71b18ccd6e47319cc45878893c..dnt/xcpng8.3 dnt/edk2-stable202602..dnt/xcpng9

Crash 1 was a "list index out of range" in commit_title, which I worked around using this:

diff --git a/scripts/git-review-rebase/src/git_review_rebase/git_utils.py b/scripts/git-review-rebase/src/git_review_rebase/git_utils.py
index c90e22f..e72d24f 100644
--- a/scripts/git-review-rebase/src/git_review_rebase/git_utils.py
+++ b/scripts/git-review-rebase/src/git_review_rebase/git_utils.py
@@ -36,7 +36,7 @@ def range_log(

 def commit_title(commit: pygit2.Commit) -> str:
     """Given a Commit object, return the commit title."""
-    return commit.message.splitlines()[0]
+    return (commit.message.splitlines() or [""])[0]


 def cached_patchid_ref(revision: str) -> str:

Crash 2 happened whenever I tried to view any patch:

╭────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────╮
│ /home/tu/xcp-ng/hypervisor-dev/scripts/git-review-rebase/src/git_review_rebase/app.py:180 in          │
│ on_data_table_row_selected                                                                            │
│                                                                                                       │
│   177 │   │   │   assert self.rebased_commits_matches is not None                                     │
│   178 │   │   │   assert isinstance(event.row_key.value, pygit2.Oid)                                  │
│   179 │   │   │   match = self.rebased_commits_matches.commit_matches[event.row_key.value]            │
│ ❱ 180 │   │   │   await self._open_diff(match.left_commit, match.right_commit)                        │
│   181 │                                                                                               │
│   182 │   async def on_show_diff(self, message: ShowDiff) -> None:                                    │
│   183 │   │   await self._open_diff(message.left_commit, message.right_commit)                        │
│                                                                                                       │
│ ╭───────────────────────────────────────────── locals ──────────────────────────────────────────────╮ │
│ │ event = RowSelected(cursor_row=0, row_key=RowKey(value=74a537c166c2b74b51112a1b3856681ca3f39455)) │ │
│ │ match = <git_review_rebase.commit_matching.RebasedCommitMatch object at 0x7d6bb426c6d0>           │ │
│ │  self = GitReviewRebase(                                                                          │ │
│ │         │   title='GitReviewRebase',                                                              │ │
│ │         │   classes={'-dark-mode'},                                                               │ │
│ │         │   pseudo_classes={'dark', 'focus'}                                                      │ │
│ │         )                                                                                         │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                       │
│ /home/tu/xcp-ng/hypervisor-dev/scripts/git-review-rebase/src/git_review_rebase/app.py:168 in          │
│ _open_diff                                                                                            │
│                                                                                                       │
│   165 │   │   self.diff_table.styles.height = "80%"                                                   │
│   166 │   │   async with self.diff_table.reload_lock:                                                 │
│   167 │   │   │   self.diff_table.load_commit_diff(left_commit, right_commit)                         │
│ ❱ 168 │   │   │   await self.diff_table.show_diff()                                                   │
│   169 │   │   self.diff_table.focus()                                                                 │
│   170 │   │   self.active_table = self.diff_table                                                     │
│   171 │   │   self.refresh()                                                                          │
│                                                                                                       │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮                   │
│ │  left_commit = <pygit2.Object{commit:74a537c166c2b74b51112a1b3856681ca3f39455}> │                   │
│ │ right_commit = <pygit2.Object{commit:1cf9fb1b623c0a18a91371d742c2d6448aefb587}> │                   │
│ │         self = GitReviewRebase(                                                 │                   │
│ │                │   title='GitReviewRebase',                                     │                   │
│ │                │   classes={'-dark-mode'},                                      │                   │
│ │                │   pseudo_classes={'dark', 'focus'}                             │                   │
│ │                )                                                                │                   │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯                   │
│                                                                                                       │
│ /home/tu/xcp-ng/hypervisor-dev/scripts/git-review-rebase/src/git_review_rebase/ui/diff_table.py:370   │
│ in show_diff                                                                                          │
│                                                                                                       │
│   367 │                                                                                               │
│   368 │   async def show_diff(self) -> None:                                                          │
│   369 │   │   async with self.show_diff_lock:                                                         │
│ ❱ 370 │   │   │   await self._show_diff()                                                             │
│   371 │                                                                                               │
│   372 │   async def _show_diff(self) -> None:                                                         │
│   373 │   │   self.clear(columns=True)                                                                │
│                                                                                                       │
│ ╭────── locals ──────╮                                                                                │
│ │ self = DiffTable() │                                                                                │
│ ╰────────────────────╯                                                                                │
│                                                                                                       │
│ /home/tu/xcp-ng/hypervisor-dev/scripts/git-review-rebase/src/git_review_rebase/ui/diff_table.py:389   │
│ in _show_diff                                                                                         │
│                                                                                                       │
│   386 │   │   )                                                                                       │
│   387 │   │                                                                                           │
│   388 │   │   for line in self.diff:                                                                  │
│ ❱ 389 │   │   │   row = await diff_row_maker.get_row_from_line(line)                                  │
│   390 │   │   │   self.add_row(*row)                                                                  │
│   391                                                                                                 │
│                                                                                                       │
│ ╭──────────────────────────────────────────── locals ────────────────────────────────────────────╮    │
│ │  column_length = 47                                                                            │    │
│ │ diff_row_maker = <git_review_rebase.ui.diff_table.DiffPrettyRowMaker object at 0x7d6bb1b7bcd0> │    │
│ │           line = ' MnpReceivePacket ('                                                         │    │
│ │            row = (                                                                             │    │
│ │                  │   <text '@@ -828,152 +828,145 @@ EFI_STATUS' [] ''>,                        │    │
│ │                  │   <text ' ' [] ''>,                                                         │    │
│ │                  │   <text '@@ -828,152 +828,145 @@ EFI_STATUS' [] ''>                         │    │
│ │                  )                                                                             │    │
│ │           self = DiffTable()                                                                   │    │
│ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯    │
│                                                                                                       │
│ /home/tu/xcp-ng/hypervisor-dev/scripts/git-review-rebase/src/git_review_rebase/ui/diff_table.py:196   │
│ in get_row_from_line                                                                                  │
│                                                                                                       │
│   193 │   │                                                                                           │
│   194 │   │   left_diff_line, middle_char, right_diff_line = (                                        │
│   195 │   │   │   line[: self.middle_point].rstrip() or " ",                                          │
│ ❱ 196 │   │   │   line[self.middle_point],                                                            │
│   197 │   │   │   line[self.middle_point + self.right_first_char_index :],                            │
│   198 │   │   )                                                                                       │
│   199                                                                                                 │
│                                                                                                       │
│ ╭─────────────────────────────────────── locals ───────────────────────────────────────╮              │
│ │ line = ' MnpReceivePacket ('                                                         │              │
│ │ self = <git_review_rebase.ui.diff_table.DiffPrettyRowMaker object at 0x7d6bb1b7bcd0> │              │
│ ╰──────────────────────────────────────────────────────────────────────────────────────╯              │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯
IndexError: string index out of range

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions