#!/usr/bin/env python
#
# USAGE: check-modified.py FILE_OR_DIR1 FILE_OR_DIR2 ...
#
# prints out the URL associated with each item
#

import sys
import os
import os.path
import svn.core
import svn.client
import svn.wc

FORCE_COMPARISON = 0

def usage():
  print "Usage: " + sys.argv[0] + " FILE_OR_DIR1 FILE_OR_DIR2\n"
  sys.exit(0)

def run(files):

  for f in files:
    dirpath = fullpath = os.path.abspath(f)
    if not os.path.isdir(dirpath):
      dirpath = os.path.dirname(dirpath)

    adm_baton = svn.wc.adm_open(None, dirpath, False, True)

    try:
      entry = svn.wc.entry(fullpath, adm_baton, 0)

      if svn.wc.text_modified_p(fullpath, FORCE_COMPARISON,
				adm_baton):
        print "M      %s" % f
      else:
        print "       %s" % f
    except:
      print "?      %s" % f

    svn.wc.adm_close(adm_baton)

if __name__ == '__main__':
  run(sys.argv[1:])

