#!/usr/bin/env python

import sys, argparse
import pyadmin as sa

PARSER = \
 argparse.ArgumentParser( description='find files and optionally edit them')
PARSER.add_argument( '-p', action='store', dest='paths',
                      default='.',
                      help='paths to search',
                   )
PARSER.add_argument( '-i', action='store', dest='inc_patt',
                     default='.*',
                     help='file name pattern to include',
                   )
PARSER.add_argument( '-x', action='store', dest='exc_patt',
                     default=None,
                     help='file name pattern to exclude',
                   )
PARSER.add_argument( '-o', action='store', dest='old',
                     default=None,
                     help='string to search for',
                   )
PARSER.add_argument( '-n', action='store', dest='new',
                     default=None,
                     help='string to replace with',
                   )
PARSER.add_argument( '-b', action='store', dest='bufile',
                     default='editbak.tgz',
                     help='backup file name',
                   )
PARSER.add_argument( '-v', action='store_true', dest='verbose',
                     help='verbose output, lists file names',
                   )
values = PARSER.parse_args()

if not values.paths :
    sys.exit()
FILE_LIST = sa.find( values.paths, VALUES.inc_patt, VALUES.exc_patt,
                     newer_than = None, prt = False, )
if not FILE_LIST :
    sys.stdout.write( 'no matching files\n' )
sys.stdout.write( '%s matching files found\n' % len( FILE_LIST ) )

if not values.old :
    sys.exit()
if not values.new :
    sys.stdout.write( 'please supply a replacement string\n' )
    sys.exit()

CHANGED_FILES = sa.edit_files( FILE_LIST, values.old, VALUES.new,
                               update = False, )
if not CHANGED_FILES :
    sys.stdout.write( 'no files with matching strings (%s)\n' % values.old )
    sys.exit()
if values.verbose :
    sys.stdout.write( 'The following files will be changed:\n' )
    for file_name in CHANGED_FILES :
        sys.stdout.write( '%s\n' % file_name )

sys.stdout.write( '%s files with matching strings found\n' % \
                  len( CHANGED_FILES ) )

sys.stdout.write( 'OK to edit files ? [y|n] [n] >> ' )
OK = sys.stdin.readline().upper().strip()
if OK != 'Y' :
    sys.exit()

sys.stdout.write( 'Taking backup...\n' )
sa.backup( CHANGED_FILES, values.bufile )
sys.stdout.write( 'Backup completed, carrying out edit...\n' )
CHANGED_FILES = sa.edit_files( FILE_LIST, values.old, VALUES.new,
                               update = True, )
sys.stdout.write( '%s files backed up and edited\n' % len( CHANGED_FILES ) )

# *****************************************************************************
