mercurial/cmdutil.py
changeset 4380 e89f9afc462b
parent 4355 10edaed7f909
child 4472 736e49292809
equal deleted inserted replaced
4378:e33ad7cea15f 4380:e89f9afc462b
   197                 repo.ui.status(_('recording removal of %s as rename to %s '
   197                 repo.ui.status(_('recording removal of %s as rename to %s '
   198                                  '(%d%% similar)\n') %
   198                                  '(%d%% similar)\n') %
   199                                (oldrel, newrel, score * 100))
   199                                (oldrel, newrel, score * 100))
   200             if not dry_run:
   200             if not dry_run:
   201                 repo.copy(old, new, wlock=wlock)
   201                 repo.copy(old, new, wlock=wlock)
       
   202 
       
   203 def service(opts, parentfn=None, initfn=None, runfn=None):
       
   204     '''Run a command as a service.'''
       
   205 
       
   206     if opts['daemon'] and not opts['daemon_pipefds']:
       
   207         rfd, wfd = os.pipe()
       
   208         args = sys.argv[:]
       
   209         args.append('--daemon-pipefds=%d,%d' % (rfd, wfd))
       
   210         pid = os.spawnvp(os.P_NOWAIT | getattr(os, 'P_DETACH', 0),
       
   211                          args[0], args)
       
   212         os.close(wfd)
       
   213         os.read(rfd, 1)
       
   214         if parentfn:
       
   215             return parentfn(pid)
       
   216         else:
       
   217             os._exit(0)
       
   218 
       
   219     if initfn:
       
   220         initfn()
       
   221 
       
   222     if opts['pid_file']:
       
   223         fp = open(opts['pid_file'], 'w')
       
   224         fp.write(str(os.getpid()) + '\n')
       
   225         fp.close()
       
   226 
       
   227     if opts['daemon_pipefds']:
       
   228         rfd, wfd = [int(x) for x in opts['daemon_pipefds'].split(',')]
       
   229         os.close(rfd)
       
   230         try:
       
   231             os.setsid()
       
   232         except AttributeError:
       
   233             pass
       
   234         os.write(wfd, 'y')
       
   235         os.close(wfd)
       
   236         sys.stdout.flush()
       
   237         sys.stderr.flush()
       
   238         fd = os.open(util.nulldev, os.O_RDWR)
       
   239         if fd != 0: os.dup2(fd, 0)
       
   240         if fd != 1: os.dup2(fd, 1)
       
   241         if fd != 2: os.dup2(fd, 2)
       
   242         if fd not in (0, 1, 2): os.close(fd)
       
   243 
       
   244     if runfn:
       
   245         return runfn()
   202 
   246 
   203 class changeset_printer(object):
   247 class changeset_printer(object):
   204     '''show changeset information when templating not requested.'''
   248     '''show changeset information when templating not requested.'''
   205 
   249 
   206     def __init__(self, ui, repo, patch, buffered):
   250     def __init__(self, ui, repo, patch, buffered):