in tools/migration/crosstool_to_starlark_lib.go [1052:1098]
func getAssignmentStatement(field string, valToIds map[string][]string,
crosstool *crosstoolpb.CrosstoolRelease,
toCToolchainIdentifier map[string]CToolchainIdentifier,
depth int, isPlainString, shouldFail bool) string {
var b bytes.Buffer
if len(valToIds) <= 1 {
// if there is only one possible value for this field, we don't need if statements
for val := range valToIds {
if val != "None" && isPlainString {
val = "\"" + val + "\""
}
b.WriteString(fmt.Sprintf("%s%s = %s\n", getTabs(depth), field, val))
break
}
} else {
first := true
var keys []string
for k := range valToIds {
keys = append(keys, k)
}
sort.Strings(keys)
for _, value := range keys {
ids := valToIds[value]
branch := "elif"
if first {
branch = "if"
}
b.WriteString(
getIfStatement(branch, ids, field, value,
toCToolchainIdentifier, depth, isPlainString))
first = false
}
if shouldFail {
b.WriteString(
fmt.Sprintf(
"%selse:\n%sfail(\"Unreachable\")\n",
getTabs(depth), getTabs(depth+1)))
} else {
b.WriteString(
fmt.Sprintf(
"%selse:\n%s%s = None\n",
getTabs(depth), getTabs(depth+1), field))
}
}
b.WriteString("\n")
return b.String()
}