PostprocessChangeLog.cmake
Go to the documentation of this file.
00001 ############################################################################## 00002 # @file PostprocessChangeLog.cmake 00003 # @brief Script used to postprocess ChangeLog generated from commit history. 00004 # 00005 # Usage: cmake -DCHANGELOG_FILE=file -DINPUTFORMAT=[SVN|SVN2CL|GIT] 00006 # -P PostprocessChangeLog.cmake 00007 # 00008 # Copyright (c) 2012 University of Pennsylvania. All rights reserved.<br /> 00009 # See https://www.cbica.upenn.edu/sbia/software/license.html or COPYING file. 00010 # 00011 # Contact: SBIA Group <sbia-software at uphs.upenn.edu> 00012 # 00013 # @ingroup CMakeTools 00014 ############################################################################## 00015 00016 # ---------------------------------------------------------------------------- 00017 # check required arguments 00018 if (NOT CHANGELOG_FILE) 00019 message (FATAL_ERROR "Missing CHANGELOG_FILE argument!") 00020 endif () 00021 00022 if (NOT INPUTFORMAT) 00023 set (INPUTFORMAT SVN) 00024 endif () 00025 00026 # ---------------------------------------------------------------------------- 00027 # read change log 00028 file (READ "${CHANGELOG_FILE}" CHANGELOG) 00029 00030 # ---------------------------------------------------------------------------- 00031 # git log 00032 if (INPUTFORMAT MATCHES "GIT") 00033 00034 # remove git-svn-id entries from commit message body 00035 string (REGEX REPLACE "[ \n\r\t]*git-svn-id:[ \n\r]*[^@]*@[0-9]+[ \n\t]+[-0-9a-z]*" "" CHANGELOG "${CHANGELOG}") 00036 # group entries of same date and same author 00037 string (REGEX MATCHALL "[^\n]+(\n|$)" LINES "${CHANGELOG}") 00038 # clear changelog 00039 set (CHANGELOG) 00040 # process changelog line-by-line and leave out duplicate date and author lines 00041 set (PREV) 00042 foreach (LINE IN LISTS LINES) 00043 string (REGEX REPLACE "[\n]$" "" LINE "${LINE}") 00044 # Hack: For some reason the regular expression used above to split the 00045 # change log file into lines produces lines with a newline followed 00046 # by a semicolon. This could be a bug in CMake as well. 00047 string (REGEX REPLACE "[\n];" "\n" LINE "${LINE}") 00048 # a line with a date and author marks the beginning of a log entry 00049 if (LINE MATCHES "^[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]? [a-zA-Z ]+$") 00050 if (NOT PREV OR NOT LINE STREQUAL PREV) 00051 if (PREV) 00052 set (CHANGELOG "${CHANGELOG}\n") 00053 endif () 00054 set (CHANGELOG "${CHANGELOG}${LINE}\n\n") 00055 set (PREV "${LINE}") 00056 endif () 00057 else () 00058 set (CHANGELOG "${CHANGELOG}${LINE}\n") 00059 endif () 00060 endforeach () 00061 00062 endif () 00063 00064 # ---------------------------------------------------------------------------- 00065 # write change log 00066 file (WRITE "${CHANGELOG_FILE}" "${CHANGELOG}")