Skip to content

Commit e3547a4

Browse files
ref: add hash to name
1 parent bf410d9 commit e3547a4

File tree

4 files changed

+25
-178
lines changed

4 files changed

+25
-178
lines changed

cli/cmd/download_package.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,11 @@ func (c *DownloadPackageCmd) DownloadBuild(p portal.Portal, build portal.Build,
100100
return fmt.Errorf("failed to find artifact in package: %w", err)
101101
}
102102

103-
fullFilename := strings.ReplaceAll(build.Version, "/", "-") + "-" + filename
103+
shortHash := build.Hash
104+
if len(shortHash) > 10 {
105+
shortHash = shortHash[:10]
106+
}
107+
fullFilename := strings.ReplaceAll(build.Version, "/", "-") + "-" + shortHash + "-" + filename
104108
out, err := c.FileWriter.OpenAppend(fullFilename)
105109
if err != nil {
106110
out, err = c.FileWriter.Create(fullFilename)
@@ -133,13 +137,5 @@ func (c *DownloadPackageCmd) DownloadBuild(p portal.Portal, build portal.Build,
133137
return fmt.Errorf("failed to verify artifact: %w", err)
134138
}
135139

136-
if download.Artifacts[0].Md5Sum != "" {
137-
checksumFilename := fullFilename + ".md5"
138-
err = c.FileWriter.WriteFile(checksumFilename, []byte(download.Artifacts[0].Md5Sum), 0644)
139-
if err != nil {
140-
log.Printf("Warning: failed to save checksum file: %v", err)
141-
}
142-
}
143-
144140
return nil
145141
}

cli/cmd/download_package_test.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var _ = Describe("DownloadPackages", func() {
2222
c cmd.DownloadPackageCmd
2323
filename string
2424
version string
25+
hash string
2526
build portal.Build
2627
mockPortal *portal.MockPortal
2728
mockFileWriter *util.MockFileIO
@@ -30,6 +31,7 @@ var _ = Describe("DownloadPackages", func() {
3031
BeforeEach(func() {
3132
filename = "installer.tar.gz"
3233
version = "codesphere-1.42.0"
34+
hash = "abc1234567"
3335
mockPortal = portal.NewMockPortal(GinkgoT())
3436
mockFileWriter = util.NewMockFileIO(GinkgoT())
3537
})
@@ -44,6 +46,7 @@ var _ = Describe("DownloadPackages", func() {
4446
}
4547
build = portal.Build{
4648
Version: version,
49+
Hash: hash,
4750
Artifacts: []portal.Artifact{
4851
{Filename: filename},
4952
{Filename: "otherFilename.tar.gz"},
@@ -169,43 +172,45 @@ var _ = Describe("DownloadPackages", func() {
169172
It("Downloads the correct artifact to the correct output file", func() {
170173
expectedBuildToDownload := portal.Build{
171174
Version: version,
175+
Hash: hash,
172176
Artifacts: []portal.Artifact{
173177
{Filename: filename},
174178
},
175179
}
176180

177181
fakeFile := os.NewFile(uintptr(0), filename)
178-
mockFileWriter.EXPECT().OpenAppend(version+"-"+filename).Return(fakeFile, nil)
179-
mockFileWriter.EXPECT().Open(version+"-"+filename).Return(fakeFile, nil)
182+
mockFileWriter.EXPECT().OpenAppend(version+"-"+hash+"-"+filename).Return(fakeFile, nil)
183+
mockFileWriter.EXPECT().Open(version+"-"+hash+"-"+filename).Return(fakeFile, nil)
180184
mockPortal.EXPECT().DownloadBuildArtifact(portal.CodesphereProduct, expectedBuildToDownload, mock.Anything, 0, false).Return(nil)
181185
mockPortal.EXPECT().VerifyBuildArtifactDownload(mock.Anything, expectedBuildToDownload).Return(nil)
182186
err := c.DownloadBuild(mockPortal, build, filename)
183187
Expect(err).NotTo(HaveOccurred())
184188
})
185189

186-
It("Saves MD5 checksum to sidecar file when available", func() {
187-
md5Sum := "d41d8cd98f00b204e9800998ecf8427e"
188-
buildWithMd5 := portal.Build{
190+
It("Truncates long hash to 10 characters in filename", func() {
191+
longHash := "abc1234567890defghij"
192+
buildWithLongHash := portal.Build{
189193
Version: version,
194+
Hash: longHash,
190195
Artifacts: []portal.Artifact{
191-
{Filename: filename, Md5Sum: md5Sum},
196+
{Filename: filename},
192197
{Filename: "otherFilename.tar.gz"},
193198
},
194199
}
195200
expectedBuildToDownload := portal.Build{
196201
Version: version,
202+
Hash: longHash,
197203
Artifacts: []portal.Artifact{
198-
{Filename: filename, Md5Sum: md5Sum},
204+
{Filename: filename},
199205
},
200206
}
201207

202208
fakeFile := os.NewFile(uintptr(0), filename)
203-
mockFileWriter.EXPECT().OpenAppend(version+"-"+filename).Return(fakeFile, nil)
204-
mockFileWriter.EXPECT().Open(version+"-"+filename).Return(fakeFile, nil)
205-
mockFileWriter.EXPECT().WriteFile(version+"-"+filename+".md5", []byte(md5Sum), os.FileMode(0644)).Return(nil)
209+
mockFileWriter.EXPECT().OpenAppend(version+"-abc1234567-"+filename).Return(fakeFile, nil)
210+
mockFileWriter.EXPECT().Open(version+"-abc1234567-"+filename).Return(fakeFile, nil)
206211
mockPortal.EXPECT().DownloadBuildArtifact(portal.CodesphereProduct, expectedBuildToDownload, mock.Anything, 0, false).Return(nil)
207212
mockPortal.EXPECT().VerifyBuildArtifactDownload(mock.Anything, expectedBuildToDownload).Return(nil)
208-
err := c.DownloadBuild(mockPortal, buildWithMd5, filename)
213+
err := c.DownloadBuild(mockPortal, buildWithLongHash, filename)
209214
Expect(err).NotTo(HaveOccurred())
210215
})
211216

@@ -216,14 +221,15 @@ var _ = Describe("DownloadPackages", func() {
216221
It("Downloads the correct artifact to the correct output file", func() {
217222
expectedBuildToDownload := portal.Build{
218223
Version: version,
224+
Hash: hash,
219225
Artifacts: []portal.Artifact{
220226
{Filename: filename},
221227
},
222228
}
223229

224230
fakeFile := os.NewFile(uintptr(0), filename)
225-
mockFileWriter.EXPECT().OpenAppend("other-version-v1.42.0-"+filename).Return(fakeFile, nil)
226-
mockFileWriter.EXPECT().Open("other-version-v1.42.0-"+filename).Return(fakeFile, nil)
231+
mockFileWriter.EXPECT().OpenAppend("other-version-v1.42.0-"+hash+"-"+filename).Return(fakeFile, nil)
232+
mockFileWriter.EXPECT().Open("other-version-v1.42.0-"+hash+"-"+filename).Return(fakeFile, nil)
227233
mockPortal.EXPECT().DownloadBuildArtifact(portal.CodesphereProduct, expectedBuildToDownload, mock.Anything, 0, false).Return(nil)
228234
mockPortal.EXPECT().VerifyBuildArtifactDownload(mock.Anything, expectedBuildToDownload).Return(nil)
229235
err := c.DownloadBuild(mockPortal, build, filename)

internal/installer/package.go

Lines changed: 1 addition & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717

1818
const depsDir = "deps"
1919
const depsTar = "deps.tar.gz"
20-
const checksumMarkerFile = ".oms-package-checksum"
2120

2221
type PackageManager interface {
2322
FileIO() util.FileIO
@@ -74,52 +73,8 @@ func (p *Package) alreadyExtracted(dir string) (bool, error) {
7473
return isDir, nil
7574
}
7675

77-
func (p *Package) getPackageChecksum() string {
78-
data, err := p.fileIO.ReadFile(p.Filename + ".md5")
79-
if err != nil {
80-
return ""
81-
}
82-
return strings.TrimSpace(string(data))
83-
}
84-
85-
func (p *Package) getExtractedChecksum(workDir string) string {
86-
data, err := p.fileIO.ReadFile(path.Join(workDir, checksumMarkerFile))
87-
if err != nil {
88-
return ""
89-
}
90-
return strings.TrimSpace(string(data))
91-
}
92-
93-
func (p *Package) saveExtractedChecksum(workDir, checksum string) error {
94-
if checksum == "" {
95-
return nil
96-
}
97-
return p.fileIO.WriteFile(path.Join(workDir, checksumMarkerFile), []byte(checksum), 0644)
98-
}
99-
100-
func (p *Package) packageChanged(workDir string) bool {
101-
packageChecksum := p.getPackageChecksum()
102-
if packageChecksum == "" {
103-
return false
104-
}
105-
106-
extractedChecksum := p.getExtractedChecksum(workDir)
107-
if extractedChecksum == "" {
108-
log.Println("No checksum marker found in extracted directory, will re-extract to ensure consistency.")
109-
return true
110-
}
111-
112-
if packageChecksum != extractedChecksum {
113-
log.Printf("Package checksum changed (was: %s, now: %s), will re-extract.", extractedChecksum, packageChecksum)
114-
return true
115-
}
116-
117-
return false
118-
}
119-
12076
// Extract extracts the package tar.gz file into its working directory.
12177
// If force is true, it will overwrite existing files.
122-
// If the package checksum has changed since last extraction, it will also re-extract.
12378
func (p *Package) Extract(force bool) error {
12479
workDir := p.GetWorkDir()
12580
err := os.MkdirAll(p.OmsWorkdir, 0755)
@@ -132,18 +87,11 @@ func (p *Package) Extract(force bool) error {
13287
return fmt.Errorf("failed to figure out if package %s is already extracted in %s: %w", p.Filename, workDir, err)
13388
}
13489

135-
// Check if the package has changed since last extraction
136-
needsReExtraction := p.packageChanged(workDir)
137-
138-
if alreadyExtracted && !force && !needsReExtraction {
90+
if alreadyExtracted && !force {
13991
log.Println("Skipping extraction, package already unpacked. Use force option to overwrite.")
14092
return nil
14193
}
14294

143-
if needsReExtraction && !force {
144-
log.Println("Package has changed, re-extracting...")
145-
}
146-
14795
err = util.ExtractTarGz(p.fileIO, p.Filename, workDir)
14896
if err != nil {
14997
return fmt.Errorf("failed to extract package %s to %s: %w", p.Filename, workDir, err)
@@ -158,12 +106,6 @@ func (p *Package) Extract(force bool) error {
158106
}
159107
}
160108

161-
packageChecksum := p.getPackageChecksum()
162-
err = p.saveExtractedChecksum(workDir, packageChecksum)
163-
if err != nil {
164-
log.Printf("Warning: failed to save checksum marker: %v", err)
165-
}
166-
167109
return nil
168110
}
169111

internal/installer/package_test.go

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -153,103 +153,6 @@ var _ = Describe("Package", func() {
153153
Expect(err.Error()).To(ContainSubstring("failed to ensure workdir exists"))
154154
})
155155
})
156-
157-
Context("when package checksum changes", func() {
158-
var checksumFile string
159-
160-
BeforeEach(func() {
161-
checksumFile = pkg.Filename + ".md5"
162-
err := os.WriteFile(checksumFile, []byte("original-checksum-123"), 0644)
163-
Expect(err).ToNot(HaveOccurred())
164-
165-
err = pkg.Extract(false)
166-
Expect(err).ToNot(HaveOccurred())
167-
})
168-
169-
It("re-extracts when checksum changes", func() {
170-
workDir := pkg.GetWorkDir()
171-
markerFile := filepath.Join(workDir, ".oms-package-checksum")
172-
Expect(markerFile).To(BeAnExistingFile())
173-
content, err := os.ReadFile(markerFile)
174-
Expect(err).ToNot(HaveOccurred())
175-
Expect(string(content)).To(Equal("original-checksum-123"))
176-
177-
testFile := filepath.Join(workDir, "test-file.txt")
178-
err = os.WriteFile(testFile, []byte("modified content"), 0644)
179-
Expect(err).ToNot(HaveOccurred())
180-
181-
err = os.WriteFile(checksumFile, []byte("new-checksum-456"), 0644)
182-
Expect(err).ToNot(HaveOccurred())
183-
184-
err = pkg.Extract(false)
185-
Expect(err).ToNot(HaveOccurred())
186-
187-
actualContent, err := os.ReadFile(testFile)
188-
Expect(err).ToNot(HaveOccurred())
189-
Expect(string(actualContent)).To(Equal("test content"))
190-
191-
content, err = os.ReadFile(markerFile)
192-
Expect(err).ToNot(HaveOccurred())
193-
Expect(string(content)).To(Equal("new-checksum-456"))
194-
})
195-
196-
It("skips extraction when checksum is the same", func() {
197-
workDir := pkg.GetWorkDir()
198-
markerFile := filepath.Join(workDir, ".oms-package-checksum")
199-
Expect(markerFile).To(BeAnExistingFile())
200-
201-
testFile := filepath.Join(workDir, "test-file.txt")
202-
err := os.WriteFile(testFile, []byte("modified content"), 0644)
203-
Expect(err).ToNot(HaveOccurred())
204-
205-
err = pkg.Extract(false)
206-
Expect(err).ToNot(HaveOccurred())
207-
208-
actualContent, err := os.ReadFile(testFile)
209-
Expect(err).ToNot(HaveOccurred())
210-
Expect(string(actualContent)).To(Equal("modified content"))
211-
})
212-
213-
It("re-extracts when marker file is missing", func() {
214-
workDir := pkg.GetWorkDir()
215-
markerFile := filepath.Join(workDir, ".oms-package-checksum")
216-
217-
err := os.Remove(markerFile)
218-
Expect(err).ToNot(HaveOccurred())
219-
220-
testFile := filepath.Join(workDir, "test-file.txt")
221-
err = os.WriteFile(testFile, []byte("modified content"), 0644)
222-
Expect(err).ToNot(HaveOccurred())
223-
224-
err = pkg.Extract(false)
225-
Expect(err).ToNot(HaveOccurred())
226-
227-
actualContent, err := os.ReadFile(testFile)
228-
Expect(err).ToNot(HaveOccurred())
229-
Expect(string(actualContent)).To(Equal("test content"))
230-
})
231-
})
232-
233-
Context("when no checksum sidecar file exists", func() {
234-
BeforeEach(func() {
235-
err := pkg.Extract(false)
236-
Expect(err).ToNot(HaveOccurred())
237-
})
238-
239-
It("skips extraction without checksum (backward compatibility)", func() {
240-
workDir := pkg.GetWorkDir()
241-
testFile := filepath.Join(workDir, "test-file.txt")
242-
err := os.WriteFile(testFile, []byte("modified content"), 0644)
243-
Expect(err).ToNot(HaveOccurred())
244-
245-
err = pkg.Extract(false)
246-
Expect(err).ToNot(HaveOccurred())
247-
248-
actualContent, err := os.ReadFile(testFile)
249-
Expect(err).ToNot(HaveOccurred())
250-
Expect(string(actualContent)).To(Equal("modified content"))
251-
})
252-
})
253156
})
254157
})
255158

0 commit comments

Comments
 (0)