@@ -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