# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Adjust a repo checkout's configuration, fixing/extending as needed"""

import constants

from chromite.lib import cros_build_lib


def FixExternalRepoPushUrls(buildroot):
  """Set up SSH push for cros remote."""

  shell_code = """
[ "${REPO_REMOTE}" = "cros" ] || exit 0;
git config "remote.${REPO_REMOTE}.pushurl" "%s/${REPO_PROJECT}";
""" % (constants.GERRIT_SSH_URL,)

  cros_build_lib.RunCommand(['repo', '--time', 'forall', '-c', shell_code],
                            cwd=buildroot)


def FixBrokenExistingRepos(buildroot):
  """Ensure all git configurations are at least syncable."""

  cros_build_lib.RunCommand(
      ['repo', '--time', 'forall', '-c',
      'git config --remove-section "url.%s" 2> /dev/null' %
      constants.GERRIT_SSH_URL], cwd=buildroot, error_ok=True)


def SetupGerritRemote(buildroot):
  """Set up gerrit remote with SSH push.

  This is used by buildbots. If a pushurl is present on the cros remote is
  present, it will be removed, for ensuring that all consumers in the buildbot
  have moved to use the cros remote.
  """

  urls = dict(gerrit_url=constants.GERRIT_SSH_URL,
              gerrit_int_url=constants.GERRIT_INT_SSH_URL)
  shell_code = """
if ! git config remote.gerrit.url > /dev/null; then
  if [ "${REPO_REMOTE}" = "cros" ]; then
    git config --unset-all "remote.${REPO_REMOTE}.pushurl" 2> /dev/null;
    git remote add gerrit "%(gerrit_url)s/${REPO_PROJECT}" || exit 1
  else
    git remote add gerrit "%(gerrit_int_url)s/${REPO_PROJECT}" || exit 1
  fi
fi
""" % urls

  cros_build_lib.RunCommand(['repo', '--time', 'forall', '-c', shell_code],
                            cwd=buildroot)
