[PATCH 02/10] Run the pre-commit hook on content staged for commit

Vratislav Podzimek vpodzime at redhat.com
Wed Sep 25 18:42:48 UTC 2013


On Wed, 2013-09-25 at 14:21 -0400, David Shea wrote:
> Changed the pylint Module output so that it's more clear what file is
> being checked. Added an option to runpylint.sh to manually set the
> filename to display.
> ---
>  scripts/githooks/pre-commit | 47 ++++++++++++++++++++++++++++++++-------------
>  tests/pylint/runpylint.sh   | 16 ++++++++++++++-
>  2 files changed, 49 insertions(+), 14 deletions(-)
> 
> diff --git a/scripts/githooks/pre-commit b/scripts/githooks/pre-commit
> index 1528793..a3307b9 100755
> --- a/scripts/githooks/pre-commit
> +++ b/scripts/githooks/pre-commit
> @@ -7,6 +7,7 @@
>  """
>  import os
>  import sys
> +import tempfile
>  from subprocess import check_output, CalledProcessError
>  
>  def is_python(filename):
> @@ -14,11 +15,11 @@ def is_python(filename):
>          return True
>  
>      try:
> -        with open(filename) as testfile:
> -            if testfile.readline().startswith("#!/usr/bin/python"):
> -                return True
> -    except IOError:
> -        pass
> +        s = check_output(["git", "show", (":%s" % filename)]).splitlines()
> +        if s and s[0].startswith("#!/usr/bin/python"):
> +            return True
> +    except CalledProcessError:
> +        sys.exit(1)
>  
>      return False
>  
> @@ -37,24 +38,44 @@ except CalledProcessError:
>  pylint_files = []
>  # Lines look like: :100755 100755 2cf57974e13a2aae778e28f942a4d44bf6567409 6fe1b6caf32d565b2cdb6d1aee250aaddc6d3a04 M      tests/pylint/runpylint.sh
>  for gf in git_files.splitlines():
> -    path = gf.split()[-1]
> -    if is_python(path):
> -        pylint_files.append(path)
> +    fields = gf.split()
> +
> +    # If the file is being removed, ignore it
> +    if fields[4] == 'D':
> +        continue
> +    elif is_python(fields[-1]):
> +        pylint_files.append(fields[-1])
>  
>  if not pylint_files:
>      sys.exit(0)
> -pylint_files = " ".join(pylint_files)
>  
>  # Make sure pykickstart and blivet can be found
>  # Note that if the checked out versions are too far off pylint may fail
>  env = os.environ.copy()
>  env["PYTHONPATH"] = OTHER_MODULES_PATH
>  
> +# Make a list of tuples of (filename, tempfile) where the tempfile
> +# contains the file as staged for commit.
> +pylint_commits = []
> +for pylint_file in pylint_files:
> +    commit = tempfile.NamedTemporaryFile()
Those files are gonna end up under /tmp, right? Won't it cause some
troubles with PYTHONPATH and stuff like that?

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list