[buildout]
test-eggs =
    plone.app.testing
    unittest2
versions = versions
package-name = Products.TinyMCE
package-directories = ${buildout:directory}/Products/TinyMCE
test-packages = ${buildout:package-name}

parts += 
    xmltest
    coverage
    coverage-test
    report
    pylint-bin
    pylint
    pyflakes-bin
    pyflakes
    pep8-bin
    pep8
    zptlint-bin
    zptlint
    xmllint
    test-all

[coverage]
recipe = zc.recipe.egg
eggs = coverage

[xmltest]
recipe = collective.xmltestreport
eggs =
    ${test:eggs}
script = xmltest
defaults = ['--auto-color', '--auto-progress', '--xml']

[coverage-test]
recipe = collective.recipe.template
output = ${buildout:bin-directory}/coverage-test
mode = 755
input = inline:
    #!/bin/bash
    TEST_PACKAGES=$(echo "${buildout:test-packages}"|sed 's/^[  ]*//;s/[    ]*$//'|tr '\n' ','|sed 's/^,//;s/,$//')
    TEST_PACKAGES_WITH_DASH_S=$(echo $TEST_PACKAGES|awk -F',' '{for (i=1;i<=NF;i++) print " -s " $i}'|tr -d '\n')
    ${buildout:bin-directory}/coverage run --source="$TEST_PACKAGES" ./bin/xmltest $TEST_PACKAGES_WITH_DASH_S
    ${buildout:bin-directory}/coverage html
    ${buildout:bin-directory}/coverage xml
    echo "Coverate report is available in coverage-html/index.html"


[report]
recipe = zc.recipe.egg
eggs = coverage
scripts = coverage=report
initialization =
    eggs = '${buildout:eggs-directory}'
    bin = '${buildout:directory}/bin'
    exclude = '--omit=' + ','.join([eggs, sys.prefix, bin])
    sys.argv = sys.argv[:] + ['xml', '-i', exclude]

[coverage-report]
recipe = zc.recipe.egg
eggs = z3c.coverage
scripts = coveragereport
arguments = ('coverage', 'report')


[pylint-bin]
recipe = zc.recipe.egg
eggs = logilab.pylintinstaller
extra-paths = ${instance:location}/lib/python
entry-points = pylint-bin=pylint.lint:Run
arguments = sys.argv[1:]
arguments = [
    '--output-format=parseable',
    '--zope=y',
    '--reports=y',
    '--disable-msg=E0611,F0401,W0232,E1101,C0103,C0111,R0201,W0201,R0911,R0904,F0220,E1103,R0901,E0211,E0213,E1002,W0622',
    '--generated-members=objects',
    ] + sys.argv[1:]

# Disable messages:
#
# E0611: No name %r in module %r. Used when a name cannot be found in a module.
# F0401: Unable to import %r (%s). Used when pylint has been unable to import a module.
# W0232: Class has no __init__ method. Used when a class has no __init__ method, neither its parent classes.
# C0103: Invalid name "%s" (should match %s). Used when the name doesn't match the regular expression associated to its type (constant, variable, class...).
# C0111: Message Missing docstring Description Used when a module, function, class or method has no docstring. Some special methods like init don't necessary require a docstring. Explanationâ€¦
# R0201: Method could be a function
# W0201: Attribute %r defined outside __init__
# R0911: Too many return statements (%s/%s)

# E0211: Method has no argument
#        - Reason: raises an error on zope.interface definitions
# E0213 Method should have "self" as first argument
#       - Reason: raises an error on zope.interface definitions
# E1121 Too many positional arguments for function call
#       - Reason: ???
# E1002 Use super on an old style class
#       - Reason: super(CommentsViewlet, self).update() raises an error
# W0622 total_comments: Redefining built-in 'object'
#       - Reason: top level def function will not work (e.g. for catalog indexers)
# ...
# See http://pylint-messages.wikidot.com/all-messages for a full list.


[pylint]
recipe = collective.recipe.template
input = inline:
    #!/bin/sh
    if [ -s pylint.log ]; then
      rm pylint.log
      echo "Removing old pylint.log file"
    fi
    echo "Start pylint"
    PACKAGES="${buildout:package-directories}"
    for pkg in $PACKAGES
    do
        echo "Running pylint for $pkg"
        find -L $pkg -regex ".*\.py" | xargs bin/pylint >> pylint.log
    done
    echo "finish"
output = ${buildout:directory}/bin/pylint
mode = 755


[pyflakes-bin]
recipe = zc.recipe.egg
eggs =
   pyflakes
entry-points = pyflakes-bin=pyflakes.scripts.pyflakes:main


[pyflakes]
recipe = collective.recipe.template
input = inline:
    #!/bin/sh
    if [ -s pyflakes.log ]; then
      rm pyflakes.log
      echo "Removing old pyflakes.log file"
    fi
    if [ -s pyflakes.log.tmp ]; then
      rm pyflakes.log.tmp
    fi
    echo "Start pyflakes"
    PACKAGES="${buildout:package-directories}"
    for pkg in $PACKAGES
    do
        echo "Running pyflakes for $pkg"
        find -L $pkg -regex ".*\.py" | xargs -r bin/pyflakes-bin >> pyflakes.log.tmp
    done
    cat pyflakes.log.tmp|sed 's:${buildout:directory}/::' > pyflakes.log
    echo "finish"
output = ${buildout:directory}/bin/pyflakes
mode = 755


[pep8-bin]
recipe = zc.recipe.egg
eggs =
   pep8
entry-points = pep8-bin=pep8:_main


[pep8]
recipe = collective.recipe.template
input = inline:
    #!/bin/sh
    if [ -s pep8.log ]; then
      rm pep8.log
      echo "Removing old pep8.log file"
    fi
    if [ -s pep8.log.tmp ]; then
      rm pep8.log.tmp
    fi
    echo "Start pep8"
    PACKAGES="${buildout:package-directories}"
    for pkg in $PACKAGES
    do
        echo "Running pep8 for $pkg"
        find -L $pkg -regex ".*\.py" | xargs -r bin/pep8-bin >> pep8.log.tmp
    done
    cat pep8.log.tmp|sed 's:${buildout:directory}/::' > pep8.log
    echo "finish"
output = ${buildout:directory}/bin/pep8
mode = 755


[zptlint-bin]
recipe = zc.recipe.egg
eggs =
   zptlint
entry-points = zptlint-bin=zptlint:run

[zptlint]
recipe = collective.recipe.template
input = inline:
    #!/bin/sh
    if [ -e zptlint.log ]; then
      echo "Old zptlint.log file removed"
      rm zptlint.log
    fi
    echo "Start zptlint"
    PACKAGES="${buildout:package-directories}"
    for pkg in $PACKAGES
    do
        echo "Running zptlint for $pkg"
        find -L $pkg -regex ".*\.[c|z]?pt" | xargs -r bin/zptlint-bin | perl -p -e 's/\s+$/ /g;s/\s+/ /g;s/\*{3}s?/\n/g' | grep $pkg | sed 's:${buildout:directory}/::' >> zptlint.log
    done
    echo "finish"
output = ${buildout:directory}/bin/zptlint
mode = 755


[xmllint]
recipe = collective.recipe.template
input = inline:
    #!/bin/sh
    if [ -e xmllint.log ]; then
      echo "Removing existing xmllint.log file"
      rm xmllint.log
    fi
    echo "Start xmllint"
    for pkg in $PACKAGES
    do
    find -L $pkg ".*\.[c|z]?pt"| xargs xmllint --noout 2>&1| grep ${buildout:directory} | sed 's:${buildout:directory}/::' >> xmllint.log
    done
    if [ -s xmllint.log ]; then
      echo "Errors were found:"
      cat xmllint.log
      echo "Errors were written to xmllint.log"
      exit 1;
    else
      echo "No errors found"
    fi
    echo "finish"
output = ${buildout:directory}/bin/xmllint
mode = 755

[test-all]
recipe = collective.recipe.template
input = inline:
    #!/bin/sh
    bin/xmltest -s Products.TinyMCE
    bin/coverage-test
    bin/report
    bin/xmllint
    bin/zptlint
    bin/pep8
    bin/pyflakes
#    bin/pylint
output = ${buildout:directory}/bin/test-all
mode = 755

[versions]
Products.TinyMCE =
