1515# specific language governing permissions and limitations
1616# under the License.
1717import re
18+ import os
1819import tempfile
1920import shutil
2021from .utilities import bash
@@ -59,39 +60,42 @@ def getEntry(self, name, separator="="):
5960 return ""
6061
6162 def save (self ):
62- fp = open (self .fileName , "r" )
6363 newLines = []
64- for line in fp .readlines ():
65- matched = False
66- for entry in self .entries :
67- if entry .op == "add" :
68- if entry .separator == "=" :
69- matchString = "^\ *" + entry .name + ".*"
70- elif entry .separator == " " :
71- matchString = "^\ *" + entry .name + "\ *" + entry .value
72- else :
73- if entry .separator == "=" :
74- matchString = "^\ *" + entry .name + "\ *=\ *" + entry .value
64+ if os .path .exists (self .fileName ) and os .path .isfile (self .fileName ):
65+ fp = open (self .fileName , "r" )
66+ for line in fp .readlines ():
67+ matched = False
68+ for entry in self .entries :
69+ if entry .op == "add" :
70+ if entry .separator == "=" :
71+ matchString = "^\ *" + entry .name + ".*"
72+ elif entry .separator == " " :
73+ matchString = "^\ *" + entry .name + "\ *" + entry .value
7574 else :
76- matchString = "^\ *" + entry .name + "\ *" + entry .value
77-
78- match = re .match (matchString , line )
79- if match is not None :
80- if entry .op == "add" and entry .separator == "=" :
81- newline = "\n " + entry .name + "=" + entry .value + "\n "
82- entry .setState ("set" )
83- newLines .append (newline )
84- self .backups .append ([line , newline ])
85- matched = True
86- break
87- elif entry .op == "rm" :
88- entry .setState ("set" )
89- self .backups .append ([line , None ])
90- matched = True
91- break
92-
93- if not matched :
94- newLines .append (line )
75+ if entry .separator == "=" :
76+ matchString = "^\ *" + entry .name + "\ *=\ *" + entry .value
77+ else :
78+ matchString = "^\ *" + entry .name + "\ *" + entry .value
79+
80+ match = re .match (matchString , line )
81+ if match is not None :
82+ if entry .op == "add" and entry .separator == "=" :
83+ newline = "\n " + entry .name + "=" + entry .value + "\n "
84+ entry .setState ("set" )
85+ newLines .append (newline )
86+ self .backups .append ([line , newline ])
87+ matched = True
88+ break
89+ elif entry .op == "rm" :
90+ entry .setState ("set" )
91+ self .backups .append ([line , None ])
92+ matched = True
93+ break
94+
95+ if not matched :
96+ newLines .append (line )
97+
98+ fp .close ()
9599
96100 for entry in self .entries :
97101 if entry .getState () != "set" :
@@ -101,8 +105,6 @@ def save(self):
101105 self .backups .append ([None , newline ])
102106 entry .setState ("set" )
103107
104- fp .close ()
105-
106108 open (self .fileName , "w" ).writelines (newLines )
107109
108110 def replace_line (self , startswith ,stanza ,always_add = False ):
0 commit comments