change to use glob, update docs, more tests

This commit is contained in:
Tom Lazar 2019-10-25 18:21:17 -05:00
Родитель 39d7697169
Коммит 75604f333b
2 изменённых файлов: 102 добавлений и 24 удалений

Просмотреть файл

@ -5,7 +5,6 @@ import (
"io" "io"
"os" "os"
"path/filepath" "path/filepath"
"regexp"
"strings" "strings"
"time" "time"
@ -103,8 +102,7 @@ With '--exclude-prereleases', exclude non-stable releases from the listing.
does not already exist (default: main branch). does not already exist (default: main branch).
-i, --include <PATTERN> -i, --include <PATTERN>
Display the files that match the prodived glob when looking at the Filter the files in the release to those that match the <PATTERN>.
release files.
-f, --format <FORMAT> -f, --format <FORMAT>
Pretty print releases using <FORMAT> (default: "%T%n"). See the "PRETTY Pretty print releases using <FORMAT> (default: "%T%n"). See the "PRETTY
@ -394,14 +392,15 @@ func downloadRelease(cmd *Command, args *Args) {
release, err := gh.FetchRelease(project, tagName) release, err := gh.FetchRelease(project, tagName)
utils.Check(err) utils.Check(err)
include := args.Flag.Value("--include") pattern := args.Flag.Value("--include")
includeRe, err := regexp.Compile(include)
utils.Check(err)
for _, asset := range release.Assets { for _, asset := range release.Assets {
// if the include glob is not empty and it doesn't match the pattern // if the include glob is not empty and it doesn't match the pattern
if include != "" && !includeRe.MatchString(asset.Name) { if pattern != "" {
continue isMatch, err := filepath.Match(pattern, asset.Name)
utils.Check(err)
if !isMatch {
continue
}
} }
ui.Printf("Downloading %s ...\n", asset.Name) ui.Printf("Downloading %s ...\n", asset.Name)

Просмотреть файл

@ -663,27 +663,15 @@ MARKDOWN
] ]
} }
get('/repos/mislav/will_paginate/assets/9876') { get('/repos/mislav/will_paginate/assets/9876') {
halt 401 unless request.env['HTTP_AUTHORIZATION'] == 'token OTOKEN' headers['Content-Type'] = 'application/octet-stream'
halt 415 unless request.accept?('application/octet-stream') "ASSET_TARBALL"
status 302
headers['Location'] = 'https://github-cloud.s3.amazonaws.com/releases/12204602/22ea221a-cf2f-11e2-222a-b3a3c3b3aa3a.gz'
""
} }
get('/repos/mislav/will_paginate/assets/9877') { get('/repos/mislav/will_paginate/assets/9877') {
halt 401 unless request.env['HTTP_AUTHORIZATION'] == 'token OTOKEN'
halt 415 unless request.accept?('application/octet-stream')
status 302
headers['Location'] = 'https://github-cloud.s3.amazonaws.com/releases/12204602/22ea221a-cf2f-11e2-222a-b3a3c3b3aa3a.gz'
""
}
get('/releases/12204602/22ea221a-cf2f-11e2-222a-b3a3c3b3aa3a.gz', :host_name => 'github-cloud.s3.amazonaws.com') {
halt 400 unless request.env['HTTP_AUTHORIZATION'].nil?
halt 415 unless request.accept?('application/octet-stream')
headers['Content-Type'] = 'application/octet-stream' headers['Content-Type'] = 'application/octet-stream'
"ASSET_TARBALL" "ASSET_TARBALL"
} }
""" """
When I successfully run `hub release download v1.2.0 --include amd` When I successfully run `hub release download v1.2.0 --include *amd*`
Then the output should contain exactly: Then the output should contain exactly:
""" """
Downloading hello-amd32-1.2.0.tar.gz ... Downloading hello-amd32-1.2.0.tar.gz ...
@ -697,6 +685,97 @@ MARKDOWN
""" """
ASSET_TARBALL ASSET_TARBALL
""" """
And the file "hello-x86-1.2.0.tar.gz" should not exist
Scenario: Glob pattern should require exact match.
Given the GitHub API server:
"""
get('/repos/mislav/will_paginate/releases') {
json [
{ url: 'https://api.github.com/repos/mislav/will_paginate/releases/123',
upload_url: 'https://uploads.github.com/uploads/assets{?name,label}',
tag_name: 'v1.2.0',
name: 'will_paginate 1.2.0',
draft: true,
prerelease: false,
assets: [
{ url: 'https://api.github.com/repos/mislav/will_paginate/assets/9876',
name: 'hello-amd32-1.2.0.tar.gz',
},
{ url: 'https://api.github.com/repos/mislav/will_paginate/assets/9877',
name: 'hello-amd64-1.2.0.tar.gz',
},
{ url: 'https://api.github.com/repos/mislav/will_paginate/assets/9878',
name: 'hello-x86-1.2.0.tar.gz',
},
],
},
]
}
get('/repos/mislav/will_paginate/assets/9876') {
headers['Content-Type'] = 'application/octet-stream'
"ASSET_TARBALL"
}
"""
When I successfully run `hub release download v1.2.0 --include hello-amd32-1.2.0.tar.gz`
Then the output should contain exactly:
"""
Downloading hello-amd32-1.2.0.tar.gz ...\n
"""
And the file "hello-amd32-1.2.0.tar.gz" should contain exactly:
"""
ASSET_TARBALL
"""
And the file "hello-amd64-1.2.0.tar.gz" should not exist
And the file "hello-x86-1.2.0.tar.gz" should not exist
Scenario: Advanced Glob pattern should filter correctly.
Given the GitHub API server:
"""
get('/repos/mislav/will_paginate/releases') {
json [
{ url: 'https://api.github.com/repos/mislav/will_paginate/releases/123',
upload_url: 'https://uploads.github.com/uploads/assets{?name,label}',
tag_name: 'v1.2.0',
name: 'will_paginate 1.2.0',
draft: true,
prerelease: false,
assets: [
{ url: 'https://api.github.com/repos/mislav/will_paginate/assets/9876',
name: 'hello-amd32-1.2.0.tar.gz',
},
{ url: 'https://api.github.com/repos/mislav/will_paginate/assets/9876',
name: 'hello-amd32-1.2.1.tar.gz',
},
{ url: 'https://api.github.com/repos/mislav/will_paginate/assets/9876',
name: 'hello-amd32-1.2.2.tar.gz',
},
],
},
]
}
get('/repos/mislav/will_paginate/assets/9876') {
headers['Content-Type'] = 'application/octet-stream'
"ASSET_TARBALL"
}
"""
When I successfully run `hub release download v1.2.0 --include *amd32-?.?.?.tar.gz`
Then the output should contain exactly:
"""
Downloading hello-amd32-1.2.0.tar.gz ...
Downloading hello-amd32-1.2.1.tar.gz ...
Downloading hello-amd32-1.2.2.tar.gz ...\n
"""
And the file "hello-amd32-1.2.0.tar.gz" should contain exactly:
"""
ASSET_TARBALL
"""
And the file "hello-amd32-1.2.1.tar.gz" should contain exactly:
"""
ASSET_TARBALL
"""
And the file "hello-amd32-1.2.2.tar.gz" should contain exactly:
"""
ASSET_TARBALL
"""
Scenario: Download release no tag Scenario: Download release no tag
When I run `hub release download` When I run `hub release download`