public void LiftSynchronizerReadsLift15VersionCorrectly()
        {
            // Setup
            using (var myfile = new TempFile(testLift15File))
            {
                // SUT
                var syncAdjunct = new LiftSynchronizerAdjunct(myfile.Path);

                // Verification
                Assert.AreEqual("LIFT0.15", syncAdjunct.BranchName, "BranchName should be 'LIFT0.15'");
            }
        }
		public void StartWorking(Dictionary<string, string> commandLineArgs)
		{
			// As per the API, -p will be the main FW data file.
			// REVIEW (RandyR): What if it is the DB4o file?
			// REVIEW (RandyR): What is sent if the user is a client of the DB4o server?
			// -p <$fwroot>\foo\foo.fwdata
			var pathToLiftProject = Utilities.LiftOffset(Path.GetDirectoryName(commandLineArgs["-p"]));

			using (var chorusSystem = Utilities.InitializeChorusSystem(pathToLiftProject, commandLineArgs["-u"], LiftFolder.AddLiftFileInfoToFolderConfiguration))
			{
				var newlyCreated = false;
				if (chorusSystem.Repository.Identifier == null)
				{
					// First do a commit, since the repo is brand new.
					var projectConfig = chorusSystem.ProjectFolderConfiguration;
					ProjectFolderConfiguration.EnsureCommonPatternsArePresent(projectConfig);
					projectConfig.IncludePatterns.Add("**.ChorusRescuedFile");

					chorusSystem.Repository.AddAndCheckinFiles(projectConfig.IncludePatterns, projectConfig.ExcludePatterns, "Initial commit");
					newlyCreated = true;
				}
				chorusSystem.EnsureAllNotesRepositoriesLoaded();

				// Do the Chorus business.
				using (var syncDlg = (SyncDialog)chorusSystem.WinForms.CreateSynchronizationDialog(SyncUIDialogBehaviors.Lazy, SyncUIFeatures.NormalRecommended | SyncUIFeatures.PlaySoundIfSuccessful))
				{
					var syncAdjunt = new LiftSynchronizerAdjunct(LiftUtilties.PathToFirstLiftFile(pathToLiftProject));
					syncDlg.SetSynchronizerAdjunct(syncAdjunt);

					// Chorus does it in this order:
					// Local Commit
					// Pull
					// Merge (Only if anything came in with the pull from other sources, and commit of merged results)
					// Push
					syncDlg.SyncOptions.DoPullFromOthers = true;
					syncDlg.SyncOptions.DoMergeWithOthers = true;
					syncDlg.SyncOptions.DoSendToOthers = true;
					syncDlg.Text = Resources.SendReceiveView_DialogTitleLift;
					syncDlg.StartPosition = FormStartPosition.CenterScreen;
					syncDlg.BringToFront();
					var dlgResult = syncDlg.ShowDialog();

					if (dlgResult == DialogResult.OK)
					{
						if (newlyCreated && (!syncDlg.SyncResult.Succeeded || syncDlg.SyncResult.ErrorEncountered != null))
						{
							_gotChanges = false;
							// Wipe out new repo, since something bad happened in S/R,
							// and we don't want to leave the user in a sad state (cf. LT-14751).
							Directory.Delete(pathToLiftProject, true);
						}
						else if (syncDlg.SyncResult.DidGetChangesFromOthers || syncAdjunt.WasUpdated)
						{
							_gotChanges = true;
						}
					}
					else
					{
						// User probably bailed out of S/R using the "X" to close the dlg.
						if (newlyCreated)
						{
							_gotChanges = false;
							// Wipe out new repo, since the user cancelled without even trying the S/R,
							// and we don't want to leave the user in a sad state (cf. LT-14751).
							Directory.Delete(pathToLiftProject, true);
						}
					}
				}
			}
		}