[fuchsia] Update product-bundles script to stay consistent with ffx.

`ffx product-bundle get` will add repositories after downloading,
and will not download a product if the repository is still present.
However, `ffx product-bundle remove` does not remove repositories,
preventing a `remove`->`get` on the same product-bundle from
succeeding.

Adding logic to check if a repository is stale (by checking if the
path is present) helps with this.

With a way to confirm that a PB is or isn't downloaded now, we can
verify the success of this by simply getting the list of available
PBs via repository, and comparing this against the desired PBs.
This allows for simplified downloaded and staleness checks (all while
guaranteeing the PB is actually downloaded when we say it is).

This CL also changes how versioning and caching is done. Versioning
(IE, signature) was done via a .product_bundle file. This file is no
longer used by FFX. This also introduced another way for stale
references that don't get updated on remove. Instead, versions
will be determined based on the `product-bundle list` of URLs.

Also adds unit tests to the new methods.

Change-Id: I2b887a252b081ba7f7ed20a53f54b2a6c8062207
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4027068
Commit-Queue: Rohan Pavone <rohpavone@chromium.org>
Reviewed-by: Greg Thompson <grt@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1075226}
3 files changed
tree: e57b3393633ec73fb0f4ad6b8d6d6ab8c8e4104e
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. DIR_METADATA
  68. ENG_REVIEW_OWNERS
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.