func()

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
}