From bddb9873830419b28b3c8438eea3003a6f459966 Mon Sep 17 00:00:00 2001
From: Leroy
Date: Wed, 27 Sep 2023 10:21:35 +0800
Subject: [PATCH] test(git-alias): add its unit test (#1077)
---
bin/git-alias | 41 ++++++++++++++++++++----
man/git-alias.1 | 18 ++++++-----
man/git-alias.html | 24 +++++++++++---
man/git-alias.md | 22 ++++++++++---
tests/helper.py | 10 +++---
tests/test_git_alias.py | 70 +++++++++++++++++++++++++++++++++++++++++
6 files changed, 159 insertions(+), 26 deletions(-)
create mode 100644 tests/test_git_alias.py
diff --git a/bin/git-alias b/bin/git-alias
index fbc9d2ef5..2c3ab1794 100755
--- a/bin/git-alias
+++ b/bin/git-alias
@@ -1,16 +1,45 @@
#!/usr/bin/env bash
+options=""
+
usage() {
cat < # show aliases matching pattern
- or: git alias # alias a command
+usage: git alias [options] # list all aliases
+ or: git alias [options] # show aliases matching pattern
+ or: git alias [options] # alias a command
+options:
+
+ --global Show or create alias in the system config
+ --local Show or create alias in the repository config
HERE
}
+if [[ "$1" == "--local" || "$1" == "--global" ]]; then
+ options=$1
+ shift
+fi
+
case $# in
- 0) git config --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort ;;
- 1) git alias | grep -e "$1" ;;
- 2) git config --global alias."$1" "$2" ;;
+ 0)
+ if [[ -z "$options" ]]; then
+ git config --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort
+ else
+ git config "$options" --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort
+ fi
+ ;;
+ 1)
+ if [[ -z "$options" ]]; then
+ git config --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort | grep -e "$1"
+ else
+ git config "$options" --get-regexp 'alias.*' | sed 's/^alias\.//' | sed 's/[ ]/ = /' | sort | grep -e "$1"
+ fi
+ ;;
+ 2)
+ if [[ -z "$options" ]]; then
+ git config alias."$1" "$2"
+ else
+ git config "$options" alias."$1" "$2"
+ fi
+ ;;
*) >&2 echo "error: too many arguments." && usage && exit 1 ;;
esac
diff --git a/man/git-alias.1 b/man/git-alias.1
index d6a5f8442..b0bcd9bd2 100644
--- a/man/git-alias.1
+++ b/man/git-alias.1
@@ -1,17 +1,21 @@
.\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
-.TH "GIT\-ALIAS" "1" "August 2021" "" "Git Extras"
+.TH "GIT\-ALIAS" "1" "September 2023" "" "Git Extras"
.SH "NAME"
\fBgit\-alias\fR \- Define, search and show aliases
.SH "SYNOPSIS"
-\fBgit\-alias\fR
-.br
-\fBgit\-alias\fR
-.br
-\fBgit\-alias\fR
+\fBgit\-alias\fR \fBgit\-alias\fR \fBgit\-alias\fR \fBgit\-alias\fR [\-\-global] \fBgit\-alias\fR [\-\-local] \fBgit\-alias\fR [\-\-global] \fBgit\-alias\fR [\-\-local] \fBgit\-alias\fR [\-\-global] \fBgit\-alias\fR [\-\-local]
.SH "DESCRIPTION"
-List all aliases, show one alias, or set one (global) alias\.
+List all aliases, show one alias, or set one (global or local) alias\.
.SH "OPTIONS"
+\-\-global
+.P
+Show or create alias in the system config
+.P
+\-\-local
+.P
+Show or create alias in the repository config
+.P
.P
The pattern used to search aliases\.
diff --git a/man/git-alias.html b/man/git-alias.html
index b3eca1f29..2089ade8b 100644
--- a/man/git-alias.html
+++ b/man/git-alias.html
@@ -77,16 +77,30 @@ NAME
SYNOPSIS
-git-alias
-git-alias
<search-pattern>
-git-alias
<alias-name> <command>
+git-alias
+git-alias
<search-pattern>
+git-alias
<alias-name> <command>
+git-alias
[--global]
+git-alias
[--local]
+git-alias
[--global] <search-pattern>
+git-alias
[--local] <search-pattern>
+git-alias
[--global] <alias-name> <command>
+git-alias
[--local] <alias-name> <command>
DESCRIPTION
-List all aliases, show one alias, or set one (global) alias.
+List all aliases, show one alias, or set one (global or local) alias.
OPTIONS
+--global
+
+Show or create alias in the system config
+
+--local
+
+Show or create alias in the repository config
+
<search-pattern>
The pattern used to search aliases.
@@ -136,7 +150,7 @@ SEE ALSO
diff --git a/man/git-alias.md b/man/git-alias.md
index 15944fbb4..81d787334 100644
--- a/man/git-alias.md
+++ b/man/git-alias.md
@@ -3,16 +3,30 @@ git-alias(1) -- Define, search and show aliases
## SYNOPSIS
-`git-alias`
-`git-alias` <search-pattern>
-`git-alias` <alias-name> <command>
+`git-alias`
+`git-alias` <search-pattern>
+`git-alias` <alias-name> <command>
+`git-alias` [--global]
+`git-alias` [--local]
+`git-alias` [--global] <search-pattern>
+`git-alias` [--local] <search-pattern>
+`git-alias` [--global] <alias-name> <command>
+`git-alias` [--local] <alias-name> <command>
## DESCRIPTION
- List all aliases, show one alias, or set one (global) alias.
+ List all aliases, show one alias, or set one (global or local) alias.
## OPTIONS
+ --global
+
+ Show or create alias in the system config
+
+ --local
+
+ Show or create alias in the repository config
+
<search-pattern>
The pattern used to search aliases.
diff --git a/tests/helper.py b/tests/helper.py
index 3c2698bb7..0852c67c3 100644
--- a/tests/helper.py
+++ b/tests/helper.py
@@ -4,10 +4,12 @@
import tempfile
import git
-def invoke_git_extras_command(name):
+def invoke_git_extras_command(name, *params):
current_dir = os.path.dirname(os.path.abspath(__file__))
git_extras_bin = os.path.join(current_dir, "..", "bin")
- return subprocess.run(os.path.join(git_extras_bin, name), capture_output=True)
+ script = [os.path.join(git_extras_bin, name), *params]
+ print(f"Run the script \"{script}\"")
+ return subprocess.run(script, capture_output=True)
class TempRepository:
def __init__(self, repo_work_dir = None):
@@ -60,7 +62,7 @@ def teardown(self):
shutil.rmtree(self._cwd, ignore_errors=True)
print(f"The temp directory {self._cwd} has been removed")
- def invoke_extras_command(self, name):
+ def invoke_extras_command(self, name, *params):
command = "git-" + name
print(f"Invoke the git-extras command - {command}")
- return invoke_git_extras_command(command)
+ return invoke_git_extras_command(command, *params)
diff --git a/tests/test_git_alias.py b/tests/test_git_alias.py
new file mode 100644
index 000000000..33357a755
--- /dev/null
+++ b/tests/test_git_alias.py
@@ -0,0 +1,70 @@
+class TestGitAlias:
+ def test_init(self, temp_repo):
+ git = temp_repo.get_repo_git()
+ git.config("--global", "alias.globalalias", "status")
+ git.config("--global", "alias.x", "status")
+ git.config("--local", "alias.localalias", "status")
+ git.config("--local", "alias.y", "status")
+
+ def test_list_all(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias")
+ actual = actual.stdout.decode()
+ assert "globalalias = status" in actual
+ assert "x = status" in actual
+ assert "localalias = status" in actual
+ assert "y = status" in actual
+
+ def test_list_all_globally(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias", "--global")
+ actual = actual.stdout.decode()
+ assert "globalalias = status" in actual
+
+ def test_list_all_locally(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias", "--local")
+ actual = actual.stdout.decode()
+ assert "localalias = status" in actual
+
+ def test_search_globally(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias", "--global", "global")
+ actual = actual.stdout.decode()
+ assert "globalalias = status" in actual
+ actual = temp_repo.invoke_extras_command("alias", "--global", "local")
+ actual = actual.stdout.decode()
+ assert "" == actual
+
+ def test_search_locally(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias", "--local", "local")
+ actual = actual.stdout.decode()
+ assert "localalias = status" in actual
+ actual = temp_repo.invoke_extras_command("alias", "--local", "global")
+ actual = actual.stdout.decode()
+ assert "" == actual
+
+ def test_get_alias_globally_and_defaultly(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias", "globalalias")
+ actual = actual.stdout.decode()
+ assert "globalalias = status" in actual
+
+ def test_set_alias_globally_and_defaultly(self, temp_repo):
+ temp_repo.invoke_extras_command("alias", "globalalias", "diff")
+ actual = temp_repo.invoke_extras_command("alias")
+ actual = actual.stdout.decode()
+ assert "globalalias = diff" in actual
+
+ def test_get_alias_locally(self, temp_repo):
+ actual = temp_repo.invoke_extras_command("alias", "--local", "localalias")
+ actual = actual.stdout.decode()
+ assert "localalias = status" in actual
+
+ def test_set_alias_locally(self, temp_repo):
+ temp_repo.invoke_extras_command("alias", "--local", "localalias", "diff")
+ actual = temp_repo.invoke_extras_command("alias")
+ actual = actual.stdout.decode()
+ assert "localalias = diff" in actual
+
+ def test_teardown(self, temp_repo):
+ git = temp_repo.get_repo_git()
+ git.config("--global", "--unset", "alias.globalalias")
+ git.config("--global", "--unset", "alias.x")
+ git.config("--local", "--unset", "alias.localalias")
+ git.config("--local", "--unset", "alias.y")