####################
# manage files
def pid_file():
- """We use a pid file to ensure that only one copy of NM is running at a given time. If successful, this function will write a pid file containing the pid of the current process. The return value is the pid of the other running process, or None otherwise."""
+ """We use a pid file to ensure that only one copy of NM is running at a given time.
+If successful, this function will write a pid file containing the pid of the current process.
+The return value is the pid of the other running process, or None otherwise."""
other_pid = None
if os.access(PID_FILE, os.F_OK): # check for a pid file
handle = open(PID_FILE) # pid file exists, read it
# replace a target file with a new contents - checks for changes
# return True if a change occurred, in which case
# chown/chmod settings should be taken care of
-def replace_file_with_string (target, new_contents):
+def replace_file_with_string (target, new_contents, chmod=None, remove_if_empty=False):
try:
current=file(target).read()
except:
current=""
- # xxx if verbose, report diffs...
if current==new_contents:
+ # if turns out to be an empty string, and remove_if_empty is set,
+ # then make sure to trash the file if it exists
+ if remove_if_empty and not new_contents and os.path.isfile(target):
+ logger.verbose("tools.replace_file_with_string: removing file %s"%target)
+ try: os.unlink(target)
+ finally: return True
return False
# overwrite target file
f=file(target,'w')
f.write(new_contents)
f.close()
+ if chmod: os.chmod(target,chmod)
return True
# not needed yet - should that unlink the new file ?