"""

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 os.path
import re
from StringIO import StringIO
from svn import core, repos, fs

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.config.get('trac', 'repository_dir')

  core.apr_initialize()
  pool = core.svn_pool_create(None)
  # Remove any trailing slash or else subversion might abort
  if not os.path.split(repos_dir)[1]:
    repos_dir = os.path.split(repos_dir)[0]

  rep = repos.svn_repos_open(repos_dir, pool)
  fs_ptr = repos.svn_repos_fs(rep)

  rev =fs.youngest_rev(fs_ptr, pool)
  root =fs.revision_root(fs_ptr, rev, pool)
  node_type =fs.check_path(root, path, pool)

  buf = StringIO()
  if node_type == core.svn_node_dir:
    entries = fs.dir_entries(root, path, pool)
    keys = entries.keys()
    keys.sort()
    for item in keys:
      m = re.search(filetype,item)
      if m:
        fullpath = posixpath.join(path,item)
        buf.write('<a class="ext-link" href="%s"><span class="icon"></span>%s</a><br />' % 
(env.href.file(fullpath), item))

  return buf.getvalue()

