d409fe0856
For simplicity, when shellcheck returns one or more warnings, count it as a single check-package warning. The developer can get the full output either by running shellcheck directly or by calling check-package with -v. Examples: |$ ./utils/docker-run utils/check-package --include Shellcheck package/polkit/S50polkit |package/polkit/S50polkit:0: run 'shellcheck' and fix the warnings |51 lines processed |1 warnings generated |$ ./utils/docker-run utils/check-package --include Shellcheck -v package/polkit/S50polkit |package/polkit/S50polkit:0: run 'shellcheck' and fix the warnings |In package/polkit/S50polkit line 43: |< tab >start|stop|restart|reload) | ^----^ SC2221: This pattern always overrides a later one on line 45. |In package/polkit/S50polkit line 45: |< tab >reload) | ^----^ SC2222: This pattern never matches because of a previous pattern on line 43. |For more information: | https://www.shellcheck.net/wiki/SC2221 -- This pattern always overrides a l... | https://www.shellcheck.net/wiki/SC2222 -- This pattern never matches becaus... |51 lines processed |1 warnings generated NOTICE: shellcheck results depends on the version of the tool. This is why the examples above run inside the docker image. Also update .gitlab-ci.yml with the docker image after the change of the previous commit. We don't actually use shellcheck in CI, but the image from .gitlab-ci.yml is used by the docker-run script and we use that to run shellcheck. Signed-off-by: Ricardo Martincoski <ricardo.martincoski@gmail.com> [Arnout: make sure a single -v is enough to get shellcheck output; update docker image tag in .gitlab-ci.yml] Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
25 lines
907 B
Python
25 lines
907 B
Python
import os
|
|
import subprocess
|
|
from checkpackagelib.base import _Tool
|
|
|
|
|
|
class NotExecutable(_Tool):
|
|
def run(self):
|
|
if os.access(self.filename, os.X_OK):
|
|
return ["{}:0: This file does not need to be executable{}".format(self.filename, self.hint())]
|
|
|
|
|
|
class Shellcheck(_Tool):
|
|
def run(self):
|
|
cmd = ['shellcheck', self.filename]
|
|
try:
|
|
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
stdout = p.communicate()[0]
|
|
processed_output = [str(line.decode().rstrip()) for line in stdout.splitlines() if line]
|
|
if p.returncode == 0:
|
|
return
|
|
return ["{}:0: run 'shellcheck' and fix the warnings".format(self.filename),
|
|
'\n'.join(processed_output)]
|
|
except FileNotFoundError:
|
|
return ["{}:0: failed to call 'shellcheck'".format(self.filename)]
|