X Tutup
Skip to content

Commit 42c9750

Browse files
samcoemislav
authored andcommitted
Simplify CheckForUpdate handling of state file
1 parent 0ec8c2e commit 42c9750

File tree

2 files changed

+17
-37
lines changed

2 files changed

+17
-37
lines changed

update/update.go

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,45 +24,36 @@ type StateEntry struct {
2424

2525
// CheckForUpdate checks whether this software has had a newer release on GitHub
2626
func CheckForUpdate(client *api.Client, stateFilePath, repo, currentVersion string) (*ReleaseInfo, error) {
27-
releaseInfo, err := getLatestReleaseInfo(client, stateFilePath, repo)
27+
stateEntry, _ := getStateEntry(stateFilePath)
28+
if stateEntry != nil && time.Since(stateEntry.CheckedForUpdateAt).Hours() < 24 {
29+
return nil, nil
30+
}
31+
32+
releaseInfo, err := getLatestReleaseInfo(client, repo)
2833
if err != nil {
2934
return nil, err
3035
}
3136

32-
if releaseInfo == nil {
33-
return nil, nil
37+
err = setStateEntry(stateFilePath, time.Now(), *releaseInfo)
38+
if err != nil {
39+
return nil, err
3440
}
3541

36-
if versionGreaterThan(releaseInfo.LatestRelease.Version, currentVersion) {
37-
return &releaseInfo.LatestRelease, nil
42+
if versionGreaterThan(releaseInfo.Version, currentVersion) {
43+
return releaseInfo, nil
3844
}
3945

4046
return nil, nil
4147
}
4248

43-
func getLatestReleaseInfo(client *api.Client, stateFilePath, repo string) (*StateEntry, error) {
44-
stateEntry, err := getStateEntry(stateFilePath)
45-
if err == nil && time.Since(stateEntry.CheckedForUpdateAt).Hours() < 24 {
46-
return nil, nil
47-
}
48-
49+
func getLatestReleaseInfo(client *api.Client, repo string) (*ReleaseInfo, error) {
4950
var latestRelease ReleaseInfo
50-
err = client.REST(ghinstance.Default(), "GET", fmt.Sprintf("repos/%s/releases/latest", repo), nil, &latestRelease)
51-
if err != nil {
52-
return nil, err
53-
}
54-
55-
err = setStateEntry(stateFilePath, time.Now(), latestRelease)
56-
if err != nil {
57-
return nil, err
58-
}
59-
60-
stateEntry, err = getStateEntry(stateFilePath)
51+
err := client.REST(ghinstance.Default(), "GET", fmt.Sprintf("repos/%s/releases/latest", repo), nil, &latestRelease)
6152
if err != nil {
6253
return nil, err
6354
}
6455

65-
return stateEntry, nil
56+
return &latestRelease, nil
6657
}
6758

6859
func getStateEntry(stateFilePath string) (*StateEntry, error) {

update/update_test.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,14 @@ func TestCheckForUpdate(t *testing.T) {
5252

5353
for _, s := range scenarios {
5454
t.Run(s.Name, func(t *testing.T) {
55-
stateFilePath := tempFilePath()
56-
defer os.Remove(stateFilePath)
57-
5855
http := &httpmock.Registry{}
5956
client := api.NewClient(api.ReplaceTripper(http))
6057
http.StubResponse(200, bytes.NewBufferString(fmt.Sprintf(`{
6158
"tag_name": "%s",
6259
"html_url": "%s"
6360
}`, s.LatestVersion, s.LatestURL)))
6461

65-
rel, err := CheckForUpdate(client, stateFilePath, "OWNER/REPO", s.CurrentVersion)
62+
rel, err := CheckForUpdate(client, tempFilePath(), "OWNER/REPO", s.CurrentVersion)
6663
if err != nil {
6764
t.Fatal(err)
6865
}
@@ -96,18 +93,10 @@ func TestCheckForUpdate(t *testing.T) {
9693
}
9794

9895
func tempFilePath() string {
99-
content := []byte(
100-
`checked_for_update_at: 2020-11-22T09:53:32.609610344-03:00
101-
latest_release:
102-
version: v1.1.0
103-
url: https://github.com/cli/cli/releases/tag/v1.1.0`)
104-
file, err := ioutil.TempFile("", "state*.yml")
96+
file, err := ioutil.TempFile("", "")
10597
if err != nil {
10698
log.Fatal(err)
10799
}
108-
109-
if _, err := file.Write(content); err != nil {
110-
log.Fatal(err)
111-
}
100+
os.Remove(file.Name())
112101
return file.Name()
113102
}

0 commit comments

Comments
 (0)
X Tutup