in app/registry/change.go [164:232]
func (a *App) getChangeFileChanges(changeID, fileName, projectName string) (string, error) {
commitInfo, _, err := a.Gerrit.GoGerritClient().Changes.GetCommit(changeID, currentRevision, &goGerrit.CommitOptions{})
if err != nil {
return "", fmt.Errorf("unable to get change commit, %w", err)
}
if len(commitInfo.Parents) == 0 {
return "", errors.New("no parent commit for change found")
}
originalContent, originalHttpRsp, err := a.Gerrit.GoGerritClient().Projects.GetCommitContent(projectName,
commitInfo.Parents[0].Commit, url.PathEscape(fileName))
if err != nil && originalHttpRsp != nil && originalHttpRsp.StatusCode != 404 {
return "", fmt.Errorf("unable to get file content, %w", err)
}
if originalHttpRsp == nil {
return "", errors.New("empty http response")
}
originalFilePath := path.Join(a.Config.TempFolder, "original", fileName)
if originalHttpRsp.StatusCode != 404 {
originalFolder := filepath.Dir(originalFilePath)
if err := os.MkdirAll(originalFolder, 0777); err != nil {
return "", fmt.Errorf("unable to create folder, %w", err)
}
originalFile, err := os.Create(originalFilePath)
if err != nil {
return "", fmt.Errorf("unable to creaete file, %w", err)
}
if _, err := originalFile.WriteString(originalContent); err != nil {
return "", fmt.Errorf("unable to write string, %w", err)
}
if err := originalFile.Close(); err != nil {
return "", fmt.Errorf("unable to close file, %w", err)
}
defer os.RemoveAll(originalFilePath)
}
content, newHttpRsp, err := a.Gerrit.GoGerritClient().Changes.GetContent(changeID, currentRevision, fileName)
if err != nil && newHttpRsp != nil && newHttpRsp.StatusCode != 404 {
return "", fmt.Errorf("unable to get file content, %w", err)
}
if newHttpRsp == nil {
return "", errors.New("empty response")
}
newFilePath := path.Join(a.Config.TempFolder, "new", fileName)
if newHttpRsp.StatusCode != 404 && content != nil {
newFolder := filepath.Dir(newFilePath)
if err := os.MkdirAll(newFolder, 0777); err != nil {
return "", fmt.Errorf("unable to create folder, %w", err)
}
newFile, err := os.Create(newFilePath)
if err != nil {
return "", fmt.Errorf("unable to create file, %w", err)
}
if _, err := newFile.WriteString(*content); err != nil {
return "", fmt.Errorf("unable to write string, %w", err)
}
if err := newFile.Close(); err != nil {
return "", fmt.Errorf("unable to close file, %w", err)
}
defer os.RemoveAll(newFilePath)
}
return createDiff(fileName, originalFilePath, originalHttpRsp.StatusCode == 404,
newFilePath, newHttpRsp.StatusCode == 404), nil
}