зеркало из https://github.com/mislav/hub.git
change to use glob, update docs, more tests
This commit is contained in:
Родитель
39d7697169
Коммит
75604f333b
|
@ -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`
|
||||||
|
|
Загрузка…
Ссылка в новой задаче