{"thread":{"id":"25412","subject":"[PATCH] bash: support pretty format aliases","startedAt":"2010-10-10T21:34:21Z","lastAt":"2010-10-20T22:29:50Z","messageCount":8,"participants":["SZEDER Gábor","Jonathan Nieder"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"153184","messageId":"1286746461-7338-1-git-send-email-szeder@ira.uka.de","threadId":"25412","inReplyTo":null,"subject":"[PATCH] bash: support pretty format aliases","fromName":"SZEDER Gábor","fromEmail":"szeder@ira.uka.de","sentAt":"2010-10-10T21:34:21Z","receivedAt":"2010-10-10T21:34:21Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"Users can have their own pretty format aliases since 8028184 (pretty:\nadd aliases for pretty formats, 2010-05-02), so let's offer those\nafter '--pretty=', too.\n\nSimilar to the completion of aliases, this will invoke 'git config'\neach time pretty aliases needs to be completed, so changes in pretty.*\nconfiguration will be reflected immediately.\n\nSigned-off-by: SZEDER Gábor <szeder@ira.uka.de>\n---\n contrib/completion/git-completion.bash |   11 ++++++++++-\n 1 files changed, 10 insertions(+), 1 deletions(-)\n\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex 6756990..3022213 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -1368,7 +1368,16 @@ _git_log ()\n \tfi\n \tcase \"$cur\" in\n \t--pretty=*)\n-\t\t__gitcomp \"$__git_log_pretty_formats\n+\t\tlocal pretty_aliases\n+\t\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"pretty\\..*\" 2>/dev/null); do\n+\t\t\tcase \"$i\" in\n+\t\t\tpretty.*)\n+\t\t\t\ti=\"${i#pretty.}\"\n+\t\t\t\tpretty_aliases=\"$pretty_aliases ${i/ */}\"\n+\t\t\t\t;;\n+\t\t\tesac\n+\t\tdone\n+\t\t__gitcomp \"$__git_log_pretty_formats $pretty_aliases\n \t\t\t\" \"\" \"${cur##--pretty=}\"\n \t\treturn\n \t\t;;\n-- \n1.7.3.1.148.g2fffa\n"},{"id":"153188","messageId":"20101010214410.GA16253@burratino","threadId":"25412","inReplyTo":"1286746461-7338-1-git-send-email-szeder@ira.uka.de","subject":"Re: [PATCH] bash: support pretty format aliases","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2010-10-10T21:44:11Z","receivedAt":"2010-10-10T21:44:11Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"SZEDER Gábor wrote:\n\n> Users can have their own pretty format aliases since 8028184 (pretty:\n> add aliases for pretty formats, 2010-05-02), so let's offer those\n> after '--pretty=', too.\n> \n> Similar to the completion of aliases, this will invoke 'git config'\n> each time pretty aliases needs to be completed, so changes in pretty.*\n> configuration will be reflected immediately.\n\nDoes this apply to\n\n\tgit log --format=\n\tgit show --pretty=\n\tgit show --format=\n\ntoo?\n"},{"id":"153194","messageId":"20101010220622.GC12529@neumann","threadId":"25412","inReplyTo":"20101010214410.GA16253@burratino","subject":"[PATCH v2] bash: support pretty format aliases","fromName":"SZEDER Gábor","fromEmail":"szeder@ira.uka.de","sentAt":"2010-10-10T22:06:22Z","receivedAt":"2010-10-10T22:06:22Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"Users can have their own pretty format aliases since 8028184 (pretty:\nadd aliases for pretty formats, 2010-05-02), so let's offer those\nafter '--pretty=' and '--format=' for 'log' and 'show', too.\n\nSimilar to the completion of aliases, this will invoke 'git config'\neach time pretty aliases needs to be completed, so changes in pretty.*\nconfiguration will be reflected immediately.\n\nSigned-off-by: SZEDER Gábor <szeder@ira.uka.de>\n---\n\nOn Sun, Oct 10, 2010 at 04:44:11PM -0500, Jonathan Nieder wrote:\n> Does this apply to\n> \n> \tgit log --format=\n> \tgit show --pretty=\n> \tgit show --format=\n> \n> too?\n\nYes ;)\n\n contrib/completion/git-completion.bash |   21 +++++++++++++++++----\n 1 files changed, 17 insertions(+), 4 deletions(-)\n\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex 6756990..4d54c32 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -750,6 +750,19 @@ __git_compute_porcelain_commands ()\n \t: ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}\n }\n \n+__git_pretty_aliases ()\n+{\n+\tlocal i IFS=$'\\n'\n+\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"pretty\\..*\" 2>/dev/null); do\n+\t\tcase \"$i\" in\n+\t\tpretty.*)\n+\t\t\ti=\"${i#pretty.}\"\n+\t\t\techo \"${i/ */}\"\n+\t\t\t;;\n+\t\tesac\n+\tdone\n+}\n+\n __git_aliases ()\n {\n \tlocal i IFS=$'\\n'\n@@ -1368,12 +1381,12 @@ _git_log ()\n \tfi\n \tcase \"$cur\" in\n \t--pretty=*)\n-\t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t__gitcomp \"$__git_log_pretty_formats $(__git_pretty_aliases)\n \t\t\t\" \"\" \"${cur##--pretty=}\"\n \t\treturn\n \t\t;;\n \t--format=*)\n-\t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t__gitcomp \"$__git_log_pretty_formats $(__git_pretty_aliases)\n \t\t\t\" \"\" \"${cur##--format=}\"\n \t\treturn\n \t\t;;\n@@ -2100,12 +2113,12 @@ _git_show ()\n \tlocal cur=\"${COMP_WORDS[COMP_CWORD]}\"\n \tcase \"$cur\" in\n \t--pretty=*)\n-\t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t__gitcomp \"$__git_log_pretty_formats $(__git_pretty_aliases)\n \t\t\t\" \"\" \"${cur##--pretty=}\"\n \t\treturn\n \t\t;;\n \t--format=*)\n-\t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t__gitcomp \"$__git_log_pretty_formats $(__git_pretty_aliases)\n \t\t\t\" \"\" \"${cur##--format=}\"\n \t\treturn\n \t\t;;\n-- \n1.7.3.1.148.g2fffa\n"},{"id":"153496","messageId":"20101014085538.GB838@neumann","threadId":"25412","inReplyTo":"20101010220622.GC12529@neumann","subject":"Re: [PATCH v2] bash: support pretty format aliases","fromName":"SZEDER Gábor","fromEmail":"szeder@ira.uka.de","sentAt":"2010-10-14T08:55:38Z","receivedAt":"2010-10-14T08:55:38Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Mon, Oct 11, 2010 at 12:06:22AM +0200, SZEDER Gábor wrote:\n> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\n> index 6756990..4d54c32 100755\n> --- a/contrib/completion/git-completion.bash\n> +++ b/contrib/completion/git-completion.bash\n> @@ -750,6 +750,19 @@ __git_compute_porcelain_commands ()\n>  \t: ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}\n>  }\n>  \n> +__git_pretty_aliases ()\n> +{\n> +\tlocal i IFS=$'\\n'\n> +\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"pretty\\..*\" 2>/dev/null); do\n> +\t\tcase \"$i\" in\n> +\t\tpretty.*)\n> +\t\t\ti=\"${i#pretty.}\"\n> +\t\t\techo \"${i/ */}\"\n> +\t\t\t;;\n> +\t\tesac\n> +\tdone\n> +}\n> +\n>  __git_aliases ()\n>  {\n>  \tlocal i IFS=$'\\n'\n \nIf you look at this new __git_pretty_aliases() function and the old\n__git_aliases(), then you'll see that it's quite a code duplication.\nSo, how about the following two patches instead?\n"},{"id":"153498","messageId":"1287046727-22509-1-git-send-email-szeder@ira.uka.de","threadId":"25412","inReplyTo":"20101014085538.GB838@neumann","subject":"[PATCH 1/2] bash: add helper function to get config variables for completion","fromName":"SZEDER Gábor","fromEmail":"szeder@ira.uka.de","sentAt":"2010-10-14T08:58:46Z","receivedAt":"2010-10-14T08:58:46Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"Currently there are three completion functions that perform similar\nqueries to 'git config' to get config variable names.  These are the\ncompletion of aliases, remotes, and remote groups for 'git remote\nupdate'.  Since the following patch is about to add yet another\nsimilar 'git config'-querying completion function to support pretty\naliases, it's time to introduce a unified helper function first to\navoid redundant code.\n\nWe took care that the resulting helper function still copes well with\nnewlines in config variable values and that it works with 'set -u'\n(see commits e0d7805 (completion: fix alias listings with newlines,\n2009-10-08) and 25a31f8 (bash-completion: Support running when set -u\nis enabled, 2009-01-15) for details).\n\nSigned-off-by: SZEDER Gábor <szeder@ira.uka.de>\n---\n contrib/completion/git-completion.bash |   28 +++++++++++-----------------\n 1 files changed, 11 insertions(+), 17 deletions(-)\n\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex f83f019..97a3d8c 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -451,10 +451,7 @@ __git_remotes ()\n \t\techo ${i#$d/remotes/}\n \tdone\n \t[ \"$ngoff\" ] && shopt -u nullglob\n-\tfor i in $(git --git-dir=\"$d\" config --get-regexp 'remote\\..*\\.url' 2>/dev/null); do\n-\t\ti=\"${i#remote.}\"\n-\t\techo \"${i/.url*/}\"\n-\tdone\n+\t__git_get_config_variables \"remote\" \"url\"\n }\n \n __git_list_merge_strategies ()\n@@ -750,14 +747,16 @@ __git_compute_porcelain_commands ()\n \t: ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}\n }\n \n-__git_aliases ()\n+# returns all config variables within a given section with an optional\n+# suffix, with both the section name and the suffix removed\n+__git_get_config_variables ()\n {\n-\tlocal i IFS=$'\\n'\n-\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"alias\\..*\" 2>/dev/null); do\n+\tlocal section=\"$1\" suffix=\"${2-}\" i IFS=$'\\n'\n+\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"$section\\..*${suffix:+\\.$suffix}\" 2>/dev/null); do\n \t\tcase \"$i\" in\n-\t\talias.*)\n-\t\t\ti=\"${i#alias.}\"\n-\t\t\techo \"${i/ */}\"\n+\t\t$section.*)\n+\t\t\ti=\"${i#$section.}\"\n+\t\t\techo \"${i/${suffix:+.$suffix} */}\"\n \t\t\t;;\n \t\tesac\n \tdone\n@@ -2017,12 +2016,7 @@ _git_remote ()\n \t\t__gitcomp \"$(__git_remotes)\"\n \t\t;;\n \tupdate)\n-\t\tlocal i c='' IFS=$'\\n'\n-\t\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"remotes\\..*\" 2>/dev/null); do\n-\t\t\ti=\"${i#remotes.}\"\n-\t\t\tc=\"$c ${i/ */}\"\n-\t\tdone\n-\t\t__gitcomp \"$c\"\n+\t\t__gitcomp \"$(__git_get_config_variables \"remotes\")\"\n \t\t;;\n \t*)\n \t\tCOMPREPLY=()\n@@ -2366,7 +2360,7 @@ _git ()\n \t\t\t\"\n \t\t\t;;\n \t\t*)     __git_compute_porcelain_commands\n-\t\t       __gitcomp \"$__git_porcelain_commands $(__git_aliases)\" ;;\n+\t\t       __gitcomp \"$__git_porcelain_commands $(__git_get_config_variables \"alias\")\" ;;\n \t\tesac\n \t\treturn\n \tfi\n-- \n1.7.3.1.151.g3779c\n"},{"id":"153497","messageId":"1287046727-22509-2-git-send-email-szeder@ira.uka.de","threadId":"25412","inReplyTo":"20101014085538.GB838@neumann","subject":"[PATCH 2/2] bash: support pretty format aliases","fromName":"SZEDER Gábor","fromEmail":"szeder@ira.uka.de","sentAt":"2010-10-14T08:58:47Z","receivedAt":"2010-10-14T08:58:47Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"Users can have their own pretty format aliases since 8028184 (pretty:\nadd aliases for pretty formats, 2010-05-02), so let's offer those\nafter '--pretty=' and '--format=' for 'log' and 'show', too.\n\nSigned-off-by: SZEDER Gábor <szeder@ira.uka.de>\n---\n contrib/completion/git-completion.bash |    4 ++++\n 1 files changed, 4 insertions(+), 0 deletions(-)\n\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex 97a3d8c..a4b6f78 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -1368,11 +1368,13 @@ _git_log ()\n \tcase \"$cur\" in\n \t--pretty=*)\n \t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t\t$(__git_get_config_variables \"pretty\")\n \t\t\t\" \"\" \"${cur##--pretty=}\"\n \t\treturn\n \t\t;;\n \t--format=*)\n \t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t\t$(__git_get_config_variables \"pretty\")\n \t\t\t\" \"\" \"${cur##--format=}\"\n \t\treturn\n \t\t;;\n@@ -2095,11 +2097,13 @@ _git_show ()\n \tcase \"$cur\" in\n \t--pretty=*)\n \t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t\t$(__git_get_config_variables \"pretty\")\n \t\t\t\" \"\" \"${cur##--pretty=}\"\n \t\treturn\n \t\t;;\n \t--format=*)\n \t\t__gitcomp \"$__git_log_pretty_formats\n+\t\t\t$(__git_get_config_variables \"pretty\")\n \t\t\t\" \"\" \"${cur##--format=}\"\n \t\treturn\n \t\t;;\n-- \n1.7.3.1.151.g3779c\n"},{"id":"153523","messageId":"20101014171507.GA17550@burratino","threadId":"25412","inReplyTo":"1287046727-22509-1-git-send-email-szeder@ira.uka.de","subject":"Re: [PATCH 1/2] bash: add helper function to get config variables for completion","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2010-10-14T17:15:07Z","receivedAt":"2010-10-14T17:15:07Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"SZEDER Gábor wrote:\n\n> Currently there are three completion functions that perform similar\n> queries to 'git config' to get config variable names.\n\nGood point.\n\n> --- a/contrib/completion/git-completion.bash\n> +++ b/contrib/completion/git-completion.bash\n> @@ -451,10 +451,7 @@ __git_remotes ()\n>  \t\techo ${i#$d/remotes/}\n>  \tdone\n>  \t[ \"$ngoff\" ] && shopt -u nullglob\n> -\tfor i in $(git --git-dir=\"$d\" config --get-regexp 'remote\\..*\\.url' 2>/dev/null); do\n> -\t\ti=\"${i#remote.}\"\n> -\t\techo \"${i/.url*/}\"\n> -\tdone\n> +\t__git_get_config_variables \"remote\" \"url\"\n>  }\n\nOk, so __git_get_config_variables $category $var means something like\n\n\tgit config --get-regexp '$category[.].*[.]$var' |\n\tcut -d. -f2\n\n> @@ -750,14 +747,16 @@ __git_compute_porcelain_commands ()\n>  \t: ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}\n>  }\n>  \n> -__git_aliases ()\n> +# returns all config variables within a given section with an optional\n> +# suffix, with both the section name and the suffix removed\n> +__git_get_config_variables ()\n>  {\n> -\tlocal i IFS=$'\\n'\n> -\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"alias\\..*\" 2>/dev/null); do\n> +\tlocal section=\"$1\" suffix=\"${2-}\" i IFS=$'\\n'\n> +\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"$section\\..*${suffix:+\\.$suffix}\" 2>/dev/null); do\n\nWould it be possible to shorten this line?  e.g.\n\n\tfor i in $(\n\t\tgit --git-dir=\"$(__gitdir)\" ...\n\t); do\n\nor\n\n\twhile read -r setting\n\tdo\n\t\t...\n\tdone < <(\n\t\tgit --git-dir=\"$(__gitdir)\" ...\n\t)\n\nor\n\n\tlocal ... IFS=$'\\n'\n\tset -- $(git ... )\n\tfor i do\n\t\t...\n\tdone\n"},{"id":"153903","messageId":"20101020222949.GA1767@neumann","threadId":"25412","inReplyTo":"20101014171507.GA17550@burratino","subject":"Re: [PATCH 1/2] bash: add helper function to get config variables for completion","fromName":"SZEDER Gábor","fromEmail":"szeder@ira.uka.de","sentAt":"2010-10-20T22:29:50Z","receivedAt":"2010-10-20T22:29:50Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"Hi Jonathan,\n\n\nOn Thu, Oct 14, 2010 at 12:15:07PM -0500, Jonathan Nieder wrote:\n> SZEDER Gábor wrote:\n> \n> > Currently there are three completion functions that perform similar\n> > queries to 'git config' to get config variable names.\n> \n> Good point.\n> \n> > --- a/contrib/completion/git-completion.bash\n> > +++ b/contrib/completion/git-completion.bash\n> > @@ -451,10 +451,7 @@ __git_remotes ()\n> >  \t\techo ${i#$d/remotes/}\n> >  \tdone\n> >  \t[ \"$ngoff\" ] && shopt -u nullglob\n> > -\tfor i in $(git --git-dir=\"$d\" config --get-regexp 'remote\\..*\\.url' 2>/dev/null); do\n> > -\t\ti=\"${i#remote.}\"\n> > -\t\techo \"${i/.url*/}\"\n> > -\tdone\n> > +\t__git_get_config_variables \"remote\" \"url\"\n> >  }\n> \n> Ok, so __git_get_config_variables $category $var means something like\n> \n> \tgit config --get-regexp '$category[.].*[.]$var' |\n> \tcut -d. -f2\n\nAlmost.  Considering the current invocations of\n__git_get_config_variables() introduced in this patch, yes, they do\nthe same.  But \"cut -d. -f2\" will behave differently when $category\ncontains a dot, or when neither $category nor $var contain a dot, but\nthe config variable contains more than two (does git have any such\nconfig variables?).\n\n> > @@ -750,14 +747,16 @@ __git_compute_porcelain_commands ()\n> >  \t: ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}\n> >  }\n> >  \n> > -__git_aliases ()\n> > +# returns all config variables within a given section with an optional\n> > +# suffix, with both the section name and the suffix removed\n> > +__git_get_config_variables ()\n> >  {\n> > -\tlocal i IFS=$'\\n'\n> > -\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"alias\\..*\" 2>/dev/null); do\n> > +\tlocal section=\"$1\" suffix=\"${2-}\" i IFS=$'\\n'\n> > +\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \"$section\\..*${suffix:+\\.$suffix}\" 2>/dev/null); do\n> \n> Would it be possible to shorten this line?  e.g.\n> \n> \tfor i in $(\n> \t\tgit --git-dir=\"$(__gitdir)\" ...\n> \t); do\n> \n> or\n> \n> \twhile read -r setting\n> \tdo\n> \t\t...\n> \tdone < <(\n> \t\tgit --git-dir=\"$(__gitdir)\" ...\n> \t)\n> \n> or\n> \n> \tlocal ... IFS=$'\\n'\n> \tset -- $(git ... )\n> \tfor i do\n> \t\t...\n> \tdone\n\nWell, yes, of course.  But the original line was already too long, and\nneither of your proposals in itself would make it short enough to fit\n80 characters.  Besides, the latter two changes the loop itself, not\njust what the body of the loop does and what it is looping on.\n\nMaybe we could just split the line in two in the middle, like \n\n\tfor i in $(git --git-dir=\"$(__gitdir)\" config --get-regexp \\\n\t\t$section\\..*${suffix:+\\.$suffix}\" 2>/dev/null); do\n\nStill doesn't look pretty, but maybe a bit better.\n\n\nBest,\nGábor\n"}]}