"""

Lists all files for a given svn directory matching a given filetype

This macro takes 2 parameters, the path and the filetype

"""

import posixpath
import svn
import re
from trac.core import open_svn_repos

from StringIO import StringIO

def execute(hdf, args, env):

  path = filetype = ''
  if args:
    argv = [arg.strip() for arg in args.split(',')]
    if len(argv) > 0:
      path = argv[0]
      if len(argv) > 1:
        filetype = argv[1]

  repos_dir = env.get_config('trac', 'repository_dir')
  pool, rep, fs_ptr = open_svn_repos(repos_dir)

  rev = svn.fs.youngest_rev(fs_ptr, pool)
  root = svn.fs.revision_root(fs_ptr, rev, pool)
  node_type = svn.fs.check_path(root, path, pool)
  
  buf = StringIO()
  if node_type == svn.core.svn_node_dir:
    entries = svn.fs.dir_entries(root, path, pool)
    
    for item in entries.keys():
      m = re.search(filetype,item)
      if m:
        fullpath = posixpath.join(path,item)
        buf.write('<a href="%s">%s</a> ' % (env.href.file(fullpath),
                                            item))
  
  return buf.getvalue()


