Decision
Well, you can easily implement such a function yourself.
I basically embedded the commit command in a shell script. This script will first replace the necessary macros, and then commit the changes. The project consists of two files:
Content
keysub , a bash shell script and keysub.awk awk script to replace keywords in a specific file. The third file is a configuration file that contains the values that should be replaced (in addition to variables, such as the commit amount and timestamp).
How do you use it?
You call keysub instead of keysub with the same parameters. The -m or -a option should appear before any other commit option. The new option (which should always be the first) is -f , which takes the configuration file as a value. Example:
$ git add 'someJavaFile.java' $ keysub -m 'fixed concurrent thread issue' $ git push
or
$ git -f .myfile.cnf -m 'enhanced javadoc entries'
keysub
#!/bin/bash # 0 -- functions/methods ######################### # <Function description> function get_timestamp () { date # change this to get a custom timestamp } # 1 -- Variable declarations ############################# # input file for mapping file=".keysub.cnf" timestamp=$(get_timestamp) # 2 -- Argument parsing and flag checks ######################################## # Parsing flag-list while getopts ":f:m:a" opt; do case $opt in f) file=${OPTARG} ;; a) echo 'Warning, keyword substitution will be incomplete when invoked' echo 'with the -a flag. The commit message will not be substituted into' echo 'source files. Use -m "message" for full substitutions.' echo -e 'Would you like to continue [y/n]? \c' read answer [[ ${answer} =~ [Yy] ]] || exit 3 unset answer type="commit_a" break ;; m) type="commit_m" commitmsg=${OPTARG} break ;; \?) break ;; esac done shift $(($OPTIND - 1)) # check file for typing if [[ ! -f ${file} ]] then echo 'No valid config file found.' exit 1 fi # check if commit type was supplied if [[ -z ${type} ]] then echo 'No commit parameters/flags supplied...' exit 2 fi # 3 -- write config file ######################### sed " /timestamp:/ { s/\(timestamp:\).*/\1${timestamp}/ } /commitmsg:/ { s/\(commitmsg:\).*/\1${commitmsg:-default commit message}/ } " ${file} > tmp mv tmp ${file} # 4 -- get remaining tags ########################## author=$(grep 'author' ${file} | cut -f1 -d':' --complement) # 5 -- get files ready to commit ################################# git status -s | grep '^[MARCU]' | cut -c1-3 --complement > tmplist # 6 -- invoke awk and perform substitution ########################################### # beware to change path to your location of the awk script for item in $(cat tmplist) do echo ${item} awk -v "commitmsg=${commitmsg}" -v "author=${author}" \ -v "timestamp=${timestamp}" -f "${HOME}/lib/awk/keysub.awk" ${item} \ > tmpfile mv tmpfile ${item} done rm tmplist # 5 -- invoke git commit ######################### case ${type} in "commit_m") git commit -m "${commitmsg}" "$@" ;; "commit_a") git commit -a "$@" ;; esac # exit using success code exit 0
keysub.awk
# 0 BEGIN ########## BEGIN { FS=":" OFS=": " } # 1 parse source files ######################## # update author $0 ~ /.*\$Author.*\$.*/ { $2=author " $" } # update timestamp $0 ~ /.*\$LastChangedDate.*\$.*/ { $0=$1 $2=timestamp " $" } # update commit message $0 ~ /.*\$LastChangeMessage.*\$.*/ { $2=commitmsg " $" } # update commit counts $0 ~ /.*\$Rev.*\$.*/ { ++$2 $2=$2 " $" } # print line { print }
configuration file
author:ubunut-420 timestamp:Fri Jun 21 20:42:54 CEST 2013 commitmsg:default commit message
Notes
I tried to document well enough so that you could easily implement it and change it to your own, personal needs. Note that you can give macros whatever name you want, as long as you change it in the source code. I also sought to simplify the script extension, you should easily add new macros. If you are interested in expanding or modifying the script, you can also take a look at the .git directory, there should be a lot of information that can help improve the script due to lack of time. I have not examined the folder though.
ShellFish Jun 21 '13 at 7:13 2013-06-21 19:13
source share