2012-01-09 14 views
7

と新年あけましておめでとうございます。クリスマスディナーから回復するのは難しい問題です。ここでSVN:awk(bash)のコマンドラインsvnで色を追加


はバッシュコード(私はの.bashrcファイルにそれを置く)を作品ウィッヒの一部です:

function svn { 
    command svn "[email protected]" | awk ' 
    BEGIN { 
    cpt_c=0; 
    } 
    { 
    if  ($1=="C") { 
     cpt_c=cpt_c+1; 
     print "\033[31m" $0 "\033[00m"; # Conflicts are displayed in red 
    } 
    else if ($1=="A") { 
     print "\033[32m" $0 "\033[00m"; # Add in green 
    } 
    else if ($1=="?") { 
     print "\033[36m" $0 "\033[00m"; # New in cyan 
    } 
    else if ($1=="D") { 
     print "\033[35m" $0 "\033[00m"; # Delete in magenta 
    } 
    else    { 
     print $0;      # No color, just print the line 
    } 
    } 
    END { 
    print cpt_c, " conflicts are found."; 
    }'; 
} 

コードのこの部分で私が欲しい正確に何をすべきか。 svn関数(ステータス、更新など)は色で表示されます。内部的には、colorsvnsvn-colorのようなものはインストールしたくありません。ここで

は、上記のコードの例です:(画像を投稿するenought評判を持っていない)、再び

svn command displayed in colors

そして、私はを望むものは完全であるを。問題は、競合が見つかった場合(たとえば、私が更新を行うときなど)に起こります。実際にファイルが競合すると、svnがユーザーに手渡され、少数の文字を入力させます(下記参照)

# svn update 
Conflict discovered in 'test.txt'. 
Select: (p) postpone, (df) diff-full, (e) edit, 
     (mc) mine-conflict, (tc) theirs-conflict, 
     (s) show all options: 

ユーザタイプの何かをできるようにawkにする方法はあり、(その後、&がを終了し、保存、タイプEの後にいくつかの行を削除するインスタンスの)何かを、(例えばeのは、Vimの競合ファイルで開いWICH)別の文字を入力して衝突の解決を確認し、最後にsvn update(他のファイルなど)の次のステップを表示しますか?

つまり、ユーザーがsvnとやり取りできるようにするために色を表示するスクリプトを「一時停止」してから、svn updateを実行します。将来的にawkが呼び出し元のスクリプトを一時停止させてから再開させる方法を知っておくと、非常に便利だと思います!


私は自分自身を十分に分かりましたか?私の英語は私の望むほど良くはありません:/

詳細が必要な場合はお気軽にお問い合わせください!

+3

あなたの 'コマンドsvn'は依然としてあなたの入力を受け取ります。自律型と対話型の実行を切り替えるための 'expect'のようなツールがありますが、ここでのポイントのほんの一部になるかもしれません。正しい解決策は低レベルのラッパーです。あなたが使用したくないと言ったようなものでしょう。あなたのawkスクリプトは入力されたfrimをパイプで受け取りますが、 '/ dev/tty'などの追加入力を読み込むモードを追加するために何かをハックする可能性があります。 – tripleee

+0

bash関数 'svn'をこれをすべて扱うように拡張したいのですか、' svn'関数の実行後に別のコードとして必要な '一時停止'を想定していますか?ちなみにあなたの英語は大丈夫です!がんばろう。 – shellter

+0

@shellter:さて、私はbash関数を拡張したいと思っています。それは最高です。しかし、私はすべての可能な解決策について開いています;) Ty for my english! –

答えて

3

あなたはsvnは、競合のプロンプトを表示しないようにsvn update --accept postponeを実行しようとしましたか?

+0

男、これは完璧です。紛争のプロンプトはもう出ない...だから私はスクリプト全体を保存することができます!ありがとう、それは明らかでしたが、私は見つけませんでした! –

+1

注:**すべてのSVNプロンプト**を避けるためには、(SVNサブコマンドの場合) '--non-interactive'オプションを使用する方が良いでしょう。 –

0

ここでは簡単で安全な回避策(スクリプトでテスト済み)です。 SVNは、単に呼び出すため

system(getenv("SVN_EDITOR")) // or something similar 
あなたは、単に行うことができます

(他のシェルのために調整し、bashで)以下:あなたは、あなたの編集を行うことができる、そしてからあなたの着色スキームを維持します

export SVN_EDITOR="</dev/tty >&/dev/tty vi" 

awk。

他のエディタと連携するかどうかわかりませんが、期待しています。これらは標準的なリダイレクトです。

+0

今週末に何かテストをして、何が起こっているのか教えてください!ありがとう! –

2

あなたの質問に特に回答はしていませんが、svn commitを実行すると、私はawkをバイパスするスクリプトを少し修正して作成しました。さらに、特定のタイプの出力に色を追加しました。このスクリプトはオンラインで入手できます。変更をコミットしてください。

+0

うわー、私は少しお世辞を感じる!色を追加しても問題ありません。しかし、私が言ったように、ファイルの場合は、svnの更新中に競合している場合、私はあなたと同じ問題があると思う: ''offres.php 'で競合が見つかりました。 選択:(p)延期、差分完全、(e)編集、 (h)その他のオプションのヘルプ: ' –

+0

設定が異なります。私は 'svn'リポジトリと' git'リポジトリを並行して使用しています。競合は 'git'を介してのみ解決されます。私が 'svn'にコミットするたびに、私は紛争を起こさないでしょう。 - 私はあなたの競合を再現するためにいくつかのテストプロジェクトをセットアップする必要があります。悪気ない!私はあなたのスクリプトを利己的な「色」の理由から使います。しかし、私はその間に休暇になるので、早くも3月にあなたの問題を見ることができます。 – JJD

+1

最後に、4年以上経った今、私はあなたが過去にしたのと同じように、GitHubを通じてこのスニペットのバージョンを共有することにしました;)私は多くの改善を行ったので、興味があれば[美しいSWNのこの最新バージョン](https://github.com/4wk-/beautifulSVN) –

関連する問題