de[v|b]log

ShellScript, Coffee, iOS/OSX Dev
Origin: Himajinworks.
About.

今日は休日でやることがあったので軽い進捗だけ。

やったこと

やった内容としては公開しているzgit-repo-user-configの軽い更新をした。 特に重いところに触れるのではなく、単純に書き方を簡単にした。

1
2
3
4
ee25279 Merge branch 'develop'
cdfaedb Merge branch 'feature/improve_syntax' into develop
4223580 [MOD] Make less variables
e37567d [MOD] Update syntax by assembling validators

内容

Update syntax by assembling validators

これはValidationを行う際に利用している関数の呼び出しを綺麗にするというだけ。

1
2
3
4
5
6
7
8
9
10
11
    # Check current directory is under git repo or not
    local::zgit-repo-user-config::validation::in_git_branch
    [[ $? != 0 ]] && return 1

    # Check configuration file
    local::zgit-repo-user-config::validation::configuration_file
    [[ $? != 0 ]] && return 1

    # Check local user is configured or not
    local::zgit-repo-user-config::validation::git_configured_state
    [[ $? != 0 ]] && return 1

内部にはこのようなバリデーション処理があり、これは関数名の最後の部分だけが違っている。 そのため、以下のようにすることで綺麗にした。

1
2
3
4
5
6
7
8
9
10
    # Check
    #   * current directory is under git repo or not
    #   * configuration file
    #   * local user is configured or not
    local validators=(in_git_branch configuration_file git_configured_state)
    local validator=''
    for validator (${validators}); do
        local::zgit-repo-user-config::validation::${validator}
        [[ $? != 0 ]] && return 1
    ; done

正直なところ、これまでこれができるのかわからなかったのでやってみたかったというのもあった。 やっていることは単純で、バリデーションで用いる関数群の最後の部分を配列に入れてループさせて、最終的に展開した文字列を関数として適用するということ。なんか予想通りできてしまったのでこれでこの作業を完了した。

Make less variables

これは特にすごいところではなく、変数で分けるよりも連想配列にした方がいいだろうという部分を連想配列に収めただけである。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function local::zgit-repo-user-config::configuration::setup_author_info()
{
    local found_path_config=$1

    [[ -n "${found_path_config}" ]] && {
        local info=(${(s:%:)found_path_config})
        local stored_path=${info[1]}
        local user_name=${info[2]}
        local user_mail=${info[3]}

        # Configure
        git config --local user.name "${user_name}"
        git config --local user.email "${user_mail}"

        echo "This repository was configured by following settings"
        echo "    -> Base config path : ${stored_path}"
        echo "    -> User name        : ${user_name}"
        echo "    -> Mail address     : ${user_mail}"
    }
}

ここのstored_pathuser_nameuser_mailは設定から読み込んだものであり、内容的に連想配列に入れるべきだろうということで以下のようにした。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function local::zgit-repo-user-config::configuration::setup_author_info()
{
    local found_path_config=$1

    [[ -n "${found_path_config}" ]] && {
        local info=(${(s:%:)found_path_config})
        local -A configs=()

        configs[stored_path]=${info[1]}
        configs[user_name]=${info[2]}
        configs[user_mail]=${info[3]}

        # Configure
        git config --local user.name "${configs[user_name]}"
        git config --local user.email "${configs[user_mail]}"

        echo "This repository was configured by following settings"
        echo "    -> Base config path : ${configs[stored_path]}"
        echo "    -> User name        : ${configs[user_name]}"
        echo "    -> Mail address     : ${configs[user_mail]}"
    }
}

若干長くなってしまうが、意味的にこの方が好みだったためこれで修正とした。