[owners] Fix SuggestOwners when there is only one owner.

If there are less than two owners for the given paths,
current implementation will get stuck in infinite loop.

Change it to return any possible owner.

Change-Id: I75f18e0a00057c58d227dac23dc8572f1fba23f5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2572802
Auto-Submit: Edward Lesmes <ehmaldonado@chromium.org>
Commit-Queue: Josip Sokcevic <sokcevic@google.com>
Reviewed-by: Josip Sokcevic <sokcevic@google.com>
2 files changed
tree: 263d026c9e056e5f6bec58cfb9474ab4fce2fc79
  1. bootstrap/
  2. fetch_configs/
  3. git-templates/
  4. infra/
  5. man/
  6. python-bin/
  7. python2-bin/
  8. recipes/
  9. testing_support/
  10. tests/
  11. third_party/
  12. win_toolchain/
  13. zsh-goodies/
  14. .cipd_impl.ps1
  15. .gitattributes
  16. .gitignore
  17. .style.yapf
  18. .vpython
  19. .vpython3
  20. auth.py
  21. autoninja
  22. autoninja.bat
  23. autoninja.py
  24. bb
  25. bb.bat
  26. bootstrap_python3
  27. breakpad.py
  28. cipd
  29. cipd.bat
  30. cipd_bin_setup.bat
  31. cipd_bin_setup.sh
  32. cipd_client_version
  33. cipd_client_version.digests
  34. cipd_manifest.txt
  35. cipd_manifest.versions
  36. cit
  37. cit.bat
  38. cit.py
  39. clang-format
  40. clang-format.bat
  41. clang_format.py
  42. clang_format_merge_driver
  43. clang_format_merge_driver.bat
  44. clang_format_merge_driver.py
  45. codereview.settings
  46. compile_single_file
  47. compile_single_file.bat
  48. compile_single_file.py
  49. cpplint.bat
  50. cpplint.py
  51. cpplint_chromium.py
  52. cros
  53. CROS_OWNERS
  54. crosjobs
  55. detect_host_arch.py
  56. dirmd
  57. dirmd.bat
  58. download_from_google_storage
  59. download_from_google_storage.bat
  60. download_from_google_storage.py
  61. ensure_bootstrap
  62. fetch
  63. fetch.bat
  64. fetch.py
  65. fix_encoding.py
  66. gclient
  67. gclient-new-workdir.py
  68. gclient.bat
  69. gclient.py
  70. gclient_completion.sh
  71. gclient_eval.py
  72. gclient_paths.py
  73. gclient_scm.py
  74. gclient_utils.py
  75. gerrit_client.py
  76. gerrit_util.py
  77. git-cache
  78. git-cl
  79. git-crrev-parse
  80. git-drover
  81. git-find-releases
  82. git-footers
  83. git-freeze
  84. git-gs
  85. git-hyper-blame
  86. git-map
  87. git-map-branches
  88. git-mark-merge-base
  89. git-migrate-default-branch
  90. git-nav-downstream
  91. git-nav-upstream
  92. git-new-branch
  93. git-number
  94. git-rebase-update
  95. git-rename-branch
  96. git-reparent-branch
  97. git-retry
  98. git-runhooks
  99. git-squash-branch
  100. git-thaw
  101. git-upstream-diff
  102. git_cache.py
  103. git_cl.py
  104. git_cl_completion.sh
  105. git_common.py
  106. git_dates.py
  107. git_drover.py
  108. git_find_releases.py
  109. git_footers.py
  110. git_freezer.py
  111. git_hyper_blame.py
  112. git_map.py
  113. git_map_branches.py
  114. git_mark_merge_base.py
  115. git_migrate_default_branch.py
  116. git_nav_downstream.py
  117. git_new_branch.py
  118. git_number.py
  119. git_rebase_update.py
  120. git_rename_branch.py
  121. git_reparent_branch.py
  122. git_retry.py
  123. git_squash_branch.py
  124. git_upstream_diff.py
  125. gn
  126. gn.bat
  127. gn.py
  128. goma_auth
  129. goma_auth.bat
  130. goma_ctl
  131. goma_ctl.bat
  132. GOMA_OWNERS
  133. gsutil.py
  134. gsutil.py.bat
  135. gsutil.vpython
  136. led
  137. led.bat
  138. LICENSE
  139. lockfile.py
  140. luci-auth
  141. luci-auth.bat
  142. LUCI_OWNERS
  143. lucicfg
  144. lucicfg.bat
  145. mac_toolchain
  146. metrics.py
  147. metrics.README.md
  148. metrics_utils.py
  149. my_activity.py
  150. ninja
  151. ninja-linux32
  152. ninja-linux64
  153. ninja-mac
  154. ninja.exe
  155. ninjalog.README.md
  156. ninjalog_uploader.py
  157. ninjalog_uploader_wrapper.py
  158. OWNERS
  159. owners.py
  160. owners_client.py
  161. owners_finder.py
  162. post_build_ninja_summary.py
  163. PRESUBMIT.py
  164. presubmit_canned_checks.py
  165. presubmit_support.py
  166. profile.xml
  167. prpc
  168. prpc.bat
  169. pylint
  170. pylint-1.5
  171. pylint-1.6
  172. pylint-1.7
  173. pylint-1.8
  174. pylint-1.9
  175. pylint-2.6
  176. pylint.bat
  177. pylint_main.py
  178. pylintrc
  179. python_runner.sh
  180. rdb
  181. rdb.bat
  182. rdb_wrapper.py
  183. README.gclient.md
  184. README.git-cl.md
  185. README.md
  186. repo
  187. repo_launcher
  188. roll-dep
  189. roll-dep.bat
  190. roll_dep.py
  191. scm.py
  192. setup_color.py
  193. split_cl.py
  194. subcommand.py
  195. subprocess2.py
  196. update_depot_tools
  197. update_depot_tools.bat
  198. update_depot_tools_toggle.py
  199. upload_metrics.py
  200. upload_to_google_storage.py
  201. vpython
  202. vpython.bat
  203. vpython3
  204. vpython3.bat
  205. WATCHLISTS
  206. watchlists.py
  207. weekly
  208. win32imports.py
  209. wtf
  210. yapf
  211. yapf.bat
README.md

depot_tools

Tools for working with Chromium development. It requires python 2.7 or 3.8 for python 3 support.

Tools

The most important tools are:

  • fetch: A gclient wrapper to checkout a project. Use fetch --help for more details.
  • gclient: A meta-checkout tool. Think repo or git submodules, except that it support OS-specific rules, e.g. do not checkout Windows only dependencies when checking out for Android. Use gclient help for more details and README.gclient.md.
  • git cl: A code review tool to interact with Rietveld or Gerrit. Use git cl help for more details and README.git-cl.md.
  • roll-dep: A gclient dependency management tool to submit a dep roll, updating a dependency to a newer revision.

There are a lot of git utilities included.

Updating

depot_tools updates itself automatically when running gclient tool. To disable auto update, set the environment variable DEPOT_TOOLS_UPDATE=0.

To update package manually, run update_depot_tools.bat on Windows, or ./update_depot_tools on Linux or Mac.

On Windows only, running gclient will install git and python.

Contributing

To contribute change for review:

git new-branch <somename>
# Hack
git add .
git commit -a -m "Fixes goat teleporting"
# find reviewers
git cl owners
git log -- <yourfiles>

# Request a review.
git cl upload -r reviewer1@chromium.org,reviewer2@chromium.org --send-mail

# Edit change description if needed.
git cl desc

# If change is approved, flag it to be committed.
git cl set-commit

# If change needs more work.
git rebase-update
...
git cl upload -t "Fixes goat teleporter destination to be Australia"

See also open bugs, open reviews, forum or report problems.

cpplint.py

Until 2018, our cpplint.py was a copy of the upstream version at https://github.com/google/styleguide/tree/gh-pages/cpplint. Unfortunately, that repository is not maintained any more. If you want to update cpplint.py in depot_tools, just upload a patch to do so. We will figure out a long-term strategy via issue https://crbug.com/916550.

Note that the cpplint.py here is also used by the Tricium analyzer, so if the cpplint.py here changes, we should also update the copy used there.