2017-01-06 5 views
0

我々はすべてのpythonファイルにPEP8の準拠を確認するために私たちのレポのMakefileにpep8ターゲットを使用します。のMakefileのpep8チェックのみのgit diffを

## Check all python files for compatibility with PEP8 
PEP8FLAGS := --ignore=E201,E202,E241,E265,E501,E711,E712,E713,E714,E721,W391,W291,W293,W601,W603 
pep8: 
    pep8 $(PEP8FLAGS) . 

私だけチェックに対して同様のpep8-changes目標を持っているしたいのですが

DIFF_FILES := (git diff --name-only --diff-filter=ACMR ; \ # ACMR: added/copied/modified/renamed 
      git diff --staged --name-only --diff-filter=ACMR ; \ 
      git diff --name-only --diff-filter=ACMR upstream/master...) \ 
| sort | uniq | grep -e "\.py$$" | grep -v '__init__.py' 

## Check all diff python files for compatibility with PEP8 
pep8-changes: 
    pep8 $(PEP8FLAGS) --filename $(DIFF_FILES) 

しかし、私は次のエラーを取得:Pythonのファイルは、プル要求に変更

pep8 --exclude=sandbox,thirdparty --ignore=E201,E202,E241,E265,E501,E711,E712,E713,E714,E721,W391,W291,W293,W601,W603 --filename (git diff --name-only --diff-filter=ACMR ; \ 
/bin/sh: -c: line 0: syntax error near unexpected token `(' 
0を

pep8 docsで私は多くのヘルプを見つけることができません。私は--diffフラグが私がここで探しているものだとは思わない。どんな助けもありがとう!

+0

GNU makeまたは互換性のあるものであれば、 'var!= command'または' var:= $(シェルコマンド) '。ここで達成しようとしているものによっては、セットアップにいくつかの他の潜在的な問題もあります。特に実際にコミットする前にこれをしたいのであれば、* index *にあるものと* work-tree *にあるものの違いに注意してください。 – torek

+0

@torek GNU makeになります。具体的には、 'make pep8-changes'はJenkinsが毎回実行するコマンドです。その違いは、プッシュされたブランチと上流/マスターの違いです。 – BoltzmannBrain

+0

OK - その場合、 'git diff'(インデックス対ワークツリー)か' git diff -staged'( 'HEAD'とインデックス)のどちらにもポイントがありません。これらの2つを避けることは、uniqの必要もないことを意味します。これはすべてをかなり単純化します。 'git diff-tree -r'を使って' C'と 'R'のファイル状態(ただ一つではなく二つのファイル名を生成する)を避けるのはおそらく賢明ですが、これは便利な三角の' ... '構文を排除しますマージベースを見つけるために - しかし、あなたがここでマージベースを見つけたいとは思えません。 – torek

答えて

0

大丈夫です。問題は、$ charをエスケープしているようです。

DIFF_FILES := git diff --name-only --diff-filter=ACMR upstream/master... \ 
| sort | uniq | grep -e "\.py$$" | grep -v '__init__.py' 

pep8-changes: 
    pep8 $(PEP8FLAGS) `$(DIFF_FILES)` 
+0

あなたはまだ '|並べ替え| uniq'を使っていて、3重点構文を使うのは間違っているようです( 'upstream/master'のマージベース*と' HEAD'を 'HEAD'と比較するつもりはないので、' upstream/master' HEADに対して)。また、 '__init __を除いてもGitから' * .py'マッチングを直接得ることができます(pathspecsを使用します)。 '__init __'は' grep -v'でおそらく最も簡単です。 – torek

関連する問題