From b210392f91e9af23344388dd3347b24aed48ad4e Mon Sep 17 00:00:00 2001 From: Derrick Stolee Date: Wed, 29 Sep 2021 09:42:48 -0400 Subject: [PATCH] update-microsoft-git: interface with apt-get on Linux The 'git update-microsoft-git' builtin already interfaces with the git-for-windows/git upgrader on Windows and brew on macOS. Add an integration with apt-get on Ubuntu. The implementation attempts to call apt-get on all Linux machines, but it will report a failure when that is not available. The two commands are: 1. sudo apt-get update 2. sudo apt-get upgrade microsoft-git The first has an error message because that will likely only fail when apt-get does not exist on the path (or the user fails to supply the sudo password). The error condition for the second is passed to the user. It is possible that a user installs a package manually and not through a Microsoft feed, in which case the 'upgrade' command will fail with an error message. Extra newlines are added to provide whitespace between the Git messages and the dense output from apt-get. Signed-off-by: Derrick Stolee --- builtin/update-microsoft-git.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/builtin/update-microsoft-git.c b/builtin/update-microsoft-git.c index f943b808615fd7..66e4d8c25fab41 100644 --- a/builtin/update-microsoft-git.c +++ b/builtin/update-microsoft-git.c @@ -56,8 +56,26 @@ static int platform_specific_upgrade(void) #else static int platform_specific_upgrade(void) { - error(_("update-microsoft-git is not supported on this platform")); - return 1; + int res; + struct strvec args = STRVEC_INIT; + + printf("Updating apt-get with 'sudo apt-get update'\n\n"); + + strvec_pushl(&args, "sudo", "apt-get", "update", NULL); + res = run_command_v_opt(args.v, 0); + strvec_clear(&args); + + if (res) { + error(_("'sudo apt-get update' failed; is apt-get installed?")); + return 1; + } + + printf("\nUpgrading microsoft-git with 'sudo apt-get upgrade microsoft-git'\n\n"); + strvec_pushl(&args, "sudo", "apt-get", "upgrade", "microsoft-git", NULL); + res = run_command_v_opt(args.v, 0); + strvec_clear(&args); + + return res; } #endif