[PATCH 5/5] config: add default aliases
From: Felipe Contreras <hidden>
Date: 2021-07-02 10:05:22
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
These are all the aliases everyone agrees are essential. Virtually all VCS in the world have aliases, except git, so let's change that. Signed-off-by: Felipe Contreras <redacted> --- Documentation/git-branch.txt | 4 ++++ Documentation/git-cherry-pick.txt | 4 ++++ Documentation/git-commit.txt | 4 ++++ Documentation/git-mergetool.txt | 4 ++++ Documentation/git-rebase.txt | 4 ++++ Documentation/git-status.txt | 4 ++++ config.c | 29 +++++++++++++++++++++++++++++ config.h | 3 ++- t/test-lib.sh | 2 ++ 9 files changed, 57 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 94dc9a54f2..fbf5ebd27a 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt@@ -24,6 +24,10 @@ SYNOPSIS 'git branch' (-d | -D) [-r] <branchname>... 'git branch' --edit-description [<branchname>] +ALIAS +~~~~~ +'git br' + DESCRIPTION -----------
diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt
index 5d750314b2..b43b1a3a30 100644
--- a/Documentation/git-cherry-pick.txt
+++ b/Documentation/git-cherry-pick.txt@@ -12,6 +12,10 @@ SYNOPSIS [-S[<keyid>]] <commit>... 'git cherry-pick' (--continue | --skip | --abort | --quit) +ALIAS +~~~~~ +'git pi' + DESCRIPTION -----------
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 340c5fbb48..32b1fdba45 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt@@ -17,6 +17,10 @@ SYNOPSIS [(--trailer <token>[(=|:)<value>])...] [-S[<keyid>]] [--] [<pathspec>...] +ALIAS +~~~~~ +'git co' + DESCRIPTION ----------- Create a new commit containing the current contents of the index and
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index e587c7763a..59708a1f3e 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt@@ -10,6 +10,10 @@ SYNOPSIS [verse] 'git mergetool' [--tool=<tool>] [-y | --[no-]prompt] [<file>...] +ALIAS +~~~~~ +'git mt' + DESCRIPTION -----------
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 55af6fd24e..21f5ae9d0e 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt@@ -14,6 +14,10 @@ SYNOPSIS --root [<branch>] 'git rebase' (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch) +ALIAS +~~~~~ +'git rb' + DESCRIPTION ----------- If <branch> is specified, 'git rebase' will perform an automatic
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index 83f38e3198..fcc89fa8d4 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt@@ -11,6 +11,10 @@ SYNOPSIS [verse] 'git status' [<options>...] [--] [<pathspec>...] +ALIAS +~~~~~ +'git st' + DESCRIPTION ----------- Displays paths that have differences between the index file and the
diff --git a/config.c b/config.c
index 666fb2c689..c42f41599c 100644
--- a/config.c
+++ b/config.c@@ -501,6 +501,30 @@ int git_config_key_is_valid(const char *key) return !git_config_parse_key_1(key, NULL, NULL, 1); } +static int git_config_default(config_fn_t fn, void *data) +{ + int ret = 0; + struct config_source source; + + if (getenv("GIT_NO_DEFAULT_ALIASES")) + return 0; + + memset(&source, 0, sizeof(source)); + source.prev = cf; + source.origin_type = CONFIG_ORIGIN_DEFAULT; + cf = &source; + + ret += fn("alias.co", "commit", data); + ret += fn("alias.rb", "rebase", data); + ret += fn("alias.st", "status", data); + ret += fn("alias.br", "branch", data); + ret += fn("alias.pi", "cherry-pick", data); + ret += fn("alias.mt", "mergetool", data); + + cf = source.prev; + return ret; +} + static int config_parse_pair(const char *key, const char *value, config_fn_t fn, void *data) {
@@ -1897,6 +1921,9 @@ static int do_git_config_sequence(const struct config_options *opts, repo_config = NULL; current_parsing_scope = CONFIG_SCOPE_SYSTEM; + + git_config_default(fn, data); + if (git_config_system() && system_config && !access_or_die(system_config, R_OK, opts->system_gently ? ACCESS_EACCES_OK : 0))
@@ -3497,6 +3524,8 @@ const char *current_config_origin_type(void) return "submodule-blob"; case CONFIG_ORIGIN_CMDLINE: return "command line"; + case CONFIG_ORIGIN_DEFAULT: + return "default"; default: BUG("unknown config origin type"); }
diff --git a/config.h b/config.h
index 9038538ffd..bc3ecca313 100644
--- a/config.h
+++ b/config.h@@ -58,7 +58,8 @@ enum config_origin_type { CONFIG_ORIGIN_FILE, CONFIG_ORIGIN_STDIN, CONFIG_ORIGIN_SUBMODULE_BLOB, - CONFIG_ORIGIN_CMDLINE + CONFIG_ORIGIN_CMDLINE, + CONFIG_ORIGIN_DEFAULT }; enum config_event_t {
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 49b80a4eb5..a15965e2f4 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh@@ -456,6 +456,8 @@ GIT_DEFAULT_HASH="${GIT_TEST_DEFAULT_HASH:-sha1}" export GIT_DEFAULT_HASH GIT_TEST_MERGE_ALGORITHM="${GIT_TEST_MERGE_ALGORITHM:-ort}" export GIT_TEST_MERGE_ALGORITHM +GIT_NO_DEFAULT_ALIASES=1 +export GIT_NO_DEFAULT_ALIASES # Tests using GIT_TRACE typically don't want <timestamp> <file>:<line> output GIT_TRACE_BARE=1
--
2.32.0.94.g4574ca548c