changeset 111:7f6fb8103db0

Move the sed-like replacement code from enterprise/kdepim.py to treepkg/util.py This creates a new function treepkg.util.replace_in_file with some tests in test/test_util.py and new test support code in test/filesupport.py. Also, adapt enterprise/kdepim.py to use the new function.
author Bernhard Herzog <bh@intevation.de>
date Wed, 19 Mar 2008 19:50:32 +0000
parents ba677506e95e
children cea98d4e4a6a
files enterprise/kdepim.py test/filesupport.py test/test_util.py treepkg/util.py
diffstat 4 files changed, 58 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/enterprise/kdepim.py	Wed Mar 19 15:00:54 2008 +0000
+++ b/enterprise/kdepim.py	Wed Mar 19 19:50:32 2008 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2007 by Intevation GmbH
+# Copyright (C) 2007, 2008 by Intevation GmbH
 # Authors:
 # Bernhard Herzog <bh@intevation.de>
 #
@@ -44,12 +44,9 @@
         versionstring = "(enterprise %s)" % self.enterprise_version
         for versionfile in ["kmail/kmversion.h", "kontact/src/main.cpp",
                             "korganizer/version.h"]:
-            filename = os.path.join(pkgbasedir, versionfile)
-            patched = re.sub("\(enterprise ([^)]*)\)", versionstring,
-                              open(filename).read())
-            f = open(filename, "w")
-            f.write(patched)
-            f.close()
+            treepkg.util.replace_in_file(os.path.join(pkgbasedir, versionfile),
+                                         "\(enterprise ([^)]*)\)",
+                                         versionstring)
 
     def do_package(self):
         pkgbaseversion, pkgbasedir = self.export_sources()
--- a/test/filesupport.py	Wed Mar 19 15:00:54 2008 +0000
+++ b/test/filesupport.py	Wed Mar 19 19:50:32 2008 +0000
@@ -90,3 +90,7 @@
                 self.create_files(newdir, contents)
             else:
                 writefile(os.path.join(directory, name), contents)
+
+    def checkFileContents(self, filename, contents):
+        """check the contents of a file"""
+        self.assertEquals(open(filename).read(), contents)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/test_util.py	Wed Mar 19 19:50:32 2008 +0000
@@ -0,0 +1,35 @@
+# Copyright (C) 2007, 2008 by Intevation GmbH
+# Authors:
+# Bernhard Herzog <bh@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
+
+"""Tests for the treepkg.util module"""
+
+import unittest
+
+from filesupport import FileTestMixin
+
+from treepkg.util import replace_in_file
+
+
+class TestReplaceInFile(unittest.TestCase, FileTestMixin):
+
+    def runtest(self, orig_contents, expected_contents, pattern, replacement):
+        filename = self.create_temp_file(self.id(), orig_contents)
+        replace_in_file(filename, pattern, replacement)
+        self.checkFileContents(filename, expected_contents)
+
+    def test_version_replacement(self):
+        template = ("project foo version 1.0-svn%(rev)d"
+                    "Some filler"
+                    "text that sometimes"
+                    "looks similar to the pattern"
+                    "1.0-"
+                    "foo 1.2-svn2"
+                    "echo foo version 1.0-svn%(rev)d"
+                    ""
+                    "and more filler")
+        self.runtest(template % dict(rev=0), template % dict(rev=321),
+                     r"1\.0-svn0", "1.0-svn321")
--- a/treepkg/util.py	Wed Mar 19 15:00:54 2008 +0000
+++ b/treepkg/util.py	Wed Mar 19 19:50:32 2008 +0000
@@ -8,6 +8,7 @@
 """Collection of functions that didn't fit elsewhere"""
 
 import os
+import re
 import tempfile
 import shutil
 
@@ -114,3 +115,17 @@
     finally:
         if os.path.exists(tempname):
             os.remove(tempname)
+
+
+def replace_in_file(filename, pattern, replacement):
+    """Replace all occurrences of pattern in a file with replacement.
+    The file is modified in place.  The search and replace is done with
+    the re.sub function.  The pattern and replacement parameter are passed
+    through to re.sub unmodified, so their semantics are determined by
+    re.sub.
+    """
+    contents = open(filename).read()
+    modified = re.sub(pattern, replacement, contents)
+    f = open(filename, "w")
+    f.write(modified)
+    f.close()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)