Skip to content

Commit 342d5d9

Browse files
add tests
1 parent 8768844 commit 342d5d9

File tree

5 files changed

+245
-33
lines changed

5 files changed

+245
-33
lines changed

modules/packages/arch/metadata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ func (p *Package) Desc() string {
309309
}
310310

311311
var buf bytes.Buffer
312-
for i := 0; i < 40; i += 2 {
312+
for i := 0; i < len(entries); i += 2 {
313313
if entries[i+1] != "" {
314314
_, _ = fmt.Fprintf(&buf, "%%%s%%\n%s\n\n", entries[i], entries[i+1])
315315
}

modules/packages/arch/metadata_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ checkdepend = ola
160160
makedepend = cmake
161161
backup = usr/bin/paket1
162162
`
163-
p, err := ParsePackageInfo(strings.NewReader(PKGINFO))
163+
p, err := ParsePackageInfo(strings.NewReader(`PKGINFO`))
164164
assert.NoError(t, err)
165165
assert.Equal(t, Package{
166166
Name: "a",
@@ -436,6 +436,7 @@ dummy6
436436
FileMetadata: FileMetadata{
437437
CompressedSize: 401,
438438
InstalledSize: 1500453,
439+
MD5: "5016660ef3d9aa148a7b72a08d3df1b2",
439440
SHA256: "9fa4ede47e35f5971e4f26ecadcbfb66ab79f1d638317ac80334a3362dedbabd",
440441
BuildDate: 1681646714,
441442
Packager: "Jelle van der Waa <[email protected]>",

routers/api/packages/arch/arch.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ func RemovePackage(ctx *context.Context) {
237237
}
238238
}
239239
if deleted {
240+
err = arch_service.BuildCustomRepositoryFiles(ctx, ctx.Package.Owner.ID, distro)
241+
if err != nil {
242+
apiError(ctx, http.StatusInternalServerError, err)
243+
}
240244
ctx.Status(http.StatusNoContent)
241245
} else {
242246
ctx.Error(http.StatusNotFound)

services/packages/arch/repository.go

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,28 @@ func BuildAllRepositoryFiles(ctx context.Context, ownerID int64) error {
4242
}
4343
for _, pf := range pfs {
4444
if strings.HasSuffix(pf.Name, ".db") {
45-
arch := strings.TrimSuffix(strings.TrimPrefix(pf.Name, pf.CompositeKey), ".db")
45+
arch := strings.TrimSuffix(strings.TrimPrefix(pf.Name, fmt.Sprintf("%s-", pf.CompositeKey)), ".db")
46+
if err := BuildPacmanDB(ctx, ownerID, pf.CompositeKey, arch); err != nil {
47+
return err
48+
}
49+
}
50+
}
51+
return nil
52+
}
53+
54+
func BuildCustomRepositoryFiles(ctx context.Context, ownerID int64, disco string) error {
55+
pv, err := GetOrCreateRepositoryVersion(ctx, ownerID)
56+
if err != nil {
57+
return err
58+
}
59+
// remove old db files
60+
pfs, err := packages_model.GetFilesByVersionID(ctx, pv.ID)
61+
if err != nil {
62+
return err
63+
}
64+
for _, pf := range pfs {
65+
if strings.HasSuffix(pf.Name, ".db") && pf.CompositeKey == disco {
66+
arch := strings.TrimSuffix(strings.TrimPrefix(pf.Name, fmt.Sprintf("%s-", pf.CompositeKey)), ".db")
4667
if err := BuildPacmanDB(ctx, ownerID, pf.CompositeKey, arch); err != nil {
4768
return err
4869
}
@@ -85,24 +106,21 @@ func BuildPacmanDB(ctx context.Context, ownerID int64, distro, arch string) erro
85106
return err
86107
}
87108
for _, pf := range pfs {
88-
if pf.CompositeKey == distro && strings.Contains(pf.CompositeKey, arch) {
109+
if pf.CompositeKey == distro && strings.HasPrefix(pf.Name, fmt.Sprintf("%s-%s", distro, arch)) {
89110
// remove distro and arch
90111
if err := packages_service.DeletePackageFile(ctx, pf); err != nil {
91112
return err
92113
}
93114
}
94115
}
95-
db, err := packages_module.NewHashedBuffer()
116+
117+
db, err := flushDB(ctx, ownerID, distro, arch)
96118
if errors.Is(err, io.EOF) {
97-
return err
119+
return nil
98120
} else if err != nil {
99121
return err
100122
}
101123
defer db.Close()
102-
err = flushDB(ctx, ownerID, distro, arch, db)
103-
if err != nil {
104-
return nil
105-
}
106124
// Create db signature cache
107125
_, err = db.Seek(0, io.SeekStart)
108126
if err != nil {
@@ -138,13 +156,17 @@ func BuildPacmanDB(ctx context.Context, ownerID int64, distro, arch string) erro
138156
return nil
139157
}
140158

141-
func flushDB(ctx context.Context, ownerID int64, distro, arch string, db *packages_module.HashedBuffer) error {
159+
func flushDB(ctx context.Context, ownerID int64, distro, arch string) (*packages_module.HashedBuffer, error) {
142160
pkgs, err := packages_model.GetPackagesByType(ctx, ownerID, packages_model.TypeArch)
143161
if err != nil {
144-
return err
162+
return nil, err
145163
}
146164
if len(pkgs) == 0 {
147-
return io.EOF
165+
return nil, io.EOF
166+
}
167+
db, err := packages_module.NewHashedBuffer()
168+
if err != nil {
169+
return nil, err
148170
}
149171
gw := gzip.NewWriter(db)
150172
tw := tar.NewWriter(gw)
@@ -155,7 +177,7 @@ func flushDB(ctx context.Context, ownerID int64, distro, arch string, db *packag
155177
ctx, ownerID, packages_model.TypeArch, pkg.Name,
156178
)
157179
if err != nil {
158-
return err
180+
return nil, errors.Join(db.Close(), err)
159181
}
160182
sort.Slice(versions, func(i, j int) bool {
161183
return versions[i].CreatedUnix > versions[j].CreatedUnix
@@ -175,7 +197,7 @@ func flushDB(ctx context.Context, ownerID int64, distro, arch string, db *packag
175197
ctx, packages_model.PropertyTypeFile, pf.ID, arch_module.PropertyDescription,
176198
)
177199
if err != nil {
178-
return err
200+
return nil, errors.Join(db.Close(), err)
179201
}
180202
if len(pps) >= 1 {
181203
meta := []byte(pps[0].Value)
@@ -185,16 +207,16 @@ func flushDB(ctx context.Context, ownerID int64, distro, arch string, db *packag
185207
Mode: int64(os.ModePerm),
186208
}
187209
if err = tw.WriteHeader(header); err != nil {
188-
return err
210+
return nil, errors.Join(db.Close(), err)
189211
}
190212
if _, err := tw.Write(meta); err != nil {
191-
return err
213+
return nil, errors.Join(db.Close(), err)
192214
}
193215
break
194216
}
195217
}
196218
}
197-
return nil
219+
return db, nil
198220
}
199221

200222
// GetPackageFile Get data related to provided filename and distribution, for package files

0 commit comments

Comments
 (0)