public override void ExecuteBuild()
    {
        var Changelist = ParseParamValue("cl", "");

        if (!String.IsNullOrEmpty(Changelist))
        {
            Changelist = "@" + Changelist;
        }

        var AlwaysSync = new List <string>(new string[]
        {
            "Engine/Binaries/ThirdParty",
            "Engine/Content",
        }
                                           );
        var AdditionalAlwaysSyncPaths = ParseParamValue("sync");

        if (!String.IsNullOrEmpty(AdditionalAlwaysSyncPaths))
        {
            var AdditionalPaths = AdditionalAlwaysSyncPaths.Split(new string[] { "+" }, StringSplitOptions.RemoveEmptyEntries);
            AlwaysSync.AddRange(AdditionalPaths);
        }

        var ExclusionList = new HashSet <string>(new string[]
        {
            "Binaries",
            "Content",
            "Documentation",
            "DataTables",
        },
                                                 StringComparer.InvariantCultureIgnoreCase
                                                 );
        var AdditionalExlusionPaths = ParseParamValue("exclude");

        if (!String.IsNullOrEmpty(AdditionalExlusionPaths))
        {
            var AdditionalPaths = AdditionalExlusionPaths.Split(new string[] { "+" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var Dir in AdditionalPaths)
            {
                ExclusionList.Add(Dir);
            }
        }

        var DepotPath = ParseParamValue("branch", "//depot/UE4/");

        foreach (var AlwaysSyncSubFolder in AlwaysSync)
        {
            var SyncCmdLine = CombinePaths(PathSeparator.Depot, DepotPath, AlwaysSyncSubFolder, "...") + Changelist;
            LogInformation("Syncing {0}", SyncCmdLine, Changelist);
            SafeSync(SyncCmdLine);
        }

        DepotPath = CombinePaths(PathSeparator.Depot, DepotPath, "*");
        var ProjectDirectories = P4.Dirs(String.Format("-D {0}", DepotPath));

        foreach (var ProjectDir in ProjectDirectories)
        {
            var ProjectDirPath = CombinePaths(PathSeparator.Depot, ProjectDir, "*");
            var SubDirectories = P4.Dirs(ProjectDirPath);
            foreach (var SubDir in SubDirectories)
            {
                var SubDirName = Path.GetFileNameWithoutExtension(GetDirectoryName(SubDir));
                if (!ExclusionList.Contains(SubDirName))
                {
                    var SyncCmdLine = CombinePaths(PathSeparator.Depot, SubDir, "...") + Changelist;
                    LogInformation("Syncing {0}", SyncCmdLine);
                    SafeSync(SyncCmdLine);
                }
            }
        }
    }