diff --git a/cg-log b/cg-log --- a/cg-log +++ b/cg-log @@ -141,6 +141,72 @@ list_commit_files() echo "$coldefault:" } +print_log() { + trap exit SIGPIPE + commit="$1"; shift + tree= + parents=() + author= + committer= + + git-cat-file commit $commit | \ + while read key rest; do + trap exit SIGPIPE + case "$key" in + author) + author="$rest" + ;; + committer) + committer="$rest" + ;; + tree) + tree="$rest" + ;; + parent) + parents=("${parents[@]}" "$rest") + ;; + "") + if [ $# -ne 0 ]; then + parent="${parents[0]}" + diff_ops= + [ "$parent" ] || diff_ops=--root + + [ "$(git-diff-tree -r $diff_ops $commit $parent "$@")" ] || return 1 + fi + if [ "$user" ]; then + echo "$author $committer" | grep -qi "$user" || return 1 + fi + + echo ${colheader}commit ${commit%:*}$coldefault + echo ${colheader}tree $tree$coldefault + for parent in "${parents[@]}"; do + echo ${colheader}parent $parent$coldefault + done + + date=(${author#*> }) + pdate="$(showdate $date)" + [ "$pdate" ] && author="${author%> *}> $pdate" + echo ${colauthor}author $author$coldefault + + date=(${committer#*> }) + pdate="$(showdate $date)" + [ "$pdate" ] && committer="${committer%> *}> $pdate" + echo ${colcommitter}committer $committer$coldefault + + if [ -n "$list_files" ]; then + list_commit_files "$tree" "${parents[0]}" + fi + echo; sed -re ' + / *Signed-off-by:.*/Is//'$colsignoff'&'$coldefault'/ + / *Acked-by:.*/Is//'$colsignoff'&'$coldefault'/ + s/./ &/ + ' + echo -e "\r" + ;; + esac + done; +} + if [ "$mergebase" ]; then [ "$log_start" ] || log_start="origin" [ "$log_end" ] || log_end="master" @@ -162,60 +228,7 @@ fi $revls | $revsort | while read time commit parents; do trap exit SIGPIPE - tree1= - tree2= [ "$revfmt" = "git-rev-list" ] && commit="$time" - if [ $# -ne 0 ]; then - parent=$(git-cat-file commit $commit | sed -n '2s/parent //p;2Q') - [ "$parent" ] && [ "$(git-diff-tree -r $commit $parent "$@")" ] || continue - fi - if [ "$user" ]; then - git-cat-file commit $commit | grep -e '^author ' -e '^committer ' | grep -qi "$user" || continue - fi - echo $colheader""commit ${commit%:*} $coldefault; - git-cat-file commit $commit | \ - while read key rest; do - trap exit SIGPIPE - case "$key" in - "author"|"committer") - if [ "$key" = "author" ]; then - color="$colauthor" - else - color="$colcommitter" - fi - - date=(${rest#*> }) - pdate="$(showdate $date)" - if [ "$pdate" ]; then - echo -n $color$key $rest | sed "s/>.*/> $pdate/" - echo $coldefault - else - echo $color$key $rest $coldefault - fi - ;; - "tree"|"parent") - if [ -z $tree1 ]; then - tree1=$rest - elif [ -z $tree2 ]; then - tree2=$rest - fi - echo $colheader$key $rest $coldefault - ;; - "") - if [ -n "$list_files" ]; then - list_commit_files "$tree1" "$tree2" - fi - echo; sed -re ' - / *Signed-off-by:.*/Is//'$colsignoff'&'$coldefault'/ - / *Acked-by:.*/Is//'$colsignoff'&'$coldefault'/ - s/./ &/ - ' - ;; - *) - echo $colheader$key $rest $coldefault - ;; - esac - - done - echo + log=$(print_log "$commit" "$@") + [ "$log" ] && echo "$log" done | ${PAGER:-less} ${PAGER_FLAGS:--R}