@@ -35,11 +35,30 @@ func (i *Installer) GetLatestVersion() (string, error) {
35
35
}
36
36
37
37
func (i * Installer ) readMetadata () (* CursorMetadata , error ) {
38
- data , err := os .ReadFile (metadataPath )
38
+ if _ , err := os .Stat (metadataPath ); os .IsNotExist (err ) {
39
+ return nil , nil
40
+ }
41
+
42
+ tmpFile , err := os .CreateTemp ("" , "cursor-metadata-read-*.json" )
43
+ if err != nil {
44
+ return nil , fmt .Errorf ("failed to create temporary file: %v" , err )
45
+ }
46
+ tmpPath := tmpFile .Name ()
47
+ tmpFile .Close ()
48
+ defer os .Remove (tmpPath )
49
+
50
+ cmd := exec .Command ("sudo" , "cp" , metadataPath , tmpPath )
51
+ if err := cmd .Run (); err != nil {
52
+ return nil , fmt .Errorf ("failed to copy metadata file: %v" , err )
53
+ }
54
+
55
+ cmd = exec .Command ("sudo" , "chmod" , "644" , tmpPath )
56
+ if err := cmd .Run (); err != nil {
57
+ return nil , fmt .Errorf ("failed to set permissions on temporary file: %v" , err )
58
+ }
59
+
60
+ data , err := os .ReadFile (tmpPath )
39
61
if err != nil {
40
- if os .IsNotExist (err ) {
41
- return nil , nil
42
- }
43
62
return nil , fmt .Errorf ("failed to read metadata: %v" , err )
44
63
}
45
64
@@ -56,18 +75,20 @@ func (i *Installer) writeMetadata(metadata *CursorMetadata) error {
56
75
if err != nil {
57
76
return fmt .Errorf ("failed to create temporary metadata file: %v" , err )
58
77
}
59
- defer os .Remove (tmpFile .Name ())
78
+ tmpPath := tmpFile .Name ()
79
+ defer os .Remove (tmpPath )
60
80
61
81
data , err := json .MarshalIndent (metadata , "" , " " )
62
82
if err != nil {
63
83
return fmt .Errorf ("failed to marshal metadata: %v" , err )
64
84
}
65
85
66
- if err := os .WriteFile (tmpFile . Name () , data , 0644 ); err != nil {
86
+ if err := os .WriteFile (tmpPath , data , 0644 ); err != nil {
67
87
return fmt .Errorf ("failed to write metadata: %v" , err )
68
88
}
89
+ tmpFile .Close ()
69
90
70
- cmd := exec .Command ("sudo" , "mv" , tmpFile . Name () , metadataPath )
91
+ cmd := exec .Command ("sudo" , "mv" , tmpPath , metadataPath )
71
92
if err := cmd .Run (); err != nil {
72
93
return fmt .Errorf ("failed to install metadata file: %v" , err )
73
94
}
0 commit comments