fix: remove duplicates correctly
This commit is contained in:
		| @@ -203,8 +203,12 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) | ||||
| 	buildDepends = removeDuplicates(buildDepends) | ||||
| 	optDepends = removeDuplicates(optDepends) | ||||
| 	depends = removeDuplicates(depends) | ||||
| 	sources = removeDuplicates(sources) | ||||
| 	checksums = removeDuplicates(checksums) | ||||
|  | ||||
| 	if len(sources) != len(checksums) { | ||||
| 		slog.Error(gotext.Get("The checksums array must be the same length as sources")) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	sources, checksums = removeDuplicatesSources(sources, checksums) | ||||
|  | ||||
| 	mergedVars := types.BuildVars{ | ||||
| 		Sources:   sources, | ||||
| @@ -544,11 +548,6 @@ func (b *Builder) buildALRDeps(ctx context.Context, depends []string) (builtPath | ||||
| } | ||||
|  | ||||
| func (b *Builder) getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars) error { | ||||
| 	if len(bv.Sources) != len(bv.Checksums) { | ||||
| 		slog.Error(gotext.Get("The checksums array must be the same length as sources")) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
|  | ||||
| 	for i, src := range bv.Sources { | ||||
| 		opts := dl.Options{ | ||||
| 			Name:        fmt.Sprintf("%s[%d]", bv.Name, i), | ||||
|   | ||||
| @@ -313,3 +313,24 @@ func removeDuplicates(slice []string) []string { | ||||
|  | ||||
| 	return result | ||||
| } | ||||
|  | ||||
| func removeDuplicatesSources(sources, checksums []string) ([]string, []string) { | ||||
| 	seen := map[string]string{} | ||||
| 	keys := make([]string, 0) | ||||
| 	for i, s := range sources { | ||||
| 		if val, ok := seen[s]; !ok || strings.EqualFold(val, "SKIP") { | ||||
| 			if !ok { | ||||
| 				keys = append(keys, s) | ||||
| 			} | ||||
| 			seen[s] = checksums[i] | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	newSources := make([]string, len(keys)) | ||||
| 	newChecksums := make([]string, len(keys)) | ||||
| 	for i, k := range keys { | ||||
| 		newSources[i] = k | ||||
| 		newChecksums[i] = seen[k] | ||||
| 	} | ||||
| 	return newSources, newChecksums | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user