00001
00002
00003 from sys import argv, stdout
00004 from os import pathsep, listdir, environ, fdopen
00005 from os.path import exists, isdir, realpath
00006 from optparse import OptionParser, OptionValueError
00007 from tempfile import mkstemp
00008 from zipfile import is_zipfile
00009
00010 def StripPath(path):
00011 collected = []
00012 for p in path.split(pathsep):
00013 rp = realpath(p)
00014
00015 try :
00016 if exists(rp) and ((isdir(rp) and listdir(rp))
00017 or is_zipfile(rp)) and p not in collected:
00018 collected.append(p)
00019 except OSError :
00020 pass
00021 return pathsep.join(collected)
00022
00023 def CleanVariable(varname, shell, out):
00024 if environ.has_key(varname):
00025 pth = StripPath(environ[varname])
00026 if shell == "csh" or shell.find("csh") != -1 :
00027 out.write("setenv %s %s\n" % (varname, pth))
00028 elif shell == "sh" or shell.find("sh") != -1 :
00029 out.write("export %s=%s\n" % (varname, pth))
00030 elif shell == "bat" :
00031 out.write("set %s=%s\n" % (varname, pth))
00032
00033
00034 def _check_output_options_cb(option, opt_str, value, parser):
00035 if opt_str == "--mktemp" :
00036 if parser.values.output != stdout :
00037 raise OptionValueError("--mktemp cannot be used at the same time as --output")
00038 else :
00039 parser.values.mktemp = True
00040 fd, outname = mkstemp()
00041 parser.values.output = fdopen(fd, "w")
00042 print outname
00043 elif opt_str == "--output" or opt_str == "-o" :
00044 if parser.values.mktemp:
00045 raise OptionValueError("--mktemp cannot be used at the same time as --output")
00046 else :
00047 parser.values.output = open(value, "w")
00048
00049
00050 if __name__ == '__main__':
00051
00052 parser = OptionParser()
00053
00054 parser.add_option("-e", "--env",
00055 action="append",
00056 dest="envlist",
00057 metavar="PATHVAR",
00058 help="add environment variable to be processed")
00059 parser.add_option("--shell", action="store", dest="shell", type="choice", metavar="SHELL",
00060 choices = ['csh','sh','bat'],
00061 help="select the type of shell to use")
00062
00063 parser.set_defaults(output=stdout)
00064 parser.add_option("-o", "--output", action="callback", metavar="FILE",
00065 type = "string", callback = _check_output_options_cb,
00066 help="(internal) output the command to set up the environment ot the given file instead of stdout")
00067 parser.add_option("--mktemp", action="callback",
00068 dest="mktemp",
00069 callback = _check_output_options_cb,
00070 help="(internal) send the output to a temporary file and print on stdout the file name (like mktemp)")
00071
00072 options, args = parser.parse_args()
00073
00074 if not options.shell and environ.has_key("SHELL"):
00075 options.shell = environ["SHELL"]
00076
00077
00078 if options.envlist:
00079 for v in options.envlist :
00080 CleanVariable(v, options.shell, options.output)
00081
00082 for a in args:
00083 print StripPath(a)
00084
00085