-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlatest.go
More file actions
77 lines (66 loc) · 1.95 KB
/
Copy pathlatest.go
File metadata and controls
77 lines (66 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
import (
"os"
"path/filepath"
"errors"
"encoding/json"
"fmt"
)
type latestInfo struct {
Version string `json:"version"`
}
func readLatestFile(lat_path string) (latestInfo, error) {
output := latestInfo{}
if _, err := os.Stat(lat_path); errors.Is(err, os.ErrNotExist) {
return output, nil
}
handle, err := os.Open(lat_path)
if err != nil {
return output, fmt.Errorf("failed to open %q; %w", lat_path, err)
}
defer handle.Close()
dec := json.NewDecoder(handle)
err = dec.Decode(&output)
if err != nil {
return output, fmt.Errorf("failed to parse %q; %w", lat_path, err)
}
return output, nil
}
func ignoreNonLatest(rest_url, asset_dir string, names []string, force bool) error {
lat_path := filepath.Join(asset_dir, "..latest")
payload, err := readLatestFile(lat_path)
if err != nil {
return err
}
registered_versions, err := listRegisteredSubdirectories(rest_url, asset_dir)
if err != nil {
return fmt.Errorf("failed to list registered versions of %q; %w", asset_dir, err)
}
all_errors := []error{}
latest_registered := false
for _, ver := range registered_versions {
if ver == payload.Version {
latest_registered = true
continue
}
version_dir := filepath.Join(asset_dir, ver)
regerr := deregisterDirectory(rest_url, version_dir)
if regerr != nil {
all_errors = append(all_errors, regerr)
}
}
if !latest_registered || force {
if payload.Version != "" {
version_dir := filepath.Join(asset_dir, payload.Version)
regerr := registerDirectory(rest_url, version_dir, names)
if regerr != nil {
all_errors = append(all_errors, regerr)
}
}
}
if len(all_errors) > 0 {
return errors.Join(all_errors...)
} else {
return nil
}
}