From 70c9501550b5e6707e64775ff3d9aa6bc3925455 Mon Sep 17 00:00:00 2001 From: Matthew Rothenberg Date: Thu, 2 Oct 2014 20:42:43 -0400 Subject: [PATCH 1/2] fix ability to undefine default aliases in zsh The ability to not define default aliases in the `.git.scmbrc` file leading to not having those aliases not present worked fine in bash. However, this seems to still have thrown an error in zsh. For example, if you commented out the line: git_checkout_alias="gco" then when sourcing scm_breeze aliases.sh would throw an error. This applied only to aliases defined with the `_alias()` function and not those with the `_git_alias()` function. To fix this, I wrapped `_alias()` in a similar check to the one `_git_alias()` has, where it passes the portions as arguments and verifies the first is present before proceeding. I'm not 100% certain why seperate functions exist for these two things to begin with (as far as I can tell from a cursory examination the main difference is `_git_aliases()` defines a tab completion?) but I believe my change has fixed the ability to comment out aliases in `.git.scmbrc` in zsh for users who do not want them (I'm in this boat, there are too many for me and I get confused). I tested manually in both bash and zsh and it appears to work, however you might want to review this before merging given my relative unfamiliarity with the codebase. --- lib/git/aliases.sh | 34 +++++++++++++++++----------------- lib/scm_breeze.sh | 8 +++++++- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/git/aliases.sh b/lib/git/aliases.sh index 6003a48..eda83bf 100644 --- a/lib/git/aliases.sh +++ b/lib/git/aliases.sh @@ -37,7 +37,7 @@ function git(){ esac } -_alias $git_alias='git' +_alias "$git_alias" "git" # -------------------------------------------------------------------- @@ -75,14 +75,14 @@ __git_alias () { # -------------------------------------------------------------------- # SCM Breeze functions -_alias $git_status_shortcuts_alias="git_status_shortcuts" -_alias $git_add_shortcuts_alias="git_add_shortcuts" -_alias $exec_scmb_expand_args_alias="exec_scmb_expand_args" -_alias $git_show_files_alias="git_show_affected_files" -_alias $git_commit_all_alias='git_commit_all' +_alias "$git_status_shortcuts_alias" "git_status_shortcuts" +_alias "$git_add_shortcuts_alias" "git_add_shortcuts" +_alias "$exec_scmb_expand_args_alias" "exec_scmb_expand_args" +_alias "$git_show_files_alias" "git_show_affected_files" +_alias "$git_commit_all_alias" "git_commit_all" # Git Index alias -_alias $git_index_alias="git_index" +_alias "$git_index_alias" "git_index" # Only set up the following aliases if 'git_setup_aliases' is 'yes' if [ "$git_setup_aliases" = "yes" ]; then @@ -139,16 +139,17 @@ if [ "$git_setup_aliases" = "yes" ]; then # Compound/complex commands - _alias $git_fetch_all_alias="git fetch --all" - _alias $git_pull_then_push_alias="git pull && git push" - _alias $git_fetch_and_rebase_alias='git fetch && git rebase' - _alias $git_commit_amend_alias='git commit --amend' + _alias "$git_fetch_all_alias" "git fetch --all" + _alias "$git_pull_then_push_alias" "git pull && git push" + _alias "$git_fetch_and_rebase_alias" "git fetch && git rebase" + _alias "$git_commit_amend_alias" "git commit --amend" + # Add staged changes to latest commit without prompting for message - _alias $git_commit_amend_no_msg_alias='git commit --amend -C HEAD' - _alias $git_commit_no_msg_alias='git commit -C HEAD' - _alias $git_log_stat_alias='git log --stat --max-count=5' - _alias $git_log_graph_alias='git log --graph --max-count=5' - _alias $git_add_all_alias='git add --all .' + _alias "$git_commit_amend_no_msg_alias" "git commit --amend -C HEAD" + _alias "$git_commit_no_msg_alias" "git commit -C HEAD" + _alias "$git_log_stat_alias" "git log --stat --max-count=5" + _alias "$git_log_graph_alias" "git log --graph --max-count=5" + _alias "$git_add_all_alias" "git add --all ." fi @@ -168,4 +169,3 @@ if [ $shell = "bash" ]; then else compdef _git_index_tab_completion git_index $git_index_alias fi - diff --git a/lib/scm_breeze.sh b/lib/scm_breeze.sh index 59e4548..2c692bb 100644 --- a/lib/scm_breeze.sh +++ b/lib/scm_breeze.sh @@ -10,7 +10,13 @@ enable_nullglob() { if [ $shell = "zsh" ]; then setopt NULL_GLOB; else shopt disable_nullglob() { if [ $shell = "zsh" ]; then unsetopt NULL_GLOB; else shopt -u nullglob; fi; } # Alias wrapper that ignores errors if alias is not defined. -_alias(){ alias "$@" 2> /dev/null; } +_safe_alias(){ alias "$@" 2> /dev/null; } +_alias() { + if [ -n "$1" ]; then + local alias_str="$1"; local cmd="$2" + _safe_alias $alias_str="$cmd" + fi +} find_binary(){ if [ $shell = "zsh" ]; then From f14015fc3ec29457a2e53616f112f98e65f9cb1b Mon Sep 17 00:00:00 2001 From: Matthew Rothenberg Date: Thu, 2 Oct 2014 21:01:58 -0400 Subject: [PATCH 2/2] aliases: consistent indentation and quotation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is unrelated to the previous commit and zero functionality but while I was changing things I wanted to clean up the indentation and use consistent single quotes versus double quotes in the functions calls for `_alias()` and `_git_alias()`. In my opinion this makes the file more readable, but if it bothers you let me know and I’ll be happy to remove it from the pull request. --- lib/git/aliases.sh | 115 +++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 57 deletions(-) diff --git a/lib/git/aliases.sh b/lib/git/aliases.sh index eda83bf..c0bbf3d 100644 --- a/lib/git/aliases.sh +++ b/lib/git/aliases.sh @@ -75,81 +75,82 @@ __git_alias () { # -------------------------------------------------------------------- # SCM Breeze functions -_alias "$git_status_shortcuts_alias" "git_status_shortcuts" -_alias "$git_add_shortcuts_alias" "git_add_shortcuts" -_alias "$exec_scmb_expand_args_alias" "exec_scmb_expand_args" -_alias "$git_show_files_alias" "git_show_affected_files" -_alias "$git_commit_all_alias" "git_commit_all" +_alias "$git_status_shortcuts_alias" 'git_status_shortcuts' +_alias "$git_add_shortcuts_alias" 'git_add_shortcuts' +_alias "$exec_scmb_expand_args_alias" 'exec_scmb_expand_args' +_alias "$git_show_files_alias" 'git_show_affected_files' +_alias "$git_commit_all_alias" 'git_commit_all' # Git Index alias -_alias "$git_index_alias" "git_index" +_alias "$git_index_alias" 'git_index' # Only set up the following aliases if 'git_setup_aliases' is 'yes' if [ "$git_setup_aliases" = "yes" ]; then # Commands that deal with paths - __git_alias "$git_checkout_alias" "git" "checkout" - __git_alias "$git_commit_alias" "git" "commit" - __git_alias "$git_commit_verbose_alias" "git" "commit" "--verbose" - __git_alias "$git_reset_alias" "git" "reset" "--" - __git_alias "$git_reset_hard_alias" "git" "reset" "--hard" - __git_alias "$git_rm_alias" "git" "rm" - __git_alias "$git_blame_alias" "git" "blame" - __git_alias "$git_diff_alias" "git" "diff" "--" - __git_alias "$git_diff_word_alias" "git" "diff" "--word-diff" - __git_alias "$git_diff_cached_alias" "git" "diff" "--cached --" - __git_alias "$git_add_patch_alias" "git" "add" "-p" - __git_alias "$git_add_updated_alias" "git" "add" "-u" - __git_alias "$git_difftool_alias" "git" "difftool" + __git_alias "$git_checkout_alias" 'git' 'checkout' + __git_alias "$git_commit_alias" 'git' 'commit' + __git_alias "$git_commit_verbose_alias" 'git' 'commit' '--verbose' + __git_alias "$git_reset_alias" 'git' 'reset' '--' + __git_alias "$git_reset_hard_alias" 'git' 'reset' '--hard' + __git_alias "$git_rm_alias" 'git' 'rm' + __git_alias "$git_blame_alias" 'git' 'blame' + __git_alias "$git_diff_alias" 'git' 'diff' '--' + __git_alias "$git_diff_word_alias" 'git' 'diff' '--word-diff' + __git_alias "$git_diff_cached_alias" 'git' 'diff' '--cached --' + __git_alias "$git_add_patch_alias" 'git' 'add' '-p' + __git_alias "$git_add_updated_alias" 'git' 'add' '-u' + __git_alias "$git_difftool_alias" 'git' 'difftool' + # Custom default format for git log git_log_command="log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" - __git_alias "$git_log_alias" "git" "$git_log_command" + __git_alias "$git_log_alias" 'git' "$git_log_command" # Same as the above, but displays all the branches and remotes - __git_alias "$git_log_all_alias" "git" "$git_log_command" "--branches" "--remotes" + __git_alias "$git_log_all_alias" 'git' "$git_log_command" '--branches' '--remotes' # Standard commands - __git_alias "$git_clone_alias" "git" 'clone' - __git_alias "$git_fetch_alias" "git" 'fetch' - __git_alias "$git_checkout_branch_alias" "git" 'checkout' "-b" - __git_alias "$git_pull_alias" "git" 'pull' - __git_alias "$git_push_alias" "git" 'push' - __git_alias "$git_push_force_alias" "git" 'push' '-f' - __git_alias "$git_status_original_alias" "git" 'status' # (Standard git status) - __git_alias "$git_status_short_alias" "git" 'status' '-s' - __git_alias "$git_clean_alias" "git" "clean" - __git_alias "$git_clean_force_alias" "git" "clean" "-fd" - __git_alias "$git_remote_alias" "git" 'remote' '-v' - __git_alias "$git_rebase_alias" "git" 'rebase' - __git_alias "$git_rebase_interactive_alias" "git" 'rebase' "-i" - __git_alias "$git_rebase_alias_continue" "git" 'rebase' "--continue" - __git_alias "$git_rebase_alias_abort" "git" 'rebase' "--abort" - __git_alias "$git_reset_last_commit" "git" "reset HEAD~" - __git_alias "$git_merge_alias" "git" 'merge' - __git_alias "$git_merge_no_fast_forward_alias" "git" "merge" "--no-ff" - __git_alias "$git_merge_only_fast_forward_alias" "git" "merge" "--ff" - __git_alias "$git_cherry_pick_alias" "git" 'cherry-pick' - __git_alias "$git_show_alias" "git" 'show' - __git_alias "$git_show_summary" "git" 'show' '--summary' - __git_alias "$git_stash_alias" "git" 'stash' - __git_alias "$git_stash_apply_alias" "git" 'stash' 'apply' - __git_alias "$git_stash_pop_alias" "git" 'stash' 'pop' - __git_alias "$git_stash_list_alias" "git" 'stash' 'list' - __git_alias "$git_tag_alias" "git" 'tag' + __git_alias "$git_clone_alias" 'git' 'clone' + __git_alias "$git_fetch_alias" 'git' 'fetch' + __git_alias "$git_checkout_branch_alias" 'git' 'checkout' '-b' + __git_alias "$git_pull_alias" 'git' 'pull' + __git_alias "$git_push_alias" 'git' 'push' + __git_alias "$git_push_force_alias" 'git' 'push' '-f' + __git_alias "$git_status_original_alias" 'git' 'status' # (Standard git status) + __git_alias "$git_status_short_alias" 'git' 'status' '-s' + __git_alias "$git_clean_alias" 'git' 'clean' + __git_alias "$git_clean_force_alias" 'git' 'clean' '-fd' + __git_alias "$git_remote_alias" 'git' 'remote' '-v' + __git_alias "$git_rebase_alias" 'git' 'rebase' + __git_alias "$git_rebase_interactive_alias" 'git' 'rebase' '-i' + __git_alias "$git_rebase_alias_continue" 'git' 'rebase' '--continue' + __git_alias "$git_rebase_alias_abort" 'git' 'rebase' '--abort' + __git_alias "$git_reset_last_commit" 'git' 'reset HEAD~' + __git_alias "$git_merge_alias" 'git' 'merge' + __git_alias "$git_merge_no_fast_forward_alias" 'git' 'merge' '--no-ff' + __git_alias "$git_merge_only_fast_forward_alias" 'git' 'merge' '--ff' + __git_alias "$git_cherry_pick_alias" 'git' 'cherry-pick' + __git_alias "$git_show_alias" 'git' 'show' + __git_alias "$git_show_summary" 'git' 'show' '--summary' + __git_alias "$git_stash_alias" 'git' 'stash' + __git_alias "$git_stash_apply_alias" 'git' 'stash' 'apply' + __git_alias "$git_stash_pop_alias" 'git' 'stash' 'pop' + __git_alias "$git_stash_list_alias" 'git' 'stash' 'list' + __git_alias "$git_tag_alias" 'git' 'tag' # Compound/complex commands - _alias "$git_fetch_all_alias" "git fetch --all" - _alias "$git_pull_then_push_alias" "git pull && git push" - _alias "$git_fetch_and_rebase_alias" "git fetch && git rebase" - _alias "$git_commit_amend_alias" "git commit --amend" + _alias "$git_fetch_all_alias" 'git fetch --all' + _alias "$git_pull_then_push_alias" 'git pull && git push' + _alias "$git_fetch_and_rebase_alias" 'git fetch && git rebase' + _alias "$git_commit_amend_alias" 'git commit --amend' # Add staged changes to latest commit without prompting for message - _alias "$git_commit_amend_no_msg_alias" "git commit --amend -C HEAD" - _alias "$git_commit_no_msg_alias" "git commit -C HEAD" - _alias "$git_log_stat_alias" "git log --stat --max-count=5" - _alias "$git_log_graph_alias" "git log --graph --max-count=5" - _alias "$git_add_all_alias" "git add --all ." + _alias "$git_commit_amend_no_msg_alias" 'git commit --amend -C HEAD' + _alias "$git_commit_no_msg_alias" 'git commit -C HEAD' + _alias "$git_log_stat_alias" 'git log --stat --max-count=5' + _alias "$git_log_graph_alias" 'git log --graph --max-count=5' + _alias "$git_add_all_alias" 'git add --all .' fi