BASIS  r3148
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}")