You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by do...@apache.org on 2001/04/22 13:35:32 UTC

cvs commit: jakarta-avalon/tools/bin fix-packages.py

donaldp     01/04/22 04:35:32

  Added:       tools    translate-list.txt
               tools/bin fix-packages.py
  Log:
  Initial sweep at mass .java file translation using python.
  
  Revision  Changes    Path
  1.1                  jakarta-avalon/tools/translate-list.txt
  
  Index: translate-list.txt
  ===================================================================
  import org.apache.avalon.util.StringUtil;|import org.apache.avalon.ExceptionUtil;
  StringUtil.|ExceptionUtil.
  import org.apache.avalon.ComponentManagerException;|import org.apache.avalon.component.ComponentException;
  import org.apache.avalon.ComponentNotFoundException;|import org.apache.avalon.component.ComponentException;
  import org.apache.avalon.ComponentNotAccessibleException;|import org.apache.avalon.component.ComponentException;
  import org.apache.avalon.ComponentManager;|import org.apache.avalon.component.ComponentManager;
  import org.apache.avalon.DefaultComponentManager;|import org.apache.avalon.component.DefaultComponentManager;
  import org.apache.avalon.ComponentSelector;|import org.apache.avalon.component.ComponentSelector;
  import org.apache.avalon.DefaultComponentSelector;|import org.apache.avalon.component.DefaultComponentSelector;
  import org.apache.avalon.Component;|import org.apache.avalon.component.Component;
  import org.apache.avalon.Composer;|import org.apache.avalon.component.Composable;
  import org.apache.avalon.Recomposer;|import org.apache.avalon.component.Recomposable;
  import org.apache.avalon.configuration.Parameters;|import org.apache.avalon.parameters.Parameters;
  ComponentManagerException|ComponentException
  ComponentNotFoundException|ComponentException
  ComponentNotAccessibleException|ComponentException
  Composer|Composable
  import org.apache.avalon.Poolable;|import org.apache.excalibur.pool.Poolable;
  import org.apache.avalon.Recyclable;|import org.apache.excalibur.pool.Recyclable;
  import org.apache.avalon.ThreadSafe;|import org.apache.avalon.thread.ThreadSafe;
  import org.apache.avalon.SingleThreaded;|import org.apache.avalon.thread.SingleThreaded;
  import org.apache.avalon.AbstractLoggable;|import org.apache.avalon.logger.AbstractLoggable;
  import org.apache.avalon.Loggable;|import org.apache.avalon.logger.Loggable;
  import org.apache.avalon.Context;|import org.apache.avalon.context.Context;
  import org.apache.avalon.DefaultContext;|import org.apache.avalon.context.DefaultContext;
  import org.apache.avalon.Contextualizable;|import org.apache.avalon.context.Contextualizable;
  import org.apache.avalon.Recontextualizable;|import org.apache.avalon.context.Recontextualizable;
  import org.apache.avalon.Resolvable;|import org.apache.avalon.context.Resolvable;
  import org.apache.avalon.util.Lock;|import org.apache.excalibur.concurrent.Lock;
  import org.apache.avalon.util.cli.|import org.apache.excalibur.cli.
  import org.apache.avalon.util.concurrent.|import org.apache.excalibur.concurrent.
  import org.apache.avalon.util.collections.|import org.apache.excalibur.collections.
  import org.apache.avalon.util.datasource.|import org.apache.excalibur.datasource.
  import org.apache.avalon.util.i18n.|import org.apache.excalibur.i18n.
  import org.apache.avalon.util.io.|import org.apache.excalibur.io.
  import org.apache.avalon.util.pool.|import org.apache.excalibur.pool.
  import org.apache.avalon.util.thread.|import org.apache.excalibur.thread.
  
  
  
  1.1                  jakarta-avalon/tools/bin/fix-packages.py
  
  Index: fix-packages.py
  ===================================================================
  #! /usr/bin/env python
  #
  # Mass string translation for java files (change Wanted re for other files)
  #
  # Author: Peter Donald <do...@apache.org>
  #
  # Adapted from fixid.py in python distribution under Tools
  #
  
  import sys
  import re
  import string
  import os
  from stat import *
  import getopt
  
  err = sys.stderr.write
  dbg = err
  out = sys.stdout.write
  
  def usage():
  	progname = sys.argv[0]
  	err('Usage: ' + progname + ' [-s file] ... file-or-directory ...\n')
  	err('\n')
  	err('-s substfile : add a file of substitutions\n')
  	err('\n')
  	err('Each non-empty non-comment line in a substitution file must\n')
  	err('contain exactly two words separated by a | character.\n')
  
  def main():
  	try:
  		opts, args = getopt.getopt(sys.argv[1:], 'crs:')
  	except getopt.error, msg:
  		err('Options error: ' + str(msg) + '\n')
  		usage()
  		sys.exit(2)
  	bad = 0
  	if not args: # No arguments
  		usage()
  		sys.exit(2)
  	for opt, arg in opts:
  		if opt == '-s':
  			addsubst(arg)
  	initre()
  	for arg in args:
  		if os.path.isdir(arg):
  			if recursedown(arg): bad = 1
  		elif os.path.islink(arg):
  			err(arg + ': will not process symbolic links\n')
  			bad = 1
  		else:
  			if fix(arg): bad = 1
  	sys.exit(bad)
  
  # Change this regular expression to select a different set of files
  Wanted = '^[a-zA-Z0-9_]+\.java$'
  def wanted(name):
  	return None <> re.match(Wanted, name)
  
  def recursedown(dirname):
  	dbg('recursedown(' + `dirname` + ')\n')
  	bad = 0
  	try:
  		names = os.listdir(dirname)
  	except os.error, msg:
  		err(dirname + ': cannot list directory: ' + str(msg) + '\n')
  		return 1
  	names.sort()
  	subdirs = []
  	for name in names:
  		if name in (os.curdir, os.pardir): continue
  		fullname = os.path.join(dirname, name)
  		if os.path.islink(fullname): pass
  		elif os.path.isdir(fullname):
  			subdirs.append(fullname)
  		elif wanted(name):
  			if fix(fullname): bad = 1
  	for fullname in subdirs:
  		if recursedown(fullname): bad = 1
  	return bad
  
  def fix(filename):
  	dbg('fix(' + `filename` + ')\n')
      
      # File replacement mode
  	try:
  		f = open(filename, 'r')
  	except IOError, msg:
  		err(filename + ': cannot open: ' + str(msg) + '\n')
  		return 1
  
  	head, tail = os.path.split(filename)
  	tempname = os.path.join(head, '@' + tail)
  
  	# If we find a match, we rewind the file and start over but
  	# now copy everything to a temp file.
  	lineno = 0
  	g = None
  	while 1:
  		line = f.readline()
  		if not line: break
  		lineno = lineno + 1
  		newline = fixline(line)
  		if newline != line:
  			if g is None:
  				try:
  					g = open(tempname, 'w')
  				except IOError, msg:
  					f.close()
  					err(tempname+': cannot create: '+
  					    str(msg)+'\n')
  					return 1
  				f.seek(0)
  				lineno = 0
  				out(filename + ':\n')
  				continue # restart from the beginning
  			out(`lineno` + '\n')
  			out('< ' + line)
  			out('> ' + newline)
  		if g is not None:
  			g.write(newline)
  
  	# End of file
  	f.close()
  	if not g: return 0 # No changes
  
  	# Finishing touch -- move files
  
  	# First copy the file's mode to the temp file
  	try:
  		statbuf = os.stat(filename)
  		os.chmod(tempname, statbuf[ST_MODE] & 07777)
  	except os.error, msg:
  		err(tempname + ': warning: chmod failed (' + str(msg) + ')\n')
  
  	# Then make a backup of the original file as filename~
  	try:
  		os.rename(filename, filename + '~')
  	except os.error, msg:
  		err(filename + ': warning: backup failed (' + str(msg) + ')\n')
  
  	# Now move the temp file to the original file
  	try:
  		os.rename(tempname, filename)
  	except os.error, msg:
  		err(filename + ': rename failed (' + str(msg) + ')\n')
  		return 1
  
  	# Return succes
  	return 0
  
  def initre():
  	global SearcherExpr
  
  	keys = Dict.keys()
  	keyCount = len(keys)
  	i = 0
  	reStr = ""
  	while i < len(keys):
  		if i != 0: reStr = reStr + '|'
  		reStr = reStr + keys[i]
  		i = i + 1
  	SearcherExpr = re.compile( reStr )
  
  def fixline(line):
  	global Program
  ##	print '-->', `line`
  	i = 0
  
  	while i < len(line):
  		match = SearcherExpr.search(line, i)
  		if match == None: break
  		found = match.group(0)
  		i = match.start()
  		n = len(found)
  		if Dict.has_key(found):
  			subst = Dict[found]
  
  			line = line[:i] + subst + line[i+n:]
  			n = len(subst)
  		i = i + n
  	return line
  
  Dict = {}
  NotInComment = {}
  
  def addsubst(substfile):
  	try:
  		fp = open(substfile, 'r')
  	except IOError, msg:
  		err(substfile + ': cannot read substfile: ' + str(msg) + '\n')
  		sys.exit(1)
  	lineno = 0
      
  	while 1:
  		line = fp.readline()
  		if not line: break
  		lineno = lineno + 1
  		try:
  			i = string.index(line, '#')
  		except string.index_error:
  			i = -1		# Happens to delete trailing \n
  		words = string.split(line[:i],'|')
  		if not words: continue
  		if len(words) <> 2:
  			err(substfile + ':' + `lineno` + ': warning: bad line: ' + line)
  			continue
  		[key, value] = words
  
  ##		print 'Will replace ', key, ' with ', value
  
  		Dict[key] = value
          
  	fp.close()
  
  main()
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: avalon-dev-help@jakarta.apache.org