D1683: sshpeer: allow for additional environment passing to ssh exe

2017-12-15 Thread ikostia (Kostia Balytskyi)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG47921dafb44b: sshpeer: allow for additional environment 
passing to ssh exe (authored by ikostia, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D1683?vs=4429=4519

REVISION DETAIL
  https://phab.mercurial-scm.org/D1683

AFFECTED FILES
  mercurial/sshpeer.py
  tests/test-ssh.t

CHANGE DETAILS

diff --git a/tests/test-ssh.t b/tests/test-ssh.t
--- a/tests/test-ssh.t
+++ b/tests/test-ssh.t
@@ -596,3 +596,21 @@
   abort: no suitable response from remote hg!
   (Please see http://company/internalwiki/ssh.html)
   [255]
+
+test that custom environment is passed down to ssh executable
+  $ cat >>dumpenv < #! /bin/sh
+  > echo \$VAR >&2
+  > EOF
+  $ chmod +x dumpenv
+  $ hg pull ssh://something --config ui.ssh="./dumpenv"
+  pulling from ssh://something/
+  remote: 
+  abort: no suitable response from remote hg!
+  [255]
+  $ hg pull ssh://something --config ui.ssh="./dumpenv" --config sshenv.VAR=17
+  pulling from ssh://something/
+  remote: 17
+  abort: no suitable response from remote hg!
+  [255]
+
diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py
--- a/mercurial/sshpeer.py
+++ b/mercurial/sshpeer.py
@@ -136,19 +136,21 @@
 
 sshcmd = self.ui.config("ui", "ssh")
 remotecmd = self.ui.config("ui", "remotecmd")
+sshaddenv = dict(self.ui.configitems("sshenv"))
+sshenv = util.shellenviron(sshaddenv)
 
 args = util.sshargs(sshcmd, self._host, self._user, self._port)
 
 if create:
 cmd = '%s %s %s' % (sshcmd, args,
 util.shellquote("%s init %s" %
 (_serverquote(remotecmd), _serverquote(self._path
 ui.debug('running %s\n' % cmd)
-res = ui.system(cmd, blockedtag='sshpeer')
+res = ui.system(cmd, blockedtag='sshpeer', environ=sshenv)
 if res != 0:
 self._abort(error.RepoError(_("could not create remote repo")))
 
-self._validaterepo(sshcmd, args, remotecmd)
+self._validaterepo(sshcmd, args, remotecmd, sshenv)
 
 # Begin of _basepeer interface.
 
@@ -180,7 +182,7 @@
 
 # End of _basewirecommands interface.
 
-def _validaterepo(self, sshcmd, args, remotecmd):
+def _validaterepo(self, sshcmd, args, remotecmd, sshenv=None):
 # cleanup up previous run
 self._cleanup()
 
@@ -196,7 +198,7 @@
 # no buffer allow the use of 'select'
 # feel free to remove buffering and select usage when we ultimately
 # move to threading.
-sub = util.popen4(cmd, bufsize=0)
+sub = util.popen4(cmd, bufsize=0, env=sshenv)
 self._pipeo, self._pipei, self._pipee, self._subprocess = sub
 
 self._pipei = util.bufferedinputpipe(self._pipei)



To: ikostia, #hg-reviewers, mbthomas, durin42
Cc: durin42, mbthomas, mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D1683: sshpeer: allow for additional environment passing to ssh exe

2017-12-15 Thread durin42 (Augie Fackler)
durin42 accepted this revision.
durin42 added a comment.
This revision is now accepted and ready to land.


  Ugh. But clearly needed.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D1683

To: ikostia, #hg-reviewers, mbthomas, durin42
Cc: durin42, mbthomas, mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D1683: sshpeer: allow for additional environment passing to ssh exe

2017-12-14 Thread mbthomas (Mark Thomas)
mbthomas accepted this revision.
mbthomas added a comment.


  Looks reasonable to me.  This could also be achieved by making SSH a script 
which sets the environment up and invokes the real SSH, but that's clumsy, 
whereas this allows use of config to set the env vars.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1683

To: ikostia, #hg-reviewers, mbthomas
Cc: mbthomas, mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D1683: sshpeer: allow for additional environment passing to ssh exe

2017-12-14 Thread ikostia (Kostia Balytskyi)
ikostia created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  We already have the ability to customize the ssh command line arguments, let's
  add the ability to customize its environment as well.
  
  Example use-case is ssh.exe from Git on Windows. If `HOME` enviroment variable
  is present and has some non-empty value, ssh.exe will try to access that
  location for some stuff (for example, it seems for resolving `~` in
  `.ssh/config`). Git for Windows seems to sometimess set this variable to the
  value of `/home/username` which probably works under Git Bash, but does not
  work in a native `cmd.exe` or `powershell`. Whatever the root cause, setting
  `HOME` to be an empty string heals things. Therefore, some distributors
  might want to set `sshenv.HOME=` in the configuration (seems less intrusive
  that forcing everyone to tweak their env).

TEST PLAN
  - rt

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D1683

AFFECTED FILES
  mercurial/sshpeer.py
  tests/test-ssh.t

CHANGE DETAILS

diff --git a/tests/test-ssh.t b/tests/test-ssh.t
--- a/tests/test-ssh.t
+++ b/tests/test-ssh.t
@@ -596,3 +596,21 @@
   abort: no suitable response from remote hg!
   (Please see http://company/internalwiki/ssh.html)
   [255]
+
+test that custom environment is passed down to ssh executable
+  $ cat >>dumpenv < #! /bin/sh
+  > echo \$VAR >&2
+  > EOF
+  $ chmod +x dumpenv
+  $ hg pull ssh://something --config ui.ssh="./dumpenv"
+  pulling from ssh://something/
+  remote: 
+  abort: no suitable response from remote hg!
+  [255]
+  $ hg pull ssh://something --config ui.ssh="./dumpenv" --config sshenv.VAR=17
+  pulling from ssh://something/
+  remote: 17
+  abort: no suitable response from remote hg!
+  [255]
+
diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py
--- a/mercurial/sshpeer.py
+++ b/mercurial/sshpeer.py
@@ -136,19 +136,21 @@
 
 sshcmd = self.ui.config("ui", "ssh")
 remotecmd = self.ui.config("ui", "remotecmd")
+sshaddenv = dict(self.ui.configitems("sshenv"))
+sshenv = util.shellenviron(sshaddenv)
 
 args = util.sshargs(sshcmd, self._host, self._user, self._port)
 
 if create:
 cmd = '%s %s %s' % (sshcmd, args,
 util.shellquote("%s init %s" %
 (_serverquote(remotecmd), _serverquote(self._path
 ui.debug('running %s\n' % cmd)
-res = ui.system(cmd, blockedtag='sshpeer')
+res = ui.system(cmd, blockedtag='sshpeer', environ=sshenv)
 if res != 0:
 self._abort(error.RepoError(_("could not create remote repo")))
 
-self._validaterepo(sshcmd, args, remotecmd)
+self._validaterepo(sshcmd, args, remotecmd, sshenv)
 
 # Begin of _basepeer interface.
 
@@ -180,7 +182,7 @@
 
 # End of _basewirecommands interface.
 
-def _validaterepo(self, sshcmd, args, remotecmd):
+def _validaterepo(self, sshcmd, args, remotecmd, sshenv=None):
 # cleanup up previous run
 self._cleanup()
 
@@ -196,7 +198,7 @@
 # no buffer allow the use of 'select'
 # feel free to remove buffering and select usage when we ultimately
 # move to threading.
-sub = util.popen4(cmd, bufsize=0)
+sub = util.popen4(cmd, bufsize=0, env=sshenv)
 self._pipeo, self._pipei, self._pipee, self._subprocess = sub
 
 self._pipei = util.bufferedinputpipe(self._pipei)



To: ikostia, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel