Raise exception, if dosed does not change anything in given file.

This commit is contained in:
Gökçen Eraslan
2009-01-04 10:45:25 +00:00
parent 00c143ce34
commit 5f243861f3
+9 -1
View File
@@ -18,6 +18,7 @@ import glob
import sys
import fileinput
import re
import filecmp
import gettext
__trans = gettext.translation('pisi', fallback=True)
@@ -192,6 +193,7 @@ def dosed(sourceFiles, findPattern, replacePattern = ''):
''' example call: pisitools.dosed("/etc/pass*", "caglar")'''
''' example call: pisitools.dosed("Makefile", "(?m)^(HAVE_PAM=.*)no", r"\1yes")'''
backupExtension = ".pisi-backup"
sourceFilesGlob = glob.glob(sourceFiles)
#if there is no match, raise exception
@@ -200,10 +202,16 @@ def dosed(sourceFiles, findPattern, replacePattern = ''):
for sourceFile in sourceFilesGlob:
if can_access_file(sourceFile):
for line in fileinput.input(sourceFile, inplace = 1):
backupFile = "%s%s" % (sourceFile, backupExtension)
for line in fileinput.input(sourceFile, inplace = 1, backup = backupExtension):
#FIXME: In-place filtering is disabled when standard input is read
line = re.sub(findPattern, replacePattern, line)
sys.stdout.write(line)
if can_access_file(backupFile):
if filecmp.cmp(sourceFile, backupFile):
raise FileError(_('dosed method has not changed file \'%s\'.') % sourceFile)
else:
os.unlink(backupFile)
else:
raise FileError(_('File does not exist or permission denied: %s') % sourceFile)