3 Commits
1.4.4 ... 1.5.1

Author SHA1 Message Date
ed8f3ab02e Update pester tests
Some checks failed
Publish Powershell Module to Gitea Repository / test (push) Failing after 10s
Publish Powershell Module to Gitea Repository / deploy (push) Has been skipped
2025-05-27 13:23:37 -04:00
67d69c52e9 Bump module version to 1.5.0 and update Invoke-GiteaFileDownload and Get-GiteaChildItem functions to use 'Result' instead of 'Success' for status reporting, and add OverwriteByHash parameter for conditional file overwriting.
Some checks failed
Publish Powershell Module to Gitea Repository / test (push) Failing after 10s
Publish Powershell Module to Gitea Repository / deploy (push) Has been skipped
2025-05-27 13:14:28 -04:00
ed9ba80938 Bump module version to 1.4.5 and enhance Invoke-GiteaFileDownload to replace URL encoded characters in the file name
All checks were successful
Publish Powershell Module to Gitea Repository / test (push) Successful in 9s
Publish Powershell Module to Gitea Repository / deploy (push) Successful in 31s
2025-05-27 12:50:01 -04:00
3 changed files with 56 additions and 26 deletions

View File

@@ -12,7 +12,7 @@
RootModule = 'PS-GiteaUtilities.psm1'
# Version number of this module.
ModuleVersion = '1.4.4'
ModuleVersion = '1.5.0'
# Supported PSEditions
# CompatiblePSEditions = @()

View File

@@ -207,7 +207,7 @@ Function Get-GiteaFileContent {
Content = $content
Size = $fileContent.size
SHA = $fileContent.sha
Success = $true
Result = 'Success'
Error = $null
}
}
@@ -218,7 +218,7 @@ Function Get-GiteaFileContent {
Content = $null
Size = $null
SHA = $null
Success = $false
Result = 'Failure'
Error = $_.Exception.Message
}
}
@@ -336,6 +336,9 @@ Function Invoke-GiteaFileDownload {
If used without specifying an outputPath, creates the directory structure in the current location.
If used with outputPath, treats the outputPath as the base directory to append the relative path to.
Cannot be used with outputName.
.PARAMETER OverwriteByHash
A switch parameter to overwrite the file if it exists based on its hash.
.PARAMETER force
A switch parameter to force overwriting of an existing file at the output path.
@@ -344,6 +347,10 @@ Function Invoke-GiteaFileDownload {
The type of the item to download (file, dir, lfs). This parameter is typically used with pipeline input from Get-GiteaChildItem.
Directories will be skipped with a verbose message.
.PARAMETER sha
The SHA of the file to download. This parameter is typically used with pipeline input from Get-GiteaChildItem.
Can be combined with OverwriteByHash to overwrite an existing file if the hashes do not match.
.EXAMPLE
# Example 1: Download a file to the current directory
Invoke-GiteaFileDownload -downloadURL "https://gitea.example.com/api/v1/repos/owner/repo/raw/path/to/file.txt" -token "your_token"
@@ -375,9 +382,12 @@ Function Invoke-GiteaFileDownload {
[Parameter(ValueFromPipelineByPropertyName)]
[string]$outputName,
[switch]$PreserveRelativePath,
[switch]$OverwriteByHash,
[switch]$force,
[Parameter(ValueFromPipelineByPropertyName)]
[string]$type
[string]$type,
[Parameter(ValueFromPipelineByPropertyName)]
[string]$sha
)
begin {
@@ -424,8 +434,8 @@ Function Invoke-GiteaFileDownload {
return [PSCustomObject]@{
SourceURL = $downloadURL
Type = $type
Success = $true
Error = "Skipped - item is a directory"
Result = 'Skipped'
Error = $null
Timestamp = Get-Date
FileSize = $null
}
@@ -438,7 +448,7 @@ Function Invoke-GiteaFileDownload {
return [PSCustomObject]@{
SourceURL = $downloadURL
Type = $type
Success = $false
Result = 'Failure'
Error = $errorMsg
Timestamp = Get-Date
FileSize = $null
@@ -461,6 +471,8 @@ Function Invoke-GiteaFileDownload {
# Everything after the branch + 1 segment is considered the file path with the last segment being the file name
$branchIndex = [Array]::IndexOf($pathSegments, "branch") + 2
$DownloadFilePath = $pathSegments[$branchIndex..($pathSegments.Length - 2)] -join '/'
# Replace any URL encoded characters in the file name
$DownloadFilePath = [System.Uri]::UnescapeDataString($DownloadFilePath)
$DownloadFileName = $pathSegments[-1]
}
@@ -509,17 +521,36 @@ Function Invoke-GiteaFileDownload {
Path = $fileOutputPath
SourceURL = $downloadURL
Type = "file"
Success = $false
Result = $null
Error = $null
Timestamp = Get-Date
FileSize = $null
}
if((Test-Path -Path $fileOutputPath -PathType Leaf) -and (-not $force)) {
$errorMsg = "The file '$fileOutputPath' already exists. Use the -Force switch to overwrite the file."
Write-Error $errorMsg
$result.Error = $errorMsg
return $result
# Check if OverwriteByHash is set
if ($OverwriteByHash) {
Write-Verbose "OverwriteByHash is set; checking file hash for existing file: $fileOutputPath"
$existingFileHash = (Get-FileHash -Path $fileOutputPath -Algorithm SHA256).Hash
$downloadFileHash = $sha
if ($existingFileHash -eq $downloadFileHash) {
Write-Host "The file '$fileOutputPath' already exists and hashes match. Skipping download."
$result.Result = 'Skipped'
return $result
}
else {
Write-Host "The file '$fileOutputPath' already exists but hashes do not match and OverwriteByHash is set; overwriting file."
}
}
else {
$result.Result = 'Skipped'
$errorMsg = "The file '$fileOutputPath' already exists. Use the -Force switch to overwrite the file."
Write-Error $errorMsg
$result.Error = $errorMsg
return $result
}
}
try {
@@ -544,10 +575,11 @@ Function Invoke-GiteaFileDownload {
$result.FileSize = $fileInfo.Length
}
$result.Success = $true
$result.Result = 'Success'
return $result
}
catch {
$result.Result = 'Failure'
$errorMsg = "Failed to download file from Gitea: $_"
Write-Error $errorMsg
$result.Error = $errorMsg
@@ -754,7 +786,7 @@ Function Get-GiteaChildItem {
size = $item.size
sha = $item.sha
downloadURL = $item.download_url
Success = $true
Result = 'Success'
Error = $null
Level = 0
}
@@ -837,7 +869,7 @@ Function Get-GiteaChildItem {
size = $subItem.size
sha = $subItem.sha
downloadURL = $subItem.download_url
Success = $true
Result = 'Success'
Error = $null
Level = $currentLevel
}
@@ -884,7 +916,7 @@ Function Get-GiteaChildItem {
size = $null
sha = $null
downloadURL = $null
Success = $false
Result = 'Failure'
Error = $_.Exception.Message
Level = 0
}

View File

@@ -49,7 +49,7 @@ Describe 'Invoke-GiteaFileDownload' {
$result = Invoke-GiteaFileDownload -downloadURL 'https://gitea.example.com/raw/path/to/file.txt' -token 'abc123'
$result | Should -Not -BeNullOrEmpty
$result.Success | Should -Be $true
$result.Result | Should -Be 'Success'
$result.Path | Should -Match 'file\.txt$'
}
}
@@ -60,7 +60,7 @@ Describe 'Invoke-GiteaFileDownload' {
-outputPath 'docs/manual/' -token 'abc123'
$result.Path | Should -Match 'docs[\\/]+manual[\\/]+file\.txt$'
$result.Success | Should -Be $true
$result.Result | Should -Be 'Success'
}
}
@@ -70,7 +70,7 @@ Describe 'Invoke-GiteaFileDownload' {
-outputName 'newfile.txt' -token 'abc123'
$result.Path | Should -Match 'newfile\.txt$'
$result.Success | Should -Be $true
$result.Result | Should -Be 'Success'
}
}
@@ -80,7 +80,7 @@ Describe 'Invoke-GiteaFileDownload' {
-outputPath 'docs/manual/' -outputName 'newfile.txt' -token 'abc123'
$result.Path | Should -Match 'docs[\\/]+manual[\\/]+newfile\.txt$'
$result.Success | Should -Be $true
$result.Result | Should -Be 'Success'
}
}
@@ -90,7 +90,7 @@ Describe 'Invoke-GiteaFileDownload' {
-PreserveRelativePath -token 'abc123'
$result.Path | Should -Match 'path[\\/]+to[\\/]+file\.txt$'
$result.Success | Should -Be $true
$result.Result | Should -Be 'Success'
}
}
@@ -98,8 +98,7 @@ Describe 'Invoke-GiteaFileDownload' {
It 'Should skip items with type = dir' {
$result = Invoke-GiteaFileDownload -outputPath 'docs/' -type 'dir' -token 'abc123'
$result.Success | Should -Be $true
$result.Error | Should -Match 'Skipped'
$result.Result | Should -Be 'Skipped'
}
}
@@ -116,8 +115,7 @@ Describe 'Invoke-GiteaFileDownload' {
It 'Should not overwrite existing file without Force' {
$result = Invoke-GiteaFileDownload -downloadURL 'https://gitea.example.com/raw/path/to/existingfile.txt' -token 'abc123'
$result.Success | Should -Be $false
$result.Error | Should -Match 'already exists'
$result.Result | Should -Be 'Skipped'
}
}
@@ -145,7 +143,7 @@ Describe 'Invoke-GiteaFileDownload' {
It 'Should capture error and mark download as failed' {
$result = Invoke-GiteaFileDownload -downloadURL 'https://gitea.example.com/raw/path/to/badfile.txt' -token 'abc123'
$result.Success | Should -Be $false
$result.Result | Should -Be 'Failure'
$result.Error | Should -Match 'Failed to download'
}
}