INSTALL_MASK: index patterns anchored with leading slash (bug 675826)

For scalability, use a tree structure to index patterns that are
anchored with a leading slash.

Patterns anchored with leading slash are indexed by leading non-glob
components, making it possible to minimize the number of fnmatch
calls. For example:

  /foo*/bar -> {'.': ['/foo*/bar']}

  /foo/bar* -> {'foo': {'.': ['/foo/bar*']}}

  /foo/bar/ -> {'foo': {'bar': {'.': ['/foo/bar/']}}}

Bug: https://bugs.gentoo.org/675826
Signed-off-by: Zac Medico <zmedico@gentoo.org>
(cherry picked from commit eb2674c1c2d84b2c9e9923e1c1666cb7a596c36c)

BUG=chromium:969797
TEST=ran `build_image --board=betty base test`

Change-Id: Icf0ec621a3f68b2502d03d932bf7077d7ffd7464
Reviewed-on: https://chromium-review.googlesource.com/1707372
Tested-by: Will Bradley <wbbradley@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Chris McDonald <cjmcdonald@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Allen Webb <allenwebb@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
2 files changed