2015-03-05 4 views
0

Я пишу git-hook в python, который помещает файлы, помещенные в репозиторий, и отклоняет push, если файлы не передают требования к линтингу. Я уже написал подобный крюк для PHP с помощью PHP кода снифер и код выглядит следующим образом:Передача строки в rubocop в виде файла

php_cs = subprocess.Popen(['phpcs', '--standard=' + self._standard], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = php_cs.communicate(input="file contents".encode('utf-8')) 

Этот код работает для php_cs, но так же:

cat file.php | phpcs 

, который, как я понимаю все код python делает. Я хочу сделать что-то очень похожее на ruby, используя RuboCop.

Используя очень похожий код питона на phpcs версия rubocop выглядит следующим образом:

rubo_cop = subprocess.Popen(['RuboCop'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    out, err = rubo_cop.communicate(input="file contents".encode('utf-8')) 

выход в этом случае выглядит следующим образом:

enter image description here

Это указывает на то, что rubocop не понимает ввод таким же образом, что и phps, поэтому:

cat file.rb | rubocop 

не работает для rubocop

Мой вопрос, как передать строку команде, чтобы она рассматривала ее как файл?

+0

Вы можете запустить его в директорию с файлами? В разделе использования страницы «rubocop» указано, что он по умолчанию проверяет все локальные файлы. Если это не работает, вам, вероятно, нужно будет использовать 'xargs' (или аналогичный) для преобразования стандартного ввода в аргументы командной строки. –

+0

@EtanReisner Это githook работает в удаленном репозитории, поэтому файлы там непосредственно не хранятся, мне нужно иметь возможность использовать git для отображения содержимого файла при определенных версиях. – Thomas

+1

Вы можете попробовать использовать подстановку процессов в bash ('rubocop <(git-command-that-spits-out-file-contents)'), но это может не сработать, если rubocop ожидает «настоящий» файл в качестве аргумента. –

ответ

Смежные вопросы