Use array for prefixmap instead of map
Go doesn't guarantee the order of items in a map, in fact the order
is randomized, but for prefixmap the order is important so use array.
Bug: 3300
Change-Id: Icbf2b2ccc68f980001ed657f090d29b308b602a0
Reviewed-on: https://fuchsia-review.googlesource.com/c/tools/+/408554
Commit-Queue: Petr Hosek <phosek@google.com>
Reviewed-by: Scott Graham <scottmg@google.com>
Reviewed-by: David Turner <digit@google.com>
diff --git a/godepfile/cmd/godepfile.go b/godepfile/cmd/godepfile.go
index 9d06fe8..d410a4c 100644
--- a/godepfile/cmd/godepfile.go
+++ b/godepfile/cmd/godepfile.go
@@ -30,17 +30,17 @@
return nil
}
-type mapFlag map[string]string
+type prefixmapFlag []struct{from, to string}
-func (v *mapFlag) String() string {
+func (v *prefixmapFlag) String() string {
var s []string
- for from, to := range *v {
- s = append(s, fmt.Sprintf("%s=%s", from, to))
+ for _, p := range *v {
+ s = append(s, fmt.Sprintf("%s=%s", p.from, p.to))
}
return strings.Join(s, " ")
}
-func (v *mapFlag) Set(s string) error {
+func (v *prefixmapFlag) Set(s string) error {
if strings.Count(s, "=") != 1 {
return errors.New("argument must be of the form from=to")
}
@@ -49,7 +49,7 @@
if from == "" || to == "" {
return errors.New("from and to must be non-empty")
}
- (*v)[from] = to
+ *v = append(*v, struct{from, to string}{from, to})
return nil
}
@@ -57,7 +57,7 @@
ctx = build.Default
output string
test bool
- prefixmap = mapFlag{}
+ prefixmap = prefixmapFlag{}
)
func init() {
@@ -122,9 +122,9 @@
var files []string
srcdir := pkg.Dir + "/"
- for from, to := range prefixmap {
- if strings.HasPrefix(srcdir, from) {
- srcdir = to + srcdir[len(from):]
+ for _, p := range prefixmap {
+ if strings.HasPrefix(srcdir, p.from) {
+ srcdir = p.to + srcdir[len(p.from):]
}
}