fix: newer golang archive aren't decompressed correctly
This commit is contained in:
parent
56a0caab83
commit
6157ed66a0
|
@ -305,7 +305,7 @@ func ls(ctx *cli.Context) error {
|
|||
|
||||
for _, i := range items {
|
||||
if i.IsDir() && i.Name() != "go" {
|
||||
fmt.Println(i.Name())
|
||||
fmt.Println(strings.Replace(i.Name(), "go", "", 1))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ func (d *Release) DownloadRelease() error {
|
|||
|
||||
// downloadFile downloads the file to the given writer
|
||||
func (d *Release) downloadFile(f *os.File) error {
|
||||
s := spinner.New(spinner.CharSets[35], 100*time.Millisecond)
|
||||
s := spinner.New(spinner.CharSets[14], 100*time.Millisecond)
|
||||
s.Suffix = " Downloading release..."
|
||||
s.Start()
|
||||
defer s.Stop()
|
||||
|
@ -110,9 +110,11 @@ func (d *Release) ExtractRelease() error {
|
|||
|
||||
// skip first folder
|
||||
if start {
|
||||
rootFolder = h.Name
|
||||
rootFolder = strings.Split(h.Name, string(os.PathSeparator))[0]
|
||||
start = false
|
||||
continue
|
||||
if h.Typeflag == tar.TypeDir {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
target := filepath.Join(d.releaseFolder, strings.Replace(h.Name, rootFolder, "", 1))
|
||||
|
@ -124,7 +126,19 @@ func (d *Release) ExtractRelease() error {
|
|||
case tar.TypeReg:
|
||||
file, err := os.OpenFile(target, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, h.FileInfo().Mode())
|
||||
if err != nil {
|
||||
return err
|
||||
// for 1.21.xx, folder aren't detected as tar.TypeDir
|
||||
if os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(filepath.Dir(target), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
file, err = os.OpenFile(target, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, h.FileInfo().Mode())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if _, err = io.Copy(file, tarReader); err != nil {
|
||||
|
@ -152,6 +166,19 @@ func (d *Release) CheckReleaseExists() error {
|
|||
return ErrReleaseNotFound
|
||||
}
|
||||
|
||||
entries, err := os.ReadDir(d.releaseFolder)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(entries) == 0 {
|
||||
if err := os.RemoveAll(d.releaseFolder); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return ErrReleaseNotFound
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ type Tags struct {
|
|||
}
|
||||
|
||||
func NewTags(release string, ctx context.Context) TagsAction {
|
||||
return Tags{
|
||||
return &Tags{
|
||||
release: release,
|
||||
client: *github.NewClient(nil),
|
||||
ctx: ctx,
|
||||
|
@ -34,7 +34,7 @@ func NewTags(release string, ctx context.Context) TagsAction {
|
|||
// the given release exists in it
|
||||
//
|
||||
// Returns the found release or an error
|
||||
func (t Tags) GetRelease(beta, rc bool) (string, error) {
|
||||
func (t *Tags) GetRelease(beta, rc bool) (string, error) {
|
||||
if t.release == LTS {
|
||||
return t.getLatestTag(beta, rc)
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ func (t Tags) GetRelease(beta, rc bool) (string, error) {
|
|||
//
|
||||
// Returns a list of tags reference if there is as least one
|
||||
// or an error otherwise.
|
||||
func (t Tags) GetTagsRef() ([]*github.Reference, error) {
|
||||
func (t *Tags) GetTagsRef() ([]*github.Reference, error) {
|
||||
refs, response, err := t.client.Git.ListMatchingRefs(t.ctx, "golang", "go", &github.ReferenceListOptions{
|
||||
Ref: "tags/go",
|
||||
})
|
||||
|
@ -113,7 +113,7 @@ func (t Tags) GetTagsRef() ([]*github.Reference, error) {
|
|||
// beta and rc version can be specified.
|
||||
//
|
||||
// Returns the latest release or an error
|
||||
func (t Tags) getLatestTag(beta, rc bool) (string, error) {
|
||||
func (t *Tags) getLatestTag(beta, rc bool) (string, error) {
|
||||
refs, err := t.GetTagsRef()
|
||||
if err != nil {
|
||||
if err == ErrEmptyTags {
|
||||
|
|
Reference in New Issue