anchor.diff:  # This is all in a single "RUN" command so that if anything changes, "apt update" is run to fetch
   # the most current package versions (instead of potentially using old versions cached by docker).
   RUN apt-get clean && apt-get update && $APT_INSTALL gnupg ca-certificates && \
  -  echo 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/' >> /etc/apt/sources.list && \
  +  echo 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' >> /etc/apt/sources.list && \
     gpg --keyserver keyserver.ubuntu.com --recv-key E298A3A825C0D65DFD57CBB651716619E084DAB9 && \
     gpg -a --export E084DAB9 | apt-key add - && \
     apt-get clean && \
  
positive.code:   apt-get clean && \
    apt-get update && \
    $APT_INSTALL software-properties-common && \
    apt-add-repository -y ppa:brightbox/ruby-ng && \
    apt-get update && \
    # Install openjdk 8.
    $APT_INSTALL openjdk-8-jdk && \
  
negative.code: # TODO(SPARK-32407): Sphinx 3.1+ does not correctly index nested classes.
  #   See also https://github.com/sphinx-doc/sphinx/issues/7551.
  #   We should use the latest Sphinx version once this is fixed.
  ARG PIP_PKGS="sphinx==3.0.4 mkdocs==1.1.2 numpy==1.19.4 pydata_sphinx_theme==0.4.1 ipython==7.19.0 nbsphinx==0.8.0 numpydoc==1.1.0"
  ARG GEM_PKGS="jekyll:4.2.0 jekyll-redirect-from:0.16.0 rouge:3.26.0"
  
  # Install extra needed repos and refresh.
  # - CRAN repo
  