ファイルのコマンドオプションをコマンドに挿入する

ファイルのコマンドオプションをコマンドに挿入する

コンテキスト:Mercurial拡張エラーを追跡しようとしています。

Mercurial には Mercurial の基本機能を拡張する拡張機能があります。必要に応じてこれらの拡張機能をロードすることを選択できます。時には互いに干渉することもあります。

Evolve 拡張のコマンドがhg fold期待どおりに動作しません。問題は、ロードされた他の拡張機能の1つにあるようです。これは、Evolve拡張のみがロードされている場合にのみコマンドが正しく機能するためです。 Evolveをロードすると、次のようになります。

HGRCPATH=/dev/null hg fold --config extensions.hgext3rd.evolve= --exact  -r  2024:8679fc70eae8  -r  2021:8b3257871eac -m "Fold"

問題のある拡張を分離するために、ロードしたすべての拡張に対してバイナリ検索を実行したいと思います。私が持っているようなリストhg debugconfigは次のとおりです。

extensions.hgext.churn=
extensions.hgext.color=
extensions.hgext.convert=
extensions.hgext.extdiff=
extensions.hgext.graphlog=
extensions.hgext.hgk=
extensions.hgext.journal=
extensions.hgext.keyword=
extensions.hgext.mq=
extensions.hgext.pager=
extensions.hgext.patchbomb=
extensions.hgext.purge=
extensions.hgext.rebase=
extensions.hgext.record=
extensions.hgext.schemes=
extensions.hgext.progress=
extensions.hgext.histedit=
extensions.hgext.shelve=
extensions.hgext.narrow=
extensions.hgext.show=
extensions.hgext.share=
extensions.hgext3rd.evolve=
extensions.hgext3rd.topic=

行番号で含める拡張子のリストを指定できるコマンドが必要です。そのように

HGRCPATH=/dev/null hg fold something(1, 3, 5) --exact  -r  2024:8679fc70eae8  -r  2021:8b3257871eac -m "Fold"

これには、ファイルの1行、3行、および5行の拡張子が含まれます。これは次のように出力する必要があります

HGRCPATH=/dev/null hg fold --config extensions.hgext.churn= --config extensions.hgext.convert= --config extensions.hgext.graphlog= --exact  -r  2024:8679fc70eae8  -r  2021:8b3257871eac -m "Fold"

コマンドラインを使用してエラーを確認するには、を確認する必要がありますhg log。 MercurialのPython APIを使用して自動検証を実行できますが、誰かが私に方法を教えていない限り、これは途方もない作業になります。そんな価値がない。これを考慮すると、できるだけ少ない量のテストを実行するのが合理的です。したがって、バイナリ検索。

この--configオプションはグローバルなので、作業が簡単になったらコマンドの最後に配置できます。

ベストアンサー1

この機能はどうですか?

hg_fold() {
    local -a config
    mapfile -t config < <(hg debugconfig)

    local -a opts
    for i in "$@"; do
        opts+=( --config "${config[i-1]}" )
    done
    opts+=(
        --exact  
        -r  2024:8679fc70eae8  
        -r  2021:8b3257871eac 
        -m "Fold"
    )

    echo HGRCPATH=/dev/null hg fold "${opts[@]}"
}

hg_fold 1 3 5

echoよさそうな場合は削除してください。


もっとインタラクティブなものが欲しいなら、おそらく

hg_fold() {
    local -a opts
    select_options opts

    opts+=(
        --exact  
        -r  2024:8679fc70eae8  
        -r  2021:8b3257871eac 
        -m "Fold"
    )

    echo HGRCPATH=/dev/null hg fold "${opts[@]}"
}

select_options() {
    local -n options=$1
    local -a config
    mapfile -t config < <(hg debugconfig)

    local selecting=true
    PS3="Select a debugconfig item: "

    while $selecting; do
        select item in "${config[@]}" Done; do
            if [[ $item == "Done" ]]; then
                selecting=false
                break
            elif [[ -n $item ]]; then
                options+=( --config "$item" )
                config[REPLY-1]="*$item"  # mark it as selected
                break
            fi
        done
    done
}

hg_fold

おすすめ記事