Commit 68d015fc authored by Jason Heeris's avatar Jason Heeris Committed by Brad King
Browse files

FindSubversion: Add Subversion_WC_INFO option to suppress failures

Subversion fails when the directory is not actually under its control.
Allow projects to tolerate this case optionally.

Fixes: #18264
parent f782759e
FindSubversion-wc-info-error
----------------------------
* The :module:`FindSubversion` module ``Subversion_WC_INFO`` command
gained an ``IGNORE_SVN_FAILURE`` option to suppress failures,
e.g. when the source tree is not under Subversion control.
...@@ -19,17 +19,21 @@ ...@@ -19,17 +19,21 @@
# #
# #
# The minimum required version of Subversion can be specified using the # The minimum required version of Subversion can be specified using the
# standard syntax, e.g. find_package(Subversion 1.4) # standard syntax, e.g. ``find_package(Subversion 1.4)``.
# #
# If the command line client executable is found two macros are defined: # If the command line client executable is found two macros are defined:
# #
# :: # ::
# #
# Subversion_WC_INFO(<dir> <var-prefix>) # Subversion_WC_INFO(<dir> <var-prefix> [IGNORE_SVN_FAILURE])
# Subversion_WC_LOG(<dir> <var-prefix>) # Subversion_WC_LOG(<dir> <var-prefix>)
# #
# Subversion_WC_INFO extracts information of a subversion working copy # ``Subversion_WC_INFO`` extracts information of a subversion working copy at a
# at a given location. This macro defines the following variables: # given location. This macro defines the following variables if running
# Subversion's ``info`` command on ``<dir>`` succeeds; otherwise a
# ``SEND_ERROR`` message is generated. The error can be ignored by providing the
# ``IGNORE_SVN_FAILURE`` option, which causes these variables to remain
# undefined.
# #
# :: # ::
# #
...@@ -41,9 +45,8 @@ ...@@ -41,9 +45,8 @@
# <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit # <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
# <var-prefix>_WC_INFO - output of command `svn info <dir>' # <var-prefix>_WC_INFO - output of command `svn info <dir>'
# #
# Subversion_WC_LOG retrieves the log message of the base revision of a # ``Subversion_WC_LOG`` retrieves the log message of the base revision of a
# subversion working copy at a given location. This macro defines the # subversion working copy at a given location. This macro defines the variable:
# variable:
# #
# :: # ::
# #
...@@ -84,6 +87,14 @@ if(Subversion_SVN_EXECUTABLE) ...@@ -84,6 +87,14 @@ if(Subversion_SVN_EXECUTABLE)
"\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}") "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}")
macro(Subversion_WC_INFO dir prefix) macro(Subversion_WC_INFO dir prefix)
cmake_parse_arguments(
"Subversion_WC_INFO"
"IGNORE_SVN_FAILURE"
"" ""
${ARGN}
)
# the subversion commands should be executed with the C locale, otherwise # the subversion commands should be executed with the C locale, otherwise
# the message (which are parsed) may be translated, Alex # the message (which are parsed) may be translated, Alex
set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}") set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
...@@ -95,10 +106,7 @@ if(Subversion_SVN_EXECUTABLE) ...@@ -95,10 +106,7 @@ if(Subversion_SVN_EXECUTABLE)
RESULT_VARIABLE Subversion_svn_info_result RESULT_VARIABLE Subversion_svn_info_result
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT ${Subversion_svn_info_result} EQUAL 0) if(${Subversion_svn_info_result} EQUAL 0)
message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
else()
string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
"\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}") "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*" string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
...@@ -111,7 +119,8 @@ if(Subversion_SVN_EXECUTABLE) ...@@ -111,7 +119,8 @@ if(Subversion_SVN_EXECUTABLE)
"\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*" string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
"\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
elseif(NOT Subversion_WC_INFO_IGNORE_SVN_FAILURE)
message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
endif() endif()
# restore the previous LC_ALL # restore the previous LC_ALL
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment