Files
UnrealEngine/Engine/Source/Programs/UnrealGameSync/UnrealGameSyncCmd/Commands/StatusCommand.cs
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

53 lines
1.9 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using EpicGames.Perforce;
using UnrealGameSync;
using UnrealGameSyncCmd.Utils;
namespace UnrealGameSyncCmd.Commands
{
internal class StatusCommand : Command
{
public override async Task ExecuteAsync(CommandContext context)
{
ILogger logger = context.Logger;
bool update = context.Arguments.HasOption("-Update");
context.Arguments.CheckAllArgumentsUsed();
UserWorkspaceSettings settings = UserSettingsUtils.ReadRequiredUserWorkspaceSettings();
logger.LogInformation("User: {UserName}", settings.UserName);
logger.LogInformation("Server: {ServerAndPort}", settings.ServerAndPort);
logger.LogInformation("Project: {ClientProjectPath}", settings.ClientProjectPath);
using IPerforceConnection perforceClient = await PerforceConnectionUtils.ConnectAsync(settings, context.LoggerFactory);
WorkspaceStateWrapper state = await WorkspaceStateUtils.ReadWorkspaceState(perforceClient, settings, context.UserSettings, logger);
if (update)
{
ProjectInfo newProjectInfo = await ProjectInfo.CreateAsync(perforceClient, settings, CancellationToken.None);
state.Modify(x => x.UpdateCachedProjectInfo(newProjectInfo, settings.LastModifiedTimeUtc));
}
string streamOrBranchName = state.Current.StreamName ?? settings.BranchPath.TrimStart('/');
if (state.Current.LastSyncResultMessage == null)
{
logger.LogInformation("Not currently synced to {Stream}", streamOrBranchName);
}
else if (state.Current.LastSyncResult == WorkspaceUpdateResult.Success)
{
logger.LogInformation("Synced to {Stream} CL {Change}", streamOrBranchName, state.Current.LastSyncChangeNumber);
}
else
{
logger.LogWarning("Last sync to {Stream} CL {Change} failed: {Result}", streamOrBranchName, state.Current.LastSyncChangeNumber, state.Current.LastSyncResultMessage);
}
}
}
}