Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions src/shared/Core/Authentication/AuthenticationBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ protected void ThrowIfUserInteractionDisabled()
{
if (!Context.Settings.IsInteractionAllowed)
{
if (Context.Settings.SilentExit)
{
Environment.Exit(0);
}

string envName = Constants.EnvironmentVariables.GcmInteractive;
string cfgName = string.Format("{0}.{1}",
Constants.GitConfiguration.Credential.SectionName,
Expand All @@ -104,6 +109,11 @@ protected void ThrowIfGuiPromptsDisabled()
{
if (!Context.Settings.IsGuiPromptsEnabled)
{
if (Context.Settings.SilentExit)
{
Environment.Exit(0);
}

Context.Trace.WriteLine($"{Constants.EnvironmentVariables.GitTerminalPrompts} is 0; GUI prompts have been disabled.");
throw new Trace2InvalidOperationException(Context.Trace2, "Cannot show prompt because GUI prompts have been disabled.");
}
Expand All @@ -113,6 +123,11 @@ protected void ThrowIfTerminalPromptsDisabled()
{
if (!Context.Settings.IsTerminalPromptsEnabled)
{
if (Context.Settings.SilentExit)
{
Environment.Exit(0);
}

Context.Trace.WriteLine($"{Constants.EnvironmentVariables.GitTerminalPrompts} is 0; terminal prompts have been disabled.");
throw new Trace2InvalidOperationException(Context.Trace2, "Cannot prompt because terminal prompts have been disabled.");
}
Expand All @@ -122,6 +137,11 @@ protected void ThrowIfWindowCancelled(WindowViewModel viewModel)
{
if (!viewModel.WindowResult)
{
if (Context.Settings.SilentExit)
{
Environment.Exit(0);
}

throw new Exception("User cancelled dialog.");
}
}
Expand Down
8 changes: 8 additions & 0 deletions src/shared/Core/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ public interface ISettings : IDisposable
/// </remarks>
bool IsInteractionAllowed { get; }

/// <summary>
/// Whether to exit silently with status 0 in cases such interaction not allowed and terminal prompts disabled.
/// </summary>
bool SilentExit { get; }

/// <summary>
/// Get if tracing has been enabled, returning trace setting value in the out parameter.
/// </summary>
Expand Down Expand Up @@ -558,6 +563,9 @@ public bool IsInteractionAllowed
}
}

public bool SilentExit =>
!TryGetSetting("GCM_SILENT_EXIT", GitCredCfg.SectionName, "silentExit", out string value) || value.ToBooleanyOrDefault(false);

public bool GetTracingEnabled(out string value) =>
TryGetSetting(KnownEnvars.GcmTrace,
KnownGitCfg.Credential.SectionName,
Expand Down
2 changes: 2 additions & 0 deletions src/shared/TestInfrastructure/Objects/TestSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public class TestSettings : ISettings

public bool IsInteractionAllowed { get; set; } = true;

public bool SilentExit {get; } = false;

public string Trace { get; set; }

public bool IsSecretTracingEnabled { get; set; }
Expand Down