public static void enforceChangingDeps()

in buildSrc/src/main/java/com/uber/okbuck/core/dependency/DependencyUtils.java [178:213]


  public static void enforceChangingDeps(Project project, Configuration configuration) {
    ExternalDependenciesExtension externalDependenciesExtension =
        ProjectUtil.getOkBuckExtension(project).getExternalDependenciesExtension();
    configuration.resolutionStrategy(
        strategy -> {
          strategy.eachDependency(
              details -> {
                String requested = details.getRequested().getVersion();
                if (requested != null) {
                  if (requested.startsWith("+")
                      || requested.contains(",")
                      || requested.endsWith("-SNAPSHOT")) {
                    String dependency = details.getRequested().toString();
                    if (!externalDependenciesExtension
                        .getDynamicDependenciesToIgnore()
                        .contains(dependency)) {
                      String useVersion =
                          externalDependenciesExtension
                              .getDynamicDependencyVersionMap()
                              .get(dependency);
                      if (useVersion != null) {
                        details.useVersion(useVersion);
                      } else {
                        throw new IllegalStateException(
                            "Please do not use changing dependencies. They can cause hard to reproduce builds.\n"
                                + "Found changing dependency "
                                + details.getRequested()
                                + " in Configuration "
                                + configuration);
                      }
                    }
                  }
                }
              });
        });
  }