# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

cmake_minimum_required(VERSION 3.5)

if(EXISTS "@hgclone_stampfile@" AND EXISTS "@hgclone_infofile@" AND
  "@hgclone_stampfile@" IS_NEWER_THAN "@hgclone_infofile@")
  message(STATUS
    "Avoiding repeated hg clone, stamp file is up to date: "
    "'@hgclone_stampfile@'"
  )
  return()
endif()

execute_process(
  COMMAND ${CMAKE_COMMAND} -E rm -rf "@source_dir@"
  RESULT_VARIABLE error_code
)
if(error_code)
  message(FATAL_ERROR "Failed to remove directory: '@source_dir@'")
endif()

execute_process(
  COMMAND "@hg_EXECUTABLE@" clone -U "@hg_repository@" "@src_name@"
  WORKING_DIRECTORY "@work_dir@"
  RESULT_VARIABLE error_code
)
if(error_code)
  message(FATAL_ERROR "Failed to clone repository: '@hg_repository@'")
endif()

execute_process(
  COMMAND "@hg_EXECUTABLE@" update @hg_tag@
  WORKING_DIRECTORY "@work_dir@/@src_name@"
  RESULT_VARIABLE error_code
)
if(error_code)
  message(FATAL_ERROR "Failed to checkout tag: '@hg_tag@'")
endif()

# Complete success, update the script-last-run stamp file:
#
execute_process(
  COMMAND ${CMAKE_COMMAND} -E copy "@hgclone_infofile@" "@hgclone_stampfile@"
  RESULT_VARIABLE error_code
)
if(error_code)
  message(FATAL_ERROR "Failed to copy script-last-run stamp file: '@hgclone_stampfile@'")
endif()
