Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make option --askpass compatible with sudo version 1.8.7 or older. #3885

Merged
merged 11 commits into from Oct 31, 2018
2 changes: 1 addition & 1 deletion conans/client/tools/system_pm.py
Expand Up @@ -25,7 +25,7 @@ def _get_sudo_str():
return ""

if hasattr(sys.stdout, "isatty") and not sys.stdout.isatty():
return "sudo --askpass "
return "sudo -A "
else:
return "sudo "

Expand Down
44 changes: 22 additions & 22 deletions conans/test/util/tools_test.py
Expand Up @@ -56,7 +56,7 @@ def test_sudo_tty(self):

with tools.environment_append({"CONAN_SYSREQUIRES_SUDO": "True"}):
self.assertTrue(SystemPackageTool._is_sudo_enabled())
self.assertEqual(SystemPackageTool._get_sudo_str(), "sudo --askpass ")
self.assertEqual(SystemPackageTool._get_sudo_str(), "sudo -A ")

with mock.patch("sys.stdout.isatty", return_value=True):
self.assertEqual(SystemPackageTool._get_sudo_str(), "sudo ")
Expand Down Expand Up @@ -104,7 +104,7 @@ def __call__(runner_self, command, output, win_bash=False, subsystem=None):
def _run_add_repository_test(repository, gpg_key, sudo, isatty, update):
sudo_cmd = ""
if sudo:
sudo_cmd = "sudo " if isatty else "sudo --askpass "
sudo_cmd = "sudo " if isatty else "sudo -A "

runner = RunnerOrderedMock()
runner.commands.append(("{}apt-add-repository {}".format(sudo_cmd, repository), 0))
Expand Down Expand Up @@ -150,46 +150,46 @@ def system_package_tool_test(self):
os_info.linux_distro = "debian"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass apt-get update")
self.assertEquals(runner.command_called, "sudo -A apt-get update")

os_info.linux_distro = "ubuntu"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass apt-get update")
self.assertEquals(runner.command_called, "sudo -A apt-get update")

os_info.linux_distro = "knoppix"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass apt-get update")
self.assertEquals(runner.command_called, "sudo -A apt-get update")

os_info.linux_distro = "neon"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass apt-get update")
self.assertEquals(runner.command_called, "sudo -A apt-get update")

os_info.linux_distro = "fedora"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass yum update -y")
self.assertEquals(runner.command_called, "sudo -A yum update -y")

os_info.linux_distro = "opensuse"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass zypper --non-interactive ref")
self.assertEquals(runner.command_called, "sudo -A zypper --non-interactive ref")

os_info.linux_distro = "redhat"
spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.install("a_package", force=False)
self.assertEquals(runner.command_called, "rpm -q a_package")
spt.install("a_package", force=True)
self.assertEquals(runner.command_called, "sudo --askpass yum install -y a_package")
self.assertEquals(runner.command_called, "sudo -A yum install -y a_package")

os_info.linux_distro = "debian"
spt = SystemPackageTool(runner=runner, os_info=os_info)
with self.assertRaises(ConanException):
runner.return_ok = False
spt.install("a_package")
self.assertEquals(runner.command_called, "sudo --askpass apt-get install -y --no-install-recommends a_package")
self.assertEquals(runner.command_called, "sudo -A apt-get install -y --no-install-recommends a_package")

runner.return_ok = True
spt.install("a_package", force=False)
Expand All @@ -210,9 +210,9 @@ def system_package_tool_test(self):

spt = SystemPackageTool(runner=runner, os_info=os_info)
spt.update()
self.assertEquals(runner.command_called, "sudo --askpass pkg update")
self.assertEquals(runner.command_called, "sudo -A pkg update")
spt.install("a_package", force=True)
self.assertEquals(runner.command_called, "sudo --askpass pkg install -y a_package")
self.assertEquals(runner.command_called, "sudo -A pkg install -y a_package")
spt.install("a_package", force=False)
self.assertEquals(runner.command_called, "pkg info a_package")

Expand Down Expand Up @@ -312,13 +312,13 @@ def __call__(self, command, output): # @UnusedVariable
spt = SystemPackageTool(runner=runner, tool=AptTool())
spt.install(packages)
self.assertEquals(2, runner.calls)
runner = RunnerMultipleMock(["sudo --askpass apt-get update",
"sudo --askpass apt-get install -y --no-install-recommends yet_another_package"])
runner = RunnerMultipleMock(["sudo -A apt-get update",
"sudo -A apt-get install -y --no-install-recommends yet_another_package"])
spt = SystemPackageTool(runner=runner, tool=AptTool())
spt.install(packages)
self.assertEquals(7, runner.calls)

runner = RunnerMultipleMock(["sudo --askpass apt-get update"])
runner = RunnerMultipleMock(["sudo -A apt-get update"])
spt = SystemPackageTool(runner=runner, tool=AptTool())
with self.assertRaises(ConanException):
spt.install(packages)
Expand Down Expand Up @@ -360,7 +360,7 @@ def __call__(self, command, *args, **kwargs): # @UnusedVariable
"CONAN_SYSREQUIRES_SUDO": "True"
}):
packages = ["verify_package", "verify_another_package", "verify_yet_another_package"]
runner = RunnerMultipleMock(["sudo --askpass apt-get update"])
runner = RunnerMultipleMock(["sudo -A apt-get update"])
spt = SystemPackageTool(runner=runner, tool=AptTool())
with self.assertRaises(ConanException) as exc:
spt.install(packages)
Expand All @@ -375,7 +375,7 @@ def __call__(self, command, *args, **kwargs): # @UnusedVariable
"CONAN_SYSREQUIRES_SUDO": "True"
}):
packages = ["disabled_package", "disabled_another_package", "disabled_yet_another_package"]
runner = RunnerMultipleMock(["sudo --askpass apt-get update"])
runner = RunnerMultipleMock(["sudo -A apt-get update"])
spt = SystemPackageTool(runner=runner, tool=AptTool())
spt.install(packages)
self.assertIn('\n'.join(packages), tools.system_pm._global_output)
Expand All @@ -386,7 +386,7 @@ def __call__(self, command, *args, **kwargs): # @UnusedVariable
"CONAN_SYSREQUIRES_MODE": "EnAbLeD",
"CONAN_SYSREQUIRES_SUDO": "True"
}):
runner = RunnerMultipleMock(["sudo --askpass apt-get update"])
runner = RunnerMultipleMock(["sudo -A apt-get update"])
spt = SystemPackageTool(runner=runner, tool=AptTool())
with self.assertRaises(ConanException) as exc:
spt.install(packages)
Expand Down Expand Up @@ -417,13 +417,13 @@ def get_linux_error_message():
os_info = OSInfo()
update_command = None
if os_info.with_apt:
update_command = "sudo --askpass apt-get update"
update_command = "sudo -A apt-get update"
elif os_info.with_yum:
update_command = "sudo --askpass yum update -y"
update_command = "sudo -A yum update -y"
elif os_info.with_zypper:
update_command = "sudo --askpass zypper --non-interactive ref"
update_command = "sudo -A zypper --non-interactive ref"
elif os_info.with_pacman:
update_command = "sudo --askpass pacman -Syyu --noconfirm"
update_command = "sudo -A pacman -Syyu --noconfirm"

return "Command '{0}' failed".format(update_command) if update_command is not None else None

Expand Down