Set-GitLabProjectRepositoryFile.ps1

function Set-GitLabProjectRepositoryFile
{
  <#
      .SYNOPSIS
      Update file in repository
      .DESCRIPTION
      The Set-GitLabProjectRepositoryFile function edits an existing file in the repository.
      Content is expected in text but can be pased base 64 encoded using -Encoding base64.

      If the commit fails for any reason we return a 400 error with a non-specific error message. Possible causes for a failed commit include:
      - the file_path contained /../ (attempted directory traversal);
      - the new file contents were identical to the current file contents, i.e. the user tried to make an empty commit;
      - the branch was updated by a Git push while the file edit was in progress.
      Currently gitlab-shell has a boolean return code, preventing GitLab from specifying the error.
      .EXAMPLE
      Set-GitLabProjectRepositoryFile -ProjectID 20 -BranchName Develop -FilePath README.md -Content 'New Readme Content' -CommitMessage 'Update readme'
      ---------------------------------------------------------------
      updates the content of README.md to 'New Readme Content' with the message 'Update readme'
  #>

  [CmdletBinding()]
  [Alias()]
  [OutputType()]
  Param
  (
    # The ID of the project
    [Parameter(HelpMessage = 'ProjectID',
    Mandatory = $true)]
    [Alias('ID')]
    [int]$ProjectID,

    # The name of the branch
    [Parameter(HelpMessage = 'Commit SHA or branch name',
    Mandatory = $true)]
    [Alias('branch_name')]
    [string]$BranchName,

    # The path of the file inside the projects repository.
    [Parameter(Helpmessage = 'The path of the file',
    Mandatory = $true)]
    [alias('file_path')]
    [String]$FilePath,

    # Encoding of seplied content. 'text' or 'base64'. Text is default.
    [Parameter(HelpMessage = 'Encoding of content (text|base64)')]
    [validateset('text','base64')]
    [string]$Encoding = 'text',

    # File content
    [Parameter(Helpmessage = 'File content',
    Mandatory = $true)]
    [string]$Content,

    # Commit message
    [Parameter(HelpMessage = ' Commit message',
    Mandatory = $true)]
    [alias('commit_message')]
    [string]$CommitMessage,

    # Specify Existing GitlabConnector
    [Parameter(HelpMessage = 'Specify Existing GitlabConnector',
        Mandatory = $false,
    DontShow = $true)]
    [psobject]$GitlabConnect = (Get-GitlabConnect)
  )

  
  $httpmethod = 'put'
  $apiurl = "/projects/$ProjectID/repository/files"
  $parameters = @{
    'file_path'    = $FilePath
    'branch_name'  = $BranchName
    'commit_message' = $CommitMessage
    'content'      = $content
  }

  switch($encoding){
    'text' 
    {
      $parameters.encoding = 'text' 
      break
    }
    'base64' 
    {
      $parameters.encoding = 'base64' 
      break
    }
  }

  $GitlabConnect.callapi($apiurl,$httpmethod,$parameters)
}