提交 39d76971 编写于 作者: T Tom Lazar

add support for hub download --include flag

上级 03533a16
......@@ -5,6 +5,7 @@ import (
"io"
"os"
"path/filepath"
"regexp"
"strings"
"time"
......@@ -21,7 +22,7 @@ release [--include-drafts] [--exclude-prereleases] [-L <LIMIT>] [-f <FORMAT>]
release show [-f <FORMAT>] <TAG>
release create [-dpoc] [-a <FILE>] [-m <MESSAGE>|-F <FILE>] [-t <TARGET>] <TAG>
release edit [<options>] <TAG>
release download <TAG>
release download <TAG> [-i <PATTERN>]
release delete <TAG>
`,
Long: `Manage GitHub Releases for the current repository.
......@@ -100,6 +101,10 @@ With '--exclude-prereleases', exclude non-stable releases from the listing.
-t, --commitish <TARGET>
A commit SHA or branch name to attach the release to, only used if <TAG>
does not already exist (default: main branch).
-i, --include <PATTERN>
Display the files that match the prodived glob when looking at the
release files.
-f, --format <FORMAT>
Pretty print releases using <FORMAT> (default: "%T%n"). See the "PRETTY
......@@ -209,6 +214,9 @@ hub(1), git-tag(1)
cmdDownloadRelease = &Command{
Key: "download",
Run: downloadRelease,
KnownFlags: `
-i, --include PATTERN
`,
}
cmdDeleteRelease = &Command{
......@@ -386,7 +394,16 @@ func downloadRelease(cmd *Command, args *Args) {
release, err := gh.FetchRelease(project, tagName)
utils.Check(err)
include := args.Flag.Value("--include")
includeRe, err := regexp.Compile(include)
utils.Check(err)
for _, asset := range release.Assets {
// if the include glob is not empty and it doesn't match the pattern
if include != "" && !includeRe.MatchString(asset.Name) {
continue
}
ui.Printf("Downloading %s ...\n", asset.Name)
err := downloadReleaseAsset(asset, gh)
utils.Check(err)
......
......@@ -636,7 +636,68 @@ MARKDOWN
"""
ASSET_TARBALL
"""
Scenario: Download release assets that match pattern.
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') {
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('/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'
"ASSET_TARBALL"
}
"""
When I successfully run `hub release download v1.2.0 --include amd`
Then the output should contain exactly:
"""
Downloading hello-amd32-1.2.0.tar.gz ...
Downloading hello-amd64-1.2.0.tar.gz ...\n
"""
And the file "hello-amd64-1.2.0.tar.gz" should contain exactly:
"""
ASSET_TARBALL
"""
And the file "hello-amd32-1.2.0.tar.gz" should contain exactly:
"""
ASSET_TARBALL
"""
Scenario: Download release no tag
When I run `hub release download`
Then the exit status should be 1
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册