/// <summary> /// Syncs to given label. /// </summary> /// <param name="BranchPath">Current branch path.</param> /// <param name="LabelName">Label name to sync.</param> /// <param name="bArtistSync">Perform artist sync? (binaries to label, content to latest)</param> /// <param name="bPreview">Perform preview sync? (p4 sync -n)</param> private void SyncToLabel(string BranchPath, string LabelName, bool bArtistSync = true, bool bPreview = false) { var ProgramRevisionSpec = "@" + LabelName; List <string> SyncSteps; if (bArtistSync) { // Get latest CL number to sync cause @head can change during // different syncs and it could create integrity problems in // workspace. var ContentRevisionSpec = "@" + P4.GetLatestCLNumber().ToString(); var GameName = ParseGameNameFromLabel(LabelName); var ArtistSyncRulesPath = string.Format("{0}/{1}/Build/ArtistSyncRules.xml", BranchPath, string.IsNullOrWhiteSpace(GameName) ? "Samples" : GameName); var SyncRules = string.Join("\n", P4.P4Print(ArtistSyncRulesPath + "#head")); if (string.IsNullOrWhiteSpace(SyncRules)) { throw new AutomationException("The path {0} is not valid or file is empty.", ArtistSyncRulesPath); } SyncSteps = GenerateSyncSteps(SyncRules, ContentRevisionSpec, ProgramRevisionSpec); } else { SyncSteps = new List <string>(); SyncSteps.Add("/..." + ProgramRevisionSpec); // all files to label } foreach (var SyncStep in SyncSteps) { P4.Sync((bPreview ? "-n " : "") + BranchPath + SyncStep); } }