mercurial/cmdutil.py
changeset 9513 ae88c721f916
parent 9367 1ef630452e0b
child 9536 f04d17912441
equal deleted inserted replaced
9512:e7bde4680eec 9513:ae88c721f916
   544     if errors:
   544     if errors:
   545         ui.warn(_('(consider using --after)\n'))
   545         ui.warn(_('(consider using --after)\n'))
   546 
   546 
   547     return errors
   547     return errors
   548 
   548 
   549 def service(opts, parentfn=None, initfn=None, runfn=None, logfile=None):
   549 def service(opts, parentfn=None, initfn=None, runfn=None, logfile=None,
       
   550     runargs=None):
   550     '''Run a command as a service.'''
   551     '''Run a command as a service.'''
   551 
   552 
   552     if opts['daemon'] and not opts['daemon_pipefds']:
   553     if opts['daemon'] and not opts['daemon_pipefds']:
   553         rfd, wfd = os.pipe()
   554         rfd, wfd = os.pipe()
   554         args = sys.argv[:]
   555         if not runargs:
   555         args.append('--daemon-pipefds=%d,%d' % (rfd, wfd))
   556             runargs = sys.argv[:]
       
   557         runargs.append('--daemon-pipefds=%d,%d' % (rfd, wfd))
   556         # Don't pass --cwd to the child process, because we've already
   558         # Don't pass --cwd to the child process, because we've already
   557         # changed directory.
   559         # changed directory.
   558         for i in xrange(1,len(args)):
   560         for i in xrange(1,len(runargs)):
   559             if args[i].startswith('--cwd='):
   561             if runargs[i].startswith('--cwd='):
   560                 del args[i]
   562                 del runargs[i]
   561                 break
   563                 break
   562             elif args[i].startswith('--cwd'):
   564             elif runargs[i].startswith('--cwd'):
   563                 del args[i:i+2]
   565                 del runargs[i:i+2]
   564                 break
   566                 break
   565         pid = os.spawnvp(os.P_NOWAIT | getattr(os, 'P_DETACH', 0),
   567         pid = os.spawnvp(os.P_NOWAIT | getattr(os, 'P_DETACH', 0),
   566                          args[0], args)
   568                          runargs[0], runargs)
   567         os.close(wfd)
   569         os.close(wfd)
   568         os.read(rfd, 1)
   570         os.read(rfd, 1)
   569         if parentfn:
   571         if parentfn:
   570             return parentfn(pid)
   572             return parentfn(pid)
   571         else:
   573         else: