123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- using System.Collections.Generic;
-
- namespace Unity.PlasticSCM.Editor.Hub
- {
- internal static class ParseArguments
- {
- internal class Command
- {
- internal enum Operation
- {
- None,
- DownloadRepository,
- CreateWorkspace
- }
-
- internal readonly string ProjectPath;
- internal readonly string WorkspacePath;
- internal readonly string Organization;
- internal readonly string Repository;
- internal readonly Operation OperationType;
-
- internal Command(
- string projectPath,
- string workspacePath,
- string organization,
- string repository,
- Operation operationType)
- {
- ProjectPath = projectPath;
- WorkspacePath = workspacePath;
- Organization = organization;
- Repository = repository;
- OperationType = operationType;
- }
-
- internal bool IsValid()
- {
- return !string.IsNullOrEmpty(ProjectPath)
- && !string.IsNullOrEmpty(Organization)
- && !string.IsNullOrEmpty(Repository)
- && OperationType != Operation.None;
- }
-
- internal bool HasWorkspacePath()
- {
- return !string.IsNullOrEmpty(WorkspacePath);
- }
- }
-
- internal static Command GetCommand(Dictionary<string, string> args)
- {
- return new Command(
- GetProjectPath(args),
- GetWorkspacePath(args),
- GetOrganization(args),
- GetRepository(args),
- GetOperation(args));
- }
-
- internal static string GetProjectPath(Dictionary<string, string> args)
- {
- string data;
-
- if (args.TryGetValue(CREATE_PROJECT, out data))
- return data;
-
- if (args.TryGetValue(OPEN_PROJECT, out data))
- return data;
-
- return null;
- }
-
- internal static string GetOrganization(Dictionary<string, string> args)
- {
- string data;
-
- if (args.TryGetValue(UVCSArguments.ORGANIZATION_ARG, out data))
- return data;
-
- // -cloudOrganization 151d73c7-38cb-4eec-b11e-34764e707226-{plastic-org-name}
- if (args.TryGetValue(CloudArguments.ORGANIZATION_ARG, out data))
- return GetOrganizationNameFromData(
- data, CloudArguments.PLASTIC_ORG_PREFIX_VALUE);
-
- return null;
- }
-
- internal static string GetRepository(Dictionary<string, string> args)
- {
- string data;
-
- if (args.TryGetValue(UVCSArguments.REPOSITORY_ARG, out data))
- return data;
-
- if (args.TryGetValue(CloudArguments.PROJECT_ARG, out data))
- return data;
-
- return null;
- }
-
- internal static string GetWorkspacePath(Dictionary<string, string> args)
- {
- string data;
-
- if (args.TryGetValue(UVCSArguments.WORKSPACE_PATH_ARG, out data))
- return data;
-
- return null;
- }
-
- static Command.Operation GetOperation(Dictionary<string, string> args)
- {
- if (IsCreateWorkspaceCommand(args))
- return Command.Operation.CreateWorkspace;
-
- if (IsDownloadRepositoryCommand(args))
- return Command.Operation.DownloadRepository;
-
- return Command.Operation.None;
- }
-
- static string GetOrganizationNameFromData(string data, string plasticOrgPrefix)
- {
- if (data == null)
- return null;
-
- if (!data.StartsWith(plasticOrgPrefix))
- return null;
-
- if (data.Length <= plasticOrgPrefix.Length)
- return null;
-
- return data.Substring(plasticOrgPrefix.Length);
- }
-
- static bool IsCreateWorkspaceCommand(Dictionary<string, string> args)
- {
- // Connect UVCS to new project or existing project commands:
- // -createProject/-projectPath {project_path}
- // -uvcsRepository {plastic_repo}
- // -uvcsOrganization {plastic_org}
- // -uvcsCreateWorkspace
-
- if (!args.ContainsKey(CREATE_PROJECT) &&
- !args.ContainsKey(OPEN_PROJECT))
- return false;
-
- return args.ContainsKey(UVCSArguments.ORGANIZATION_ARG)
- && args.ContainsKey(UVCSArguments.REPOSITORY_ARG)
- && args.ContainsKey(UVCSArguments.CREATE_WORKSPACE_FLAG);
- }
-
- static bool IsDownloadRepositoryCommand(Dictionary<string, string> args)
- {
- return IsDownloadRepositoryCommandUsingLegacyArgs(args)
- || IsDownloadRepositoryCommandUsingUVCSArgs(args);
- }
-
- static bool IsDownloadRepositoryCommandUsingLegacyArgs(Dictionary<string, string> args)
- {
- // Open remote project command using legacy args:
- // -createProject {project_path}
- // -cloudProject {plastic_repo}
- // -cloudOrganization 151d73c7-38cb-4eec-b11e-34764e707226-{plastic_org}
-
- if (!args.ContainsKey(CREATE_PROJECT) ||
- !args.ContainsKey(CloudArguments.PROJECT_ARG))
- return false;
-
- string data;
- if (!args.TryGetValue(CloudArguments.ORGANIZATION_ARG, out data))
- return false;
-
- return data != null && data.StartsWith(
- CloudArguments.PLASTIC_ORG_PREFIX_VALUE);
- }
-
- static bool IsDownloadRepositoryCommandUsingUVCSArgs(Dictionary<string, string> args)
- {
- // Open remote project command using UVCS args:
- // -createProject {project_path}
- // -uvcsRepository {plastic_repo}
- // -uvcsOrganization {plastic_org_name}
-
- if (!args.ContainsKey(CREATE_PROJECT))
- return false;
-
- return args.ContainsKey(UVCSArguments.ORGANIZATION_ARG)
- && args.ContainsKey(UVCSArguments.REPOSITORY_ARG);
- }
-
- static class UVCSArguments
- {
- internal const string ORGANIZATION_ARG = "-uvcsOrganization";
- internal const string REPOSITORY_ARG = "-uvcsRepository";
- internal const string WORKSPACE_PATH_ARG = "-uvcsWorkspacePath";
- internal const string CREATE_WORKSPACE_FLAG = "-uvcsCreateWorkspace";
- }
-
- static class CloudArguments
- {
- internal const string ORGANIZATION_ARG = "-cloudOrganization";
- internal const string PLASTIC_ORG_PREFIX_VALUE = "151d73c7-38cb-4eec-b11e-34764e707226-";
-
- internal const string PROJECT_ARG = "-cloudProject";
- }
-
- const string CREATE_PROJECT = "-createProject";
- const string OPEN_PROJECT = "-projectPath";
- }
- }
|