~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/sftp.py

  • Committer: Martin Pool
  • Date: 2006-04-28 09:35:20 UTC
  • mto: This revision was merged to the branch mainline in revision 1690.
  • Revision ID: mbp@sourcefrog.net-20060428093520-facdfa15d5007057
(patch) --diff-prefix option (goffredo, alexander)

Show diffs side-by-side

added added

removed removed

Lines of Context:
65
65
register_urlparse_netloc_protocol('sftp')
66
66
 
67
67
 
68
 
def _ignore_sigint():
69
 
    # TODO: This should possibly ignore SIGHUP as well, but bzr currently
70
 
    # doesn't handle it itself.
71
 
    # <https://launchpad.net/products/bzr/+bug/41433/+index>
72
 
    import signal
73
 
    signal.signal(signal.SIGINT, signal.SIG_IGN)
74
 
    
75
 
 
76
68
def os_specific_subprocess_params():
77
69
    """Get O/S specific subprocess parameters."""
78
70
    if sys.platform == 'win32':
80
72
        # win32
81
73
        return {}
82
74
    else:
83
 
        # We close fds other than the pipes as the child process does not need 
84
 
        # them to be open.
85
 
        #
86
 
        # We also set the child process to ignore SIGINT.  Normally the signal
87
 
        # would be sent to every process in the foreground process group, but
88
 
        # this causes it to be seen only by bzr and not by ssh.  Python will
89
 
        # generate a KeyboardInterrupt in bzr, and we will then have a chance
90
 
        # to release locks or do other cleanup over ssh before the connection
91
 
        # goes away.  
92
 
        # <https://launchpad.net/products/bzr/+bug/5987>
93
 
        #
94
 
        # Running it in a separate process group is not good because then it
95
 
        # can't get non-echoed input of a password or passphrase.
96
 
        # <https://launchpad.net/products/bzr/+bug/40508>
97
 
        return {'preexec_fn': _ignore_sigint,
 
75
        # we close fds as the child process does not need them to be open.
 
76
        # we set the process group so that signals from the keyboard like
 
77
        # 'SIGINT' - KeyboardInterrupt - are not recieved in the child procecss
 
78
        # if we do not do this, then the sftp/ssh subprocesses will terminate 
 
79
        # when a user hits CTRL-C, and we are unable to use them to unlock the
 
80
        # remote branch/repository etc.
 
81
        return {'preexec_fn': os.setpgrp,
98
82
                'close_fds': True,
99
83
                }
100
84