func (arc Arcanist) mirrorCommentsIntoReview(repo repository.Repo, review differentialReview, comments comment.CommentMap) { existingComments := review.LoadComments() newComments := comments.FilterOverlapping(existingComments) var lastCommitForLastDiff string var latestDiffForReview int commitToDiffMap := make(map[string]string) for _, diffIDString := range review.Diffs { lastCommit := findCommitForDiff(diffIDString) commitToDiffMap[lastCommit] = diffIDString diffID, err := strconv.Atoi(diffIDString) if err == nil && diffID > latestDiffForReview { lastCommitForLastDiff = lastCommit latestDiffForReview = diffID } } report := ci.GetLatestCIReport(repo.GetNotes(ci.Ref, repository.Revision(lastCommitForLastDiff))) log.Printf("The latest CI report for diff %d is %+v ", latestDiffForReview, report) if report.URL != "" { unitDiffProperty := differentialUnitDiffProperty{ Name: report.Agent, Link: report.URL, Result: translateReportStatusToDifferentialUnitResult(report.Status), } // Note that although the unit tests property is a JSON object, Phabricator // expects there to be a list of such objects for any given diff. Therefore // we wrap the object in a list before marshaling it to send to the server. // TODO(ojarjur): We should take advantage of the fact that this is a list, // and include the latest CI report for each agent. That would allow us to // display results from multiple test runners in a code review. propertyBytes, err := json.Marshal([]differentialUnitDiffProperty{unitDiffProperty}) if err == nil { err = arc.setDiffProperty(latestDiffForReview, unitDiffPropertyName, string(propertyBytes)) } if err != nil { log.Fatal(err.Error()) } } inlineRequests, commentRequests := review.buildCommentRequests(newComments, commitToDiffMap) for _, request := range inlineRequests { var response createInlineResponse runArcCommandOrDie("differential.createinline", request, &response) if response.Error != "" { log.Println(response.ErrorMessage) } } for _, request := range commentRequests { var response createCommentResponse runArcCommandOrDie("differential.createcomment", request, &response) if response.Error != "" { log.Println(response.ErrorMessage) } } }
func (arc Arcanist) mirrorCommentsIntoReview(repo repository.Repo, review differentialReview, comments comment.CommentMap) { existingComments := review.LoadComments() newComments := comments.FilterOverlapping(existingComments) var lastCommitForLastDiff string var latestDiffForReview string commitToDiffMap := make(map[string]string) for _, diffIDString := range review.Diffs { lastCommit := findCommitForDiff(diffIDString) commitToDiffMap[lastCommit] = diffIDString if diffIDString > latestDiffForReview { lastCommitForLastDiff = lastCommit latestDiffForReview = diffIDString } } report := ci.GetLatestCIReport(repo.GetNotes(ci.Ref, repository.Revision(lastCommitForLastDiff))) log.Printf("The latest CI report for diff %s is %+v ", latestDiffForReview, report) if report.URL != "" { updateUnitResultsRequest := differentialUpdateUnitResultsRequest{ DiffID: latestDiffForReview, Result: report.Status, Link: report.URL, //TODO(ckerur): Link does not work for some reason. Remove putting URL in Message once it does Message: report.URL, } var unitResultsResponse differentialUpdateUnitResultsResponse runArcCommandOrDie("differential.updateunitresults", updateUnitResultsRequest, &unitResultsResponse) if unitResultsResponse.Error != "" { log.Fatal(unitResultsResponse.ErrorMessage) } } inlineRequests, commentRequests := review.buildCommentRequests(newComments, commitToDiffMap) for _, request := range inlineRequests { var response createInlineResponse runArcCommandOrDie("differential.createinline", request, &response) if response.Error != "" { log.Println(response.ErrorMessage) } } for _, request := range commentRequests { var response createCommentResponse runArcCommandOrDie("differential.createcomment", request, &response) if response.Error != "" { log.Println(response.ErrorMessage) } } }