Exemple #1
0
        public static void ChangeFileType(P4ScmProvider scm, IList <string> paths)
        {
            FileAttributesDlg dlg = new FileAttributesDlg(scm);

            int changelistId = 0;

            IList <string> CheckedinFiles  = new List <string>();
            IList <string> CheckedoutFiles = new List <string>();

            IList <P4.FileMetaData> fmd = scm.GetFileMetaData(paths, null);

            P4.FileType ft = null;
            if (fmd != null)
            {
                foreach (P4.FileMetaData md in fmd)
                {
                    if (ft == null)
                    {
                        ft = md.Type;
                        if (md.Change > 0)
                        {
                            changelistId = md.Change;
                        }
                    }
                    else
                    {
                        // only keep the base type if all the same
                        if (ft.BaseType != md.Type.BaseType)
                        {
                            ft.BaseType = P4.BaseFileType.Unspecified;
                        }
                        // only keep fags that are the same
                        ft.Modifiers &= md.Type.Modifiers;
                        if (changelistId != md.Change)
                        {
                            changelistId = 0;
                        }
                    }
                    if (md.Action == P4.FileAction.None)
                    {
                        CheckedinFiles.Add(md.LocalPath.Path);
                    }
                    else
                    {
                        CheckedoutFiles.Add(md.LocalPath.Path);
                    }
                }
            }

            dlg.FileType           = ft;
            dlg.TargetChangelistId = changelistId;

            if (dlg.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            int targetChangelist = dlg.TargetChangelistId;

            P4.Options options = null;

            if (targetChangelist < 0)
            {
                // if selected, create a new numbered changelist with the files.

                P4.Changelist change = scm.Connection.Repository.NewChangelist();
                change.Description = "<P4VS Change FileType>";
                change.ClientId    = scm.Connection.Repository.Connection.Client.Name;
                change.OwnerName   = scm.Connection.Repository.Connection.UserName;
                change.Files       = null;           // new List<P4.FileMetaData>();

                P4.Changelist newChange = scm.Connection.Repository.CreateChangelist(change);

                targetChangelist = newChange.Id;
            }

            if (CheckedoutFiles.Count > 0)
            {
                options = new P4.ReopenCmdOptions(targetChangelist, dlg.FileType);
                if ((options.ContainsKey("-t")) && (string.IsNullOrEmpty(options["-t"]) == false))
                {
                    scm.ReopenFiles(P4.FileSpec.LocalSpecList(CheckedoutFiles), options);
                }
            }

            if (CheckedinFiles.Count > 0)
            {
                options = new P4.EditCmdOptions(P4.EditFilesCmdFlags.None, targetChangelist, dlg.FileType);

                if ((options.ContainsKey("-t")) && (string.IsNullOrEmpty(options["-t"]) == false))
                {
                    scm.EditFiles(P4.FileSpec.LocalSpecList(CheckedinFiles), options);
                }
            }
            scm.BroadcastChangelistUpdate(null, new P4ScmProvider.ChangelistUpdateArgs(targetChangelist,
                                                                                       P4ScmProvider.ChangelistUpdateArgs.UpdateType.Edit));
        }
Exemple #2
0
		public static void ShelveFiles(IList<P4.FileMetaData> files, P4.Changelist changelist, P4ScmProvider ScmProvider, bool ShowUi)
		{
			ShelveFileDlg dlg = new ShelveFileDlg(ScmProvider);
            bool shelvedFiles = changelist.Shelved;

			dlg.ChangelistId = changelist.Id;
			if ((files != null) && (files.Count > 0))
			{
			    List<P4.FileMetaData> linkedFiles = new List<P4.FileMetaData>();
				foreach (P4.FileMetaData fmd in files)
				{
					if (fmd.MovedFile != null)
					{
						P4.FileMetaData movedFmd = ScmProvider.GetFileMetaData(fmd.MovedFile.Path);
						linkedFiles.Add(movedFmd);
					}
                   
				}
                foreach (P4.FileMetaData fmd in linkedFiles)
                {

                    files.Add(fmd);
                }
			    dlg.SelectedFileList = files;

                
			}
			if (dlg.SelectedFileList.Count <= 0)
			{
				dlg.SelectAllCB.Checked = true;
			}

            if (!(shelvedFiles))
            {
                dlg.ClearChangelistTB.Checked = false;
                dlg.ClearChangelistTB.Enabled = false;
            }
			DialogResult res = DialogResult.OK;

			dlg.Description = Resources.ShelveFileDlg_FilesShelvedFromDefaultChangelist;
			if (changelist.Id > 0)
			{
				dlg.Description = string.Format(
					Resources.ShelveFileDlg_FilesShelvedFromNumberedChangelist, changelist.Id);
			}
			if (ShowUi)
			{
				res = dlg.ShowDialog();
			}
			if (res == DialogResult.Cancel)
			{
				return;
			}
			// If requested delete the existing shelved flags
			if ((changelist.Id > 0) && (dlg.ReplaceExistingShelvedFiles))
			{
				if (ScmProvider.ShelveFiles(changelist.Id, null, P4.ShelveFilesCmdFlags.Delete, true, null) == false)
				{
					return;
				}
			}
			P4.ShelveFilesCmdFlags flags = P4.ShelveFilesCmdFlags.Force;
			if (dlg.DontShelveUnchangedFiles)
			{
				flags |= ShelveFilesCmdFlags.LeaveUnchanged;
			}
			// Shelve the files
			if (ScmProvider.ShelveFiles(changelist.Id, dlg.Description, flags, dlg.SelectedFileList) == false)
			{
				return;
			}

			// If requested, revert the files after shelving

			if (dlg.RevertAfterShelving)
			{
				ScmProvider.RevertFiles(false, true, null, dlg.GetSelectedFiles().ToArray());
			}
			ScmProvider.BroadcastChangelistUpdate(null, new P4ScmProvider.ChangelistUpdateArgs(changelist.Id, P4ScmProvider.ChangelistUpdateArgs.UpdateType.ContentUpdate));
		}
Exemple #3
0
		public static void ShelveFiles(IList<string> files, P4ScmProvider Scm, bool ShowUi)
		{
			Dictionary<int, IDictionary<string, P4.FileMetaData>> changeLists =
                new Dictionary<int, IDictionary<string, P4.FileMetaData>>();

		    bool shelvedFiles = false;

			for (int idx = 0; idx < files.Count; idx++)
			{
				int changeListId = -1;

				if (files[idx] != null && (files[idx].EndsWith("...") || files[idx].EndsWith("*")))
				{
					List<P4.FileSpec> fileSpecs = new List<P4.FileSpec>();
					fileSpecs.Add(P4.FileSpec.DepotSpec(files[idx]));
                    IList<P4.File> opened = Scm.Connection.Repository.GetOpenedFiles(fileSpecs, null);
					IList<P4.FileSpec> openedSpecs = new List<P4.FileSpec>();
					foreach (P4.File f in opened)
					{
						if ((f != null) && (f.DepotPath != null))
						{
							openedSpecs.Add(P4.FileSpec.ClientSpec(f.ClientPath.Path));
						}
					}
					IList<P4.FileMetaData> metadata = Scm.ListFileMetaData(null, openedSpecs);
					foreach (P4.FileMetaData f in metadata)
					{
                        if (f != null)
                        {
                            changeListId = f.Change;

                            if (changeLists.ContainsKey(changeListId) == false)
                            {
                                changeLists.Add(changeListId, new Dictionary<string, P4.FileMetaData>());
                            }
                            if (changeLists[changeListId].ContainsKey(f.LocalPath.Path) == false)
                            {
                                changeLists[changeListId].Add(f.LocalPath.Path, f);
                            }
                            if (f.MovedFile != null)
                            {
                                P4.FileMetaData movedFmd = Scm.GetFileMetaData(f.MovedFile.Path);
                                if ((movedFmd != null) && (movedFmd.LocalPath != null) &&
                                    (changeLists[changeListId].ContainsKey(movedFmd.LocalPath.Path) == false))
                                {
                                    changeLists[changeListId].Add(movedFmd.LocalPath.Path, movedFmd);
                                }
                            }
                        }
					}

					continue;
				}
				P4.FileMetaData fmd = null;

				fmd = Scm.Fetch(files[idx]);
				if (fmd == null)
				{
					continue;
				}
				SourceControlStatus status = Scm.GetFileStatus(files[idx]);
				if (status == SourceControlStatus.scsCheckedIn)
				{
					continue;
				}

				changeListId = fmd.Change;

                // describe cl here and see if it is shelved
                if (changeListId > 0)
                {
                    Options opts = new Options();
                    opts["-S"] = null;
                    Changelist isChangeShelved = Scm.GetChangelist(changeListId, opts);

                    if (isChangeShelved.Shelved)
                    {
                        shelvedFiles = true;
                    }
                }

				if (changeLists.ContainsKey(changeListId) == false)
				{
					changeLists.Add(changeListId, new Dictionary<string, P4.FileMetaData>());
				}
				if (changeLists[changeListId].ContainsKey(fmd.LocalPath.Path) == false)
				{
					changeLists[changeListId].Add(fmd.LocalPath.Path, fmd);
				}
				if (fmd.MovedFile != null)
				{
					P4.FileMetaData movedFmd = Scm.GetFileMetaData(fmd.MovedFile.Path);
					if ((movedFmd != null) && (movedFmd.LocalPath != null) &&
						(changeLists[changeListId].ContainsKey(movedFmd.LocalPath.Path) == false))
					{
						changeLists[changeListId].Add(movedFmd.LocalPath.Path, movedFmd);
					}
				}
			}
			bool dlgShown = false;
			foreach (int changeListId in changeLists.Keys)
			{
				ShelveFileDlg dlg = new ShelveFileDlg(Scm);

                if (!(shelvedFiles))
                {
                    dlg.ClearChangelistTB.Checked = false;
                    dlg.ClearChangelistTB.Enabled = false;
                }
				dlg.ChangelistId = changeListId;
				dlg.SelectedFileList = changeLists[changeListId].Values.ToList();
                
				if (dlg.SelectedFileList.Count <= 0)
				{
					continue;
				}
				dlgShown = true;

				DialogResult res = DialogResult.OK;

                dlg.Description = Resources.ShelveFileDlg_FilesShelvedFromDefaultChangelist;
				if (changeListId > 0)
				{
					dlg.Description = string.Format(
						Resources.ShelveFileDlg_FilesShelvedFromNumberedChangelist, changeListId);
				}
				if (ShowUi)
				{
					res = dlg.ShowDialog();
				}
				if (res == DialogResult.Cancel)
				{
					return;
				}
				// If requested delete the existing shelved flags
				if ((changeListId > 0) && (dlg.ReplaceExistingShelvedFiles))
				{
					if (Scm.ShelveFiles(changeListId, null, P4.ShelveFilesCmdFlags.Delete, true, null) == false)
					{
						return;
					}
				}
				P4.ShelveFilesCmdFlags flags = P4.ShelveFilesCmdFlags.Force;
				if (dlg.DontShelveUnchangedFiles)
				{
					flags |= ShelveFilesCmdFlags.LeaveUnchanged;
				}
				// Shelve the files
				if (Scm.ShelveFiles(changeListId, dlg.Description, flags, dlg.SelectedFileList) == false)
				{
					return;
				}

				// If requested, revert the files after shelving

				if (dlg.RevertAfterShelving)
				{
					IList<string> selection = dlg.GetSelectedFiles();
					string[] selected = selection.ToArray();
					Scm.RevertFiles(false, true, null, selected);
				}
				Scm.BroadcastChangelistUpdate(null, new P4ScmProvider.ChangelistUpdateArgs(changeListId, P4ScmProvider.ChangelistUpdateArgs.UpdateType.ContentUpdate));
			}
			if (dlgShown == false)
			{
				MessageBox.Show(Resources.ShelveFileDlg_NoShelveableFilesWarning, Resources.PerforceSCM, MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
		}
Exemple #4
0
        public static void UnshelveFiles(P4ScmProvider scm,
                                         int changelistId, IList <P4.ShelvedFile> selectedShelvedFiles)
        {
            UnshelveFileDialog dlg = new UnshelveFileDialog(scm);

            dlg.ChangelistId = changelistId;

            string description = Resources.UnshelveFileDialog_DefaultChangelistDescription;

            dlg.Description = description;

            if (dlg.ShelvedFilesLV.Items.Count <= 0)
            {
                MessageBox.Show(Resources.UnshelveFileDialog_NoShelvedFilesWarning, Resources.P4VS,
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            dlg.SelectedFileList = selectedShelvedFiles;

            if (DialogResult.Cancel == dlg.ShowDialog())
            {
                return;
            }
            int targetChangeList = dlg.TargetChangelist;

            if (targetChangeList < 0)
            {
                description = dlg.Description;
            }

            IList <string> selectedFiles = dlg.GetSelectedFiles();
            bool           revertFirst   = (dlg.RevertBeforeUnshelving);

            P4.UnshelveFilesCmdFlags flags = P4.UnshelveFilesCmdFlags.None;
            if (dlg.RevertBeforeUnshelving)
            {
                scm.RevertFiles(false, true, null, selectedFiles.ToArray());
                revertFirst = true;
            }

            flags = P4.UnshelveFilesCmdFlags.Preview;
            bool success = scm.UnshelveFiles(changelistId, targetChangeList, description, flags, true, revertFirst, selectedFiles.ToArray());

            if (success == false)
            {
                UnshelveFiles(scm, changelistId, selectedShelvedFiles);
                return;
            }

            flags = P4.UnshelveFilesCmdFlags.None;
            if (dlg.OverwriteWritableFiles)
            {
                flags = P4.UnshelveFilesCmdFlags.Force;
            }

            if (dlg.DeleteAfterUnshelve)
            {
                // queue a message to delete the files later because if the unshelve changes some
                // key files like c++ filters, te project will be rleoaded and we might not return
                // to this operation
                DeleteShelvedFilesDelegate d = new DeleteShelvedFilesDelegate(DeleteShelvedFilesCallback);
                scm.SccService.UiDispatcher.BeginInvoke(d, scm, changelistId, selectedFiles.ToArray());
            }
            IList <P4.FileSpec> files = new List <P4.FileSpec>();

            foreach (string depotPath in selectedFiles)
            {
                P4.FileSpec file = new P4.FileSpec();
                file.DepotPath = new P4.DepotPath(depotPath);
                files.Add(file);
            }
            IList <P4.File> opened = scm.GetOpenedFiles(files, null);

            scm.UnshelveFiles(changelistId, targetChangeList, description, flags, true, revertFirst, selectedFiles.ToArray());

            // Check for opened files that might need a changelist refresh
            // if the unshelve moves the checked out file to a different
            // changelist. Disregard if no files are checked out that are
            // also being unshelved.
            if (opened != null)
            {
                int[] changesToRefresh = new int[opened.Count];
                if (opened != null)
                {
                    for (int i = 0; i < opened.Count; i++)
                    {
                        changesToRefresh[i] = opened[i].ChangeId;
                    }
                    changesToRefresh = changesToRefresh.Distinct().ToArray();
                }
                foreach (int changeId in changesToRefresh)
                {
                    scm.BroadcastChangelistUpdate(dlg,
                                                  new P4ScmProvider.ChangelistUpdateArgs(changeId, P4ScmProvider.ChangelistUpdateArgs.UpdateType.Submitted));
                }
            }
            return;
        }