diff -r 5d8021ac0e19 -r e0ed17984a48 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sat Jun 13 17:39:01 2009 +0200 +++ b/mercurial/cmdutil.py Mon May 25 18:14:32 2009 +0900 @@ -537,7 +537,7 @@ return errors -def service(opts, parentfn=None, initfn=None, runfn=None): +def service(opts, parentfn=None, initfn=None, runfn=None, logfile=None): '''Run a command as a service.''' if opts['daemon'] and not opts['daemon_pipefds']: @@ -581,11 +581,18 @@ os.close(wfd) sys.stdout.flush() sys.stderr.flush() - fd = os.open(util.nulldev, os.O_RDWR) - if fd != 0: os.dup2(fd, 0) - if fd != 1: os.dup2(fd, 1) - if fd != 2: os.dup2(fd, 2) - if fd not in (0, 1, 2): os.close(fd) + + nullfd = os.open(util.nulldev, os.O_RDWR) + logfilefd = nullfd + if logfile: + logfilefd = os.open(logfile, os.O_RDWR | os.O_CREAT | os.O_APPEND) + os.dup2(nullfd, 0) + os.dup2(logfilefd, 1) + os.dup2(logfilefd, 2) + if nullfd not in (0, 1, 2): + os.close(nullfd) + if logfile and logfilefd not in (0, 1, 2): + os.close(logfilefd) if runfn: return runfn()