Merge branch 'ns/pretty-format'
authorJunio C Hamano <gitster@pobox.com>
Thu, 5 Mar 2009 23:41:43 +0000 (15:41 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 5 Mar 2009 23:41:43 +0000 (15:41 -0800)
* ns/pretty-format:
bash completion: add --format= and --oneline options for "git log"
Add tests for git log --pretty, --format and --oneline.
Add --oneline that is a synonym to "--pretty=oneline --abbrev-commit"
Give short-hands to --pretty=tformat:%formatstring
Add --format that is a synonym to --pretty

1  2 
contrib/completion/git-completion.bash
pretty.c
index 90ba428e94a5e167192cbabf06fa0ccc2b60c8f7,31608cb79fa00b1987005881a7be11e3f4a0dbc2..f234c34304181d0c6b00349be3bd9c14d1e538ea
@@@ -62,7 -62,7 +62,7 @@@ esa
  __gitdir ()
  {
        if [ -z "${1-}" ]; then
 -              if [ -n "$__git_dir" ]; then
 +              if [ -n "${__git_dir-}" ]; then
                        echo "$__git_dir"
                elif [ -d .git ]; then
                        echo .git
  # returns text to add to bash PS1 prompt (includes branch name)
  __git_ps1 ()
  {
 -      local g="$(git rev-parse --git-dir 2>/dev/null)"
 +      local g="$(__gitdir)"
        if [ -n "$g" ]; then
                local r
                local b
 -              if [ -d "$g/rebase-apply" ]
 -              then
 -                      if test -f "$g/rebase-apply/rebasing"
 -                      then
 +              if [ -d "$g/rebase-apply" ]; then
 +                      if [ -f "$g/rebase-apply/rebasing" ]; then
                                r="|REBASE"
 -                      elif test -f "$g/rebase-apply/applying"
 -                      then
 +              elif [ -f "$g/rebase-apply/applying" ]; then
                                r="|AM"
                        else
                                r="|AM/REBASE"
                        fi
                        b="$(git symbolic-ref HEAD 2>/dev/null)"
 -              elif [ -f "$g/rebase-merge/interactive" ]
 -              then
 +              elif [ -f "$g/rebase-merge/interactive" ]; then
                        r="|REBASE-i"
                        b="$(cat "$g/rebase-merge/head-name")"
 -              elif [ -d "$g/rebase-merge" ]
 -              then
 +              elif [ -d "$g/rebase-merge" ]; then
                        r="|REBASE-m"
                        b="$(cat "$g/rebase-merge/head-name")"
 -              elif [ -f "$g/MERGE_HEAD" ]
 -              then
 +              elif [ -f "$g/MERGE_HEAD" ]; then
                        r="|MERGING"
                        b="$(git symbolic-ref HEAD 2>/dev/null)"
                else
 -                      if [ -f "$g/BISECT_LOG" ]
 -                      then
 +                      if [ -f "$g/BISECT_LOG" ]; then
                                r="|BISECTING"
                        fi
 -                      if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
 -                      then
 -                              if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
 -                              then
 -                                      b="$(cut -c1-7 "$g/HEAD")..."
 +                      if ! b="$(git symbolic-ref HEAD 2>/dev/null)"; then
 +                              if ! b="$(git describe --exact-match HEAD 2>/dev/null)"; then
 +                                      if [ -r "$g/HEAD" ]; then
 +                                              b="$(cut -c1-7 "$g/HEAD")..."
 +                                      fi
                                fi
                        fi
                fi
  
                local w
                local i
 +              local c
  
 -              if test -n "${GIT_PS1_SHOWDIRTYSTATE-}"; then
 -                      if test "$(git config --bool bash.showDirtyState)" != "false"; then
 -                              git diff --no-ext-diff --ignore-submodules \
 -                                      --quiet --exit-code || w="*"
 -                              if git rev-parse --quiet --verify HEAD >/dev/null; then
 -                                      git diff-index --cached --quiet \
 -                                              --ignore-submodules HEAD -- || i="+"
 -                              else
 -                                      i="#"
 +              if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
 +                      if [ "true" = "$(git config --bool core.bare 2>/dev/null)" ]; then
 +                              c="BARE:"
 +                      else
 +                              b="GIT_DIR!"
 +                      fi
 +              elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
 +                      if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
 +                              if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
 +                                      git diff --no-ext-diff --ignore-submodules \
 +                                              --quiet --exit-code || w="*"
 +                                      if git rev-parse --quiet --verify HEAD >/dev/null; then
 +                                              git diff-index --cached --quiet \
 +                                                      --ignore-submodules HEAD -- || i="+"
 +                                      else
 +                                              i="#"
 +                                      fi
                                fi
                        fi
                fi
  
 -              if [ -n "${1-}" ]; then
 -                      printf "$1" "${b##refs/heads/}$w$i$r"
 -              else
 -                      printf " (%s)" "${b##refs/heads/}$w$i$r"
 +              if [ -n "$b" ]; then
 +                      if [ -n "${1-}" ]; then
 +                              printf "$1" "$c${b##refs/heads/}$w$i$r"
 +                      else
 +                              printf " (%s)" "$c${b##refs/heads/}$w$i$r"
 +                      fi
                fi
        fi
  }
@@@ -303,7 -299,7 +303,7 @@@ __git_remotes (
  
  __git_merge_strategies ()
  {
 -      if [ -n "$__git_merge_strategylist" ]; then
 +      if [ -n "${__git_merge_strategylist-}" ]; then
                echo "$__git_merge_strategylist"
                return
        fi
@@@ -389,7 -385,7 +389,7 @@@ __git_complete_revlist (
  
  __git_all_commands ()
  {
 -      if [ -n "$__git_all_commandlist" ]; then
 +      if [ -n "${__git_all_commandlist-}" ]; then
                echo "$__git_all_commandlist"
                return
        fi
@@@ -407,7 -403,7 +407,7 @@@ __git_all_commandlist="$(__git_all_comm
  
  __git_porcelain_commands ()
  {
 -      if [ -n "$__git_porcelain_commandlist" ]; then
 +      if [ -n "${__git_porcelain_commandlist-}" ]; then
                echo "$__git_porcelain_commandlist"
                return
        fi
@@@ -1018,6 -1014,11 +1018,11 @@@ _git_log (
                        " "" "${cur##--pretty=}"
                return
                ;;
+       --format=*)
+               __gitcomp "$__git_log_pretty_formats
+                       " "" "${cur##--format=}"
+               return
+               ;;
        --date=*)
                __gitcomp "
                        relative iso8601 rfc2822 short local default
                        --follow
                        --abbrev-commit --abbrev=
                        --relative-date --date=
-                       --pretty=
+                       --pretty= --format= --oneline
                        --cherry-pick
                        --graph
                        --decorate
@@@ -1545,8 -1546,13 +1550,13 @@@ _git_show (
                        " "" "${cur##--pretty=}"
                return
                ;;
+       --format=*)
+               __gitcomp "$__git_log_pretty_formats
+                       " "" "${cur##--format=}"
+               return
+               ;;
        --*)
-               __gitcomp "--pretty=
+               __gitcomp "--pretty= --format=
                        $__git_diff_common_options
                        "
                return
@@@ -1845,7 -1851,7 +1855,7 @@@ _gitk (
        __git_has_doubledash && return
  
        local cur="${COMP_WORDS[COMP_CWORD]}"
 -      local g="$(git rev-parse --git-dir 2>/dev/null)"
 +      local g="$(__gitdir)"
        local merge=""
        if [ -f $g/MERGE_HEAD ]; then
                merge="--merge"
diff --combined pretty.c
index d64212d4ccf354988977de8cf99987a21ba00039,d739f6d6c52b2258c66e936ac48ac7a4f1adfd7f..f49929479f7e68a5214b6b55c31f10e6151c1787
+++ b/pretty.c
  
  static char *user_format;
  
+ static void save_user_format(struct rev_info *rev, const char *cp, int is_tformat)
+ {
+       free(user_format);
+       user_format = xstrdup(cp);
+       if (is_tformat)
+               rev->use_terminator = 1;
+       rev->commit_format = CMIT_FMT_USERFORMAT;
+ }
  void get_commit_format(const char *arg, struct rev_info *rev)
  {
        int i;
                return;
        }
        if (!prefixcmp(arg, "format:") || !prefixcmp(arg, "tformat:")) {
-               const char *cp = strchr(arg, ':') + 1;
-               free(user_format);
-               user_format = xstrdup(cp);
-               if (arg[0] == 't')
-                       rev->use_terminator = 1;
-               rev->commit_format = CMIT_FMT_USERFORMAT;
+               save_user_format(rev, strchr(arg, ':') + 1, arg[0] == 't');
                return;
        }
        for (i = 0; i < ARRAY_SIZE(cmt_fmts); i++) {
                        return;
                }
        }
+       if (strchr(arg, '%')) {
+               save_user_format(rev, arg, 1);
+               return;
+       }
  
        die("invalid --pretty format: %s", arg);
  }
@@@ -568,16 -576,16 +576,16 @@@ static size_t format_commit_item(struc
                        return end - placeholder + 1;
                }
                if (!prefixcmp(placeholder + 1, "red")) {
 -                      strbuf_addstr(sb, "\033[31m");
 +                      strbuf_addstr(sb, GIT_COLOR_RED);
                        return 4;
                } else if (!prefixcmp(placeholder + 1, "green")) {
 -                      strbuf_addstr(sb, "\033[32m");
 +                      strbuf_addstr(sb, GIT_COLOR_GREEN);
                        return 6;
                } else if (!prefixcmp(placeholder + 1, "blue")) {
 -                      strbuf_addstr(sb, "\033[34m");
 +                      strbuf_addstr(sb, GIT_COLOR_BLUE);
                        return 5;
                } else if (!prefixcmp(placeholder + 1, "reset")) {
 -                      strbuf_addstr(sb, "\033[m");
 +                      strbuf_addstr(sb, GIT_COLOR_RESET);
                        return 6;
                } else
                        return 0;