You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
#!/usr/bin/env python
|
|
|
|
import os, re
|
|
|
|
def lineify_fileobjs(ifo, ofo, strip=False):
|
|
from pyutil.strutil import pop_trailing_newlines, split_on_newlines
|
|
for l in ifo:
|
|
for sl in split_on_newlines(pop_trailing_newlines(l)):
|
|
if strip:
|
|
sl = sl.strip()
|
|
ofo.write(pop_trailing_newlines(sl) + '\n')
|
|
|
|
def lineify_file(fname, strip=False, nobak=True):
|
|
f = open(fname, "rU")
|
|
from pyutil.fileutil import ReopenableNamedTemporaryFile
|
|
rntf = ReopenableNamedTemporaryFile()
|
|
fo = open(rntf.name, "wb")
|
|
for l in f:
|
|
if strip:
|
|
l = l.strip() + '\n'
|
|
fo.write(l)
|
|
fo.close()
|
|
import shutil
|
|
if not nobak:
|
|
shutil.copyfile(fname, fname + ".lines.py-bak")
|
|
import shutil
|
|
try:
|
|
shutil.move(rntf.name, fname)
|
|
except EnvironmentError:
|
|
# Couldn't atomically overwrite, so just hope that this process doesn't die
|
|
# and the target file doesn't get recreated in between the following two
|
|
# operations:
|
|
if nobak:
|
|
os.remove(fname)
|
|
else:
|
|
shutil.move(fname, fname + ".lines.py-bak-2")
|
|
shutil.move(rntf.name, fname)
|
|
|
|
def darcs_metadir_dirpruner(dirs):
|
|
if "_darcs" in dirs:
|
|
dirs.remove("_darcs")
|
|
|
|
SCRE=re.compile("\\.(py|php|c|h|cpp|hpp|txt|sh|pyx|pxi|html|htm)$|makefile$", re.IGNORECASE)
|
|
def source_code_filepruner(fname):
|
|
return SCRE.search(fname)
|
|
|
|
def all_filepruner(fname):
|
|
return True
|
|
|
|
def all_dirpruner(dirs):
|
|
return
|
|
|
|
def lineify_all_files(dirname, strip=False, nobak=True, dirpruner=all_dirpruner, filepruner=all_filepruner):
|
|
for (root, dirs, files,) in os.walk(dirname):
|
|
dirpruner(dirs)
|
|
for fname in files:
|
|
fullfname = os.path.join(root, fname)
|
|
if filepruner(fullfname):
|
|
lineify_file(fullfname, strip=strip, nobak=nobak)
|
|
|