فهرست منبع

Get issue from event only once

kellda 4 سال پیش
والد
کامیت
3f9280f5d9
1فایلهای تغییر یافته به همراه11 افزوده شده و 20 حذف شده
  1. 11 20
      src/handlers/assign.rs

+ 11 - 20
src/handlers/assign.rs

@@ -88,27 +88,26 @@ async fn handle_input(ctx: &Context, event: &Event, cmd: AssignCommand) -> anyho
         true
     };
 
-    if event.issue().unwrap().is_pr() {
+    let issue = event.issue().unwrap();
+    if issue.is_pr() {
         let username = match &cmd {
             AssignCommand::Own => event.user().login.clone(),
             AssignCommand::User { username } => username.clone(),
             AssignCommand::Release => {
                 log::trace!(
                     "ignoring release on PR {:?}, must always have assignee",
-                    event.issue().unwrap().global_id()
+                    issue.global_id()
                 );
                 return Ok(());
             }
         };
-        if let Err(err) = event
-            .issue()
-            .unwrap()
+        if let Err(err) = issue
             .set_assignee(&ctx.github, &username)
             .await
         {
             log::warn!(
                 "failed to set assignee of PR {} to {}: {:?}",
-                event.issue().unwrap().global_id(),
+                issue.global_id(),
                 username,
                 err
             );
@@ -116,7 +115,7 @@ async fn handle_input(ctx: &Context, event: &Event, cmd: AssignCommand) -> anyho
         return Ok(());
     }
 
-    let e = EditIssueBody::new(&event.issue().unwrap(), "ASSIGN");
+    let e = EditIssueBody::new(&issue, "ASSIGN");
 
     let to_assign = match cmd {
         AssignCommand::Own => event.user().login.clone(),
@@ -132,9 +131,7 @@ async fn handle_input(ctx: &Context, event: &Event, cmd: AssignCommand) -> anyho
             }) = e.current_data()
             {
                 if current == event.user().login || is_team_member {
-                    event
-                        .issue()
-                        .unwrap()
+                    issue
                         .remove_assignees(&ctx.github, Selection::All)
                         .await?;
                     e.apply(&ctx.github, String::new(), AssignData { user: None })
@@ -145,10 +142,8 @@ async fn handle_input(ctx: &Context, event: &Event, cmd: AssignCommand) -> anyho
                 }
             } else {
                 let current = &event.user();
-                if event.issue().unwrap().contain_assignee(current) {
-                    event
-                        .issue()
-                        .unwrap()
+                if issue.contain_assignee(current) {
+                    issue
                         .remove_assignees(&ctx.github, Selection::One(&current))
                         .await?;
                     e.apply(&ctx.github, String::new(), AssignData { user: None })
@@ -166,17 +161,13 @@ async fn handle_input(ctx: &Context, event: &Event, cmd: AssignCommand) -> anyho
 
     e.apply(&ctx.github, String::new(), &data).await?;
 
-    match event
-        .issue()
-        .unwrap()
+    match issue
         .set_assignee(&ctx.github, &to_assign)
         .await
     {
         Ok(()) => return Ok(()), // we are done
         Err(github::AssignmentError::InvalidAssignee) => {
-            event
-                .issue()
-                .unwrap()
+            issue
                 .set_assignee(&ctx.github, &ctx.username)
                 .await
                 .context("self-assignment failed")?;