Snap for 8953554 from 7968c52625bd8aece3a55229b5d3da845767eaf6 to mainline-tzdata4-release
Change-Id: I2aa8f4e4354df2b241d45ae1d031e0d54bfc2139
diff --git a/proptools/escape.go b/proptools/escape.go
index 4ef10f0..9443a95 100644
--- a/proptools/escape.go
+++ b/proptools/escape.go
@@ -122,4 +122,8 @@
return ShellEscape(NinjaEscape(s))
}
+func NinjaAndShellEscapeIncludingSpaces(s string) string {
+ return ShellEscapeIncludingSpaces(NinjaEscape(s))
+}
+
var singleQuoteReplacer = strings.NewReplacer(`'`, `'\''`)
diff --git a/singleton_ctx.go b/singleton_ctx.go
index 455f6fc..d579b8e 100644
--- a/singleton_ctx.go
+++ b/singleton_ctx.go
@@ -157,6 +157,10 @@
// Fs returns a pathtools.Filesystem that can be used to interact with files. Using the Filesystem interface allows
// the singleton to be used in build system tests that run against a mock filesystem.
Fs() pathtools.FileSystem
+
+ // ModuleVariantsFromName returns the list of module variants named `name` in the same namespace as `referer`.
+ // Allows generating build actions for `referer` based on the metadata for `name` deferred until the singleton context.
+ ModuleVariantsFromName(referer Module, name string) []Module
}
var _ SingletonContext = (*singletonContext)(nil)
@@ -369,3 +373,26 @@
func (s *singletonContext) Fs() pathtools.FileSystem {
return s.context.fs
}
+
+func (s *singletonContext) ModuleVariantsFromName(referer Module, name string) []Module {
+ c := s.context
+
+ refererInfo := c.moduleInfo[referer]
+ if refererInfo == nil {
+ s.ModuleErrorf(referer, "could not find module %q", referer.Name())
+ return nil
+ }
+
+ moduleGroup, exists := c.nameInterface.ModuleFromName(name, refererInfo.namespace())
+ if !exists {
+ return nil
+ }
+ result := make([]Module, 0, len(moduleGroup.modules))
+ for _, module := range moduleGroup.modules {
+ moduleInfo := module.module()
+ if moduleInfo != nil {
+ result = append(result, moduleInfo.logicModule)
+ }
+ }
+ return result
+}