That sounds great thank you. That's a good point to run this from our build
server instead of on each commit. Thanks for providing this code. Now I'll
have to see what this paver is about :)

Stephen

2010/12/21 Jürgen Hermann <[email protected]>

> Hi, this is the core of the code I use to call pylint from paver as part of
> a build process:
>
>    from pylint import lint as linter
>
>    # report according to file extension
>    reporters = {
>        ".html": linter.HTMLReporter,
>        ".log": linter.ParseableTextReporter,
>        ".txt": linter.TextReporter,
>    }
>
>    argv = ["--rcfile", rcfile, ....]
>
>    sys.stderr.write("Running %s::pylint '%s'\n" % (sys.argv[0], "'
> '".join(argv)))
>    outfile = options.get("output", None)
>    if outfile:
>        outfile = os.path.abspath(outfile)
>
>    try:
>        saved_cwd = os.getcwd()
>        try:
>            if os.path.exists("src"):
>                os.chdir("src")
>            if outfile:
>                reporterClass = reporters.get(path(outfile).ext,
> linter.TextReporter)
>                sys.stderr.write("Writing output to %r\n" % (str(outfile),))
>                linter.Run(argv, reporter=reporterClass(open(outfile, "w")))
>            else:
>                linter.Run(argv)
>        finally:
>            os.chdir(saved_cwd)
>    except SystemExit, exc:
>        if not exc.code:
>            sys.stderr.write("paver::lint - No problems found.\n")
>        elif exc.code & 32:
>            # usage error (internal error in this code)
>            sys.stderr.write("paver::lint - Usage error, bad arguments
> %r?!\n" % (argv,))
>            raise
>        else:
>            bits = {
>                1: "fatal",
>                2: "error",
>                4: "warning",
>                8: "refactor",
>                16: "convention",
>            }
>            sys.stderr.write("paver::lint - Some %s message(s) issued.\n" %
> (
>                ", ".join([text for bit, text in bits.items() if exc.code &
> bit])
>            ))
>            if exc.code & 3:
>                sys.stderr.write("paver::lint - Exiting due to fatal / error
> message.\n")
>                raise
>
> BTW, nowadays it's more usual to run this stuff in a continuous build
> system _triggered_ by a commit, you might consider that approach instead of
> a commit hook, since it has numerous advantages.
> ________________________________________
> Von: [email protected] [
> [email protected]] im Auftrag von Stephen Mullins
> [[email protected]]
> Gesendet: Dienstag, 21. Dezember 2010 01:31
> An: [email protected]
> Betreff: [Python-projects] Using pylint as a mercurial commit hook
>
> Hello,
>
> I just discovered pylint while looking for a static code analysis tool and
> am interested in using it at work. What would make it most effective is to
> integrate pylint with mercurial to check for stying/errors on any files that
> have been added or modified in the changeset. I've written commit hooks
> before so I'm familiar with that piece. I'd like to know if this has already
> been done before, if not is there documentation on using pylint in a python
> process? I realize its intended to be called from the command line but I'm
> hoping its straightforward to use an API from within a python module.
>
> Thanks,
> Stephen
>
_______________________________________________
Python-Projects mailing list
[email protected]
http://lists.logilab.org/mailman/listinfo/python-projects

Reply via email to