emilaz
emilaz

Reputation: 2082

C# Octokit Update File if it Exists, Otherwise Create

I'm wondering whether there is a clean way to create a new file using Octokit in case the file specified doesn't exist, or otherwise create it? I'm currently attempting to do this via a try-catch block. However, there needs to be a more straightforward way to do this except a try-catch block?

    private IRepositoryContentsClient Content => _client.Repository.Content;

    public void TransmitLog(string logFilePath)
    {
        var logContent = LogFileToString(logFilePath);
        var githubPath = GenerateGithubPath(logFilePath);
        try
        {
            UpdateLog(githubPath, logContent);
        }
        catch (NotFoundException)
        {
            CreateLog(githubPath, logContent);
        }
        catch (AggregateException) 
        {
            CreateLog(githubPath, logContent);
        }
    }

    private void UpdateLog(string githubPath, string logContent)
    {
        // MY APP FAILS HERE
        var existingFile = Content.GetAllContentsByRef(
            _owner, _repo, githubPath, _branch).Result;
        // update the file
        var relevantSha = existingFile.First().Sha;
        var updateRequest = new UpdateFileRequest("Log update" + DateTime.UtcNow, logContent, relevantSha, _branch);
        var updateChangeSet = Content.UpdateFile(_owner, _repo, githubPath, updateRequest);
    }

    private void CreateLog(string githubPath, string logFileContent)
    {
        // if file is not found, create it
        var createRequest =
            new CreateFileRequest("Log Creation" + DateTime.UtcNow, logFileContent, _branch);
        var createChangeSet = Content.CreateFile(_owner, _repo, githubPath, createRequest);
    }

EDIT: I initially had both CreateLog and UpdateLog declared as async void, which led to a whole set of other problems. I edited that out since what I'm really interested in is how to avoid this try/catch structure.

Upvotes: 0

Views: 197

Answers (0)

Related Questions