BASIS  version 1.2.3 (revision 2104)
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 # svn log
00032 if (INPUTFORMAT MATCHES "SVN")
00033 
00034   # remove UPHS domain from SVN user name
00035   string (REPLACE "\@UPHS.PENNHEALTH.PRV" "" CHANGELOG "${CHANGELOG}")
00036 
00037 # ----------------------------------------------------------------------------
00038 # git log
00039 elseif (INPUTFORMAT MATCHES "GIT")
00040 
00041   # remove git-svn-id entries from commit message body
00042   string (REGEX REPLACE "[ \n\r\t]*git-svn-id:[ \n\r]*[^@]*@[0-9]+[ \n\t]+[-0-9a-z]*" "" CHANGELOG "${CHANGELOG}")
00043   # group entries of same date and same author
00044   string (REGEX MATCHALL "[^\n]+(\n|$)" LINES "${CHANGELOG}")
00045   # clear changelog
00046   set (CHANGELOG)
00047   # process changelog line-by-line and leave out duplicate date and author lines
00048   set (PREV)
00049   foreach (LINE IN LISTS LINES)
00050     string (REGEX REPLACE "[\n]$" "" LINE "${LINE}")
00051     # Hack: For some reason the regular expression used above to split the
00052     #       change log file into lines produces lines with a newline followed
00053     #       by a semicolon. This could be a bug in CMake as well.
00054     string (REGEX REPLACE "[\n];" "\n" LINE "${LINE}")
00055     # a line with a date and author marks the beginning of a log entry
00056     if (LINE MATCHES "^[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]? [a-zA-Z ]+$")
00057       if (NOT PREV OR NOT LINE STREQUAL PREV)
00058         if (PREV)
00059           set (CHANGELOG "${CHANGELOG}\n")
00060         endif ()
00061         set (CHANGELOG "${CHANGELOG}${LINE}\n\n")
00062         set (PREV "${LINE}")
00063       endif ()
00064     else ()
00065       set (CHANGELOG "${CHANGELOG}${LINE}\n")
00066     endif ()
00067   endforeach ()
00068 
00069 endif ()
00070 
00071 # ----------------------------------------------------------------------------
00072 # write change log
00073 file (WRITE "${CHANGELOG_FILE}" "${CHANGELOG}")