summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2008-11-08 22:03:54 +0000
committerEric S. Raymond <esr@thyrsus.com>2008-11-08 22:03:54 +0000
commitcbf25e8815cd93fd4bcb730b2ee6783ea81c52e5 (patch)
treeb3bd5a535090329b4699222a162dd69dccaca13a
parentf6966ca0f0713c8e731c83d64617e713d1073663 (diff)
downloaddeheader-cbf25e8815cd93fd4bcb730b2ee6783ea81c52e5.tar.gz
deheader-cbf25e8815cd93fd4bcb730b2ee6783ea81c52e5.tar.bz2
deheader-cbf25e8815cd93fd4bcb730b2ee6783ea81c52e5.tar.xz
deheader-cbf25e8815cd93fd4bcb730b2ee6783ea81c52e5.zip
Remove option now works.
-rwxr-xr-xdeheader35
1 files changed, 18 insertions, 17 deletions
diff --git a/deheader b/deheader
index 4252d88..299d6e6 100755
--- a/deheader
+++ b/deheader
@@ -114,22 +114,26 @@ class SaveForModification:
"Prepare a file to be temporarily modified, with guaranteed reversion."
def __init__(self, filename):
self.filename = filename
- self.original = filename + ".orig"
+ self.original = filename + "-orig"
os.rename(self.filename, self.original)
- def remove_header(self, header):
- "Prepare a version with a specified header deleted."
+ def remove_headers(self, headers):
+ "Prepare a version with specified headers deleted."
ofp = open(self.filename, "w")
for line in open(self.original):
- if line != header:
+ if line not in headers:
ofp.write(line)
ofp.close()
+ def forget(self):
+ "Disable reversion."
+ os.remove(self.original)
def __del__(self):
"Revert modifications on the file at the end of this onject's lifetime."
- try:
- os.remove(self.filename)
- except OSError:
- pass
- os.rename(self.original, self.filename)
+ if os.path.exists(self.original):
+ try:
+ os.remove(self.filename)
+ except OSError:
+ pass
+ os.rename(self.original, self.filename)
def trim(line):
"Get file reference from an #include, retaining <> if a system header."
@@ -177,7 +181,7 @@ def c_analyze(source, includes, verbosity):
while True:
keepgoing = False
for header in includes:
- saveit.remove_header(header)
+ saveit.remove_headers([header])
(st, t) = compile(sourcefile, " without %s" % trim(header), verbosity)
if st == 0:
unneeded.append(header)
@@ -205,13 +209,10 @@ def deheader(sourcefile, includes, remove, verbose):
for line in unneeded:
print "deheader: remove %s from %s" % (trim(line), sourcefile)
if remove:
- os.rename(sourcefile, original)
- for header in includes:
- ofp = open(sourcefile, "w")
- for line in open(original):
- if line not in unneeded:
- ofp.write(line)
- ofp.close()
+ remove_it = SaveForModification(sourcefile)
+ remove_it.remove_headers(unneeded)
+ remove_it.forget()
+ del remove_it
if __name__ == "__main__":
(options, arguments) = getopt.getopt(sys.argv[1:], "hrvi:",