Exemplo n.º 1
0
        private bool BaseFilter(VersionControlStatus vcStatus)
        {
            using (PushStateUtility.Profiler("CommitWindow::BaseFilter"))
            {
                var metaStatus = vcStatus.MetaStatus();
                bool interresting = (vcStatus.fileStatus != VCFileStatus.None &&
                                    (vcStatus.fileStatus != VCFileStatus.Normal || (metaStatus != null && metaStatus.fileStatus != VCFileStatus.Normal))) ||
                                    vcStatus.lockStatus == VCLockStatus.LockedHere;

                if (!interresting) return false;
                ComposedString key = vcStatus.assetPath.TrimEnd(VCCAddMetaFiles.meta);
                return (assetPaths.Contains(key) || depedencyAssetPaths.Contains(key));
            }
        }
Exemplo n.º 2
0
        public static string GetLockStatusMessage(VersionControlStatus assetStatus)
        {
            string lockMessage = assetStatus.lockStatus.ToString();

            if (assetStatus.lockStatus == VCLockStatus.LockedOther)
            {
                lockMessage = Terminology.getlock + " by: " + assetStatus.owner;
            }
            if (assetStatus.lockStatus == VCLockStatus.LockedHere)
            {
                lockMessage = Terminology.getlock + " Here: " + assetStatus.owner;
            }
            if (assetStatus.lockStatus == VCLockStatus.NoLock)
            {
                if (ComposedString.IsNullOrEmpty(assetStatus.assetPath))
                {
                    lockMessage = "Not saved";
                }
                else if (assetStatus.fileStatus == VCFileStatus.Added)
                {
                    lockMessage = "Added";
                }
                else if (assetStatus.fileStatus == VCFileStatus.Replaced)
                {
                    lockMessage = "Replaced";
                }
                else
                {
                    lockMessage = VCUtility.ManagedByRepository(assetStatus) ? "Not " + Terminology.getlock : "Not on Version Control";
                }
            }
            if (assetStatus.LocalEditAllowed())
            {
                lockMessage = Terminology.allowLocalEdit;
                if ((assetStatus.lockStatus == VCLockStatus.LockedOther))
                {
                    lockMessage += " (" + Terminology.getlock + " By: " + assetStatus.owner + " )";
                }
            }
            if (assetStatus.fileStatus == VCFileStatus.Modified)
            {
                lockMessage += "*";
            }
            return(lockMessage);
        }
Exemplo n.º 3
0
        private bool BaseFilter(VersionControlStatus vcStatus)
        {
            using (PushStateUtility.Profiler("CommitWindow::BaseFilter"))
            {
                var  metaStatus  = vcStatus.MetaStatus();
                bool interesting = (vcStatus.fileStatus != VCFileStatus.None &&
                                    (vcStatus.fileStatus != VCFileStatus.Normal || (metaStatus != null && metaStatus.fileStatus != VCFileStatus.Normal))) ||
                                   vcStatus.lockStatus == VCLockStatus.LockedHere ||
                                   vcStatus.property == VCProperty.Modified;

                if (!interesting)
                {
                    return(false);
                }
                ComposedString key = vcStatus.assetPath.TrimEnd(VCCAddMetaFiles.meta);
                return(assetPaths.Contains(key) || depedencyAssetPaths.Contains(key));
            }
        }
Exemplo n.º 4
0
        private bool GUIFilter(VersionControlStatus vcStatus)
        {
            if (searchString.Length > 0)
            {
                return(vcStatus.assetPath.Compose().IndexOf(searchString, System.StringComparison.OrdinalIgnoreCase) >= 0);
            }

            var  metaStatus     = vcStatus.MetaStatus();
            bool projectSetting = vcStatus.assetPath.StartsWith("ProjectSettings/");
            bool unversioned    = vcStatus.fileStatus == VCFileStatus.Unversioned;
            bool meta           = metaStatus.fileStatus != VCFileStatus.Normal && vcStatus.fileStatus == VCFileStatus.Normal;
            bool modifiedNoLock = !projectSetting && vcStatus.ModifiedOrLocalEditAllowed();

            bool bHidden = false;

            if (!string.IsNullOrEmpty(VCSettings.strHiddenFilePaths))
            {
                string[] arPaths = VCSettings.strHiddenFilePaths.Split(';');
                for (int i = 0; i < arPaths.Length; i++)
                {
                    string strPathToCheck = arPaths[i].Trim(new[] { ' ' });
                    string strPath        = vcStatus.assetPath.Compose();
                    if (strPath == strPathToCheck ||
                        (strPathToCheck != "" && strPath.StartsWith(strPathToCheck) && strPath.Replace(strPathToCheck, "").StartsWith("/")))
                    {
                        bHidden = true;
                    }
                }
            }
            bool bExternal = (vcStatus.fileStatus == VCFileStatus.External);

            bool bFitsFilter =
                !((!m_bShowExternal && bExternal) || (!m_bShowUserHidden && bHidden) || (!showUnversioned && unversioned) || (!showMeta && meta) || (!showModifiedNoLock && modifiedNoLock) || (!showProjectSetting && projectSetting));

            return(bFitsFilter);
            //bool rest = !unversioned && !meta && !modifiedNoLock && !projectSetting;
            //return (showUnversioned && unversioned) || (showMeta && meta) || (showModifiedNoLock && modifiedNoLock) || (showProjectSetting && projectSetting) || rest;
        }
Exemplo n.º 5
0
        // This is a performance critical function
        private bool BaseFilter(VersionControlStatus vcStatus)
        {
            if (!vcStatus.Reflected)
            {
                return(false);
            }

            bool assetCriteria = vcStatus.fileStatus != VCFileStatus.None && (vcStatus.ModifiedOrLocalEditAllowed() || vcStatus.fileStatus != VCFileStatus.Normal || !ComposedString.IsNullOrEmpty(vcStatus.changelist)) && vcStatus.fileStatus != VCFileStatus.Ignored;

            if (assetCriteria)
            {
                return(true);
            }

            bool property = vcStatus.property == VCProperty.Modified || vcStatus.property == VCProperty.Conflicted;

            if (property)
            {
                return(true);
            }

            bool localLock = vcStatus.lockStatus == VCLockStatus.LockedHere;

            if (localLock)
            {
                return(true);
            }

            var  metaStatus   = vcStatus.MetaStatus();
            bool metaCriteria = metaStatus.fileStatus != VCFileStatus.Normal && (metaStatus.fileStatus != VCFileStatus.None || !ComposedString.IsNullOrEmpty(metaStatus.changelist)) && metaStatus.fileStatus != VCFileStatus.Ignored;

            if (metaCriteria)
            {
                return(true);
            }

            return(false);
        }
Exemplo n.º 6
0
        public static VersionControlStatus GetDominantStatus(IReadOnlyList <VersionControlStatus> statuses)
        {
            VersionControlStatus dominantStatus = new VersionControlStatus();

            foreach (var status in statuses)
            {
                if (status.lockStatus > dominantStatus.lockStatus)
                {
                    dominantStatus = status;
                    continue;
                }
                if (status.fileStatus > dominantStatus.fileStatus)
                {
                    dominantStatus = status;
                    continue;
                }
                if (status.allowLocalEdit && !dominantStatus.allowLocalEdit)
                {
                    dominantStatus = status;
                    continue;
                }
            }
            return(dominantStatus);
        }
Exemplo n.º 7
0
        private static VersionControlStatus ParseXMLNode(XmlNode entryIt, ComposedString assetPath)
        {
            var        versionControlStatus = new VersionControlStatus();
            XmlElement reposStatus          = entryIt["repos-status"];

            if (reposStatus != null)
            {
                if (reposStatus.Attributes["item"] != null && reposStatus.Attributes["item"].InnerText != "normal")
                {
                    versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
                }

                XmlElement lockStatus = reposStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null)
                    {
                        versionControlStatus.owner = lockStatus["owner"].InnerText;
                    }
                    versionControlStatus.lockStatus = VCLockStatus.LockedOther;
                }
            }

            XmlElement wcStatus = entryIt["wc-status"];

            if (wcStatus != null)
            {
                if (wcStatus.Attributes["item"] == null || !SVNToVersionControlStatusMap.fileStatusMap.TryGetValue(wcStatus.Attributes["item"].InnerText, out versionControlStatus.fileStatus))
                {
                    DebugLog.Log("SVN: Unknown file status: " + wcStatus.Attributes["item"].InnerText);
                }
                if (wcStatus.Attributes["props"] == null || !SVNToVersionControlStatusMap.propertyMap.TryGetValue(wcStatus.Attributes["props"].InnerText, out versionControlStatus.property))
                {
                    DebugLog.Log("SVN: Unknown property: " + wcStatus.Attributes["props"].InnerText);
                }

                if (wcStatus.Attributes["revision"] != null)
                {
                    versionControlStatus.revision = Int32.Parse(wcStatus.Attributes["revision"].InnerText);
                }
                if (wcStatus.Attributes["wc-locked"] != null && wcStatus.Attributes["wc-locked"].InnerText == "true")
                {
                    versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                }
                if (wcStatus.Attributes["tree-conflicted"] != null)
                {
                    versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;
                }

                /*if (wcStatus.Attributes["moved-from"] != null)
                 * {
                 *  var movedFrom = new ComposedString(wcStatus.Attributes["moved-from"].InnerText.Replace('\\', '/').Trim());
                 *  if (movedFrom.StartsWith(dot))
                 *  {
                 *      var lastIndex = assetPath.FindLastIndex(slash);
                 *      if (lastIndex != -1)
                 *      {
                 *          versionControlStatus.movedFrom = assetPath.GetSubset(0, lastIndex + 1) + movedFrom;
                 *      }
                 *  }
                 *  else
                 *  {
                 *      versionControlStatus.movedFrom = movedFrom;
                 *  }
                 *  Debug.Log($"Moved From {movedFrom} => {assetPath} : {versionControlStatus.movedFrom}");
                 * }*/

                XmlElement commit = wcStatus["commit"];
                if (commit != null)
                {
                    if (commit.Attributes["revision"] != null)
                    {
                        versionControlStatus.lastModifiedRevision = Int32.Parse(commit.Attributes["revision"].InnerText);
                    }
                    if (commit["author"] != null)
                    {
                        versionControlStatus.user = commit["author"].InnerText;
                    }
                }

                XmlElement lockStatus = wcStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null)
                    {
                        versionControlStatus.owner = lockStatus["owner"].InnerText;
                    }
                    if (lockStatus["token"] != null)
                    {
                        versionControlStatus.lockToken = lockStatus["token"].InnerText;
                    }
                    versionControlStatus.lockStatus = VCLockStatus.LockedHere;
                }
            }
            return(versionControlStatus);
        }
 private static GUIContent GetFileStatusContent(VersionControlStatus assetStatus)
 {
     if (assetStatus.treeConflictStatus != VCTreeConflictStatus.Normal)
         return new GUIContent(assetStatus.treeConflictStatus.ToString(), IconUtils.squareIcon.GetTexture(AssetStatusUtils.GetStatusColor(assetStatus, true)));
     return new GUIContent(AssetStatusUtils.GetStatusText(assetStatus), IconUtils.circleIcon.GetTexture(AssetStatusUtils.GetStatusColor(assetStatus, true)));
 }
Exemplo n.º 9
0
 public static bool ModifiedWithoutRights(this VersionControlStatus vcs)
 {
     return(ModifiedWithoutLock(vcs) && !LocalEditAllowed(vcs));
 }
Exemplo n.º 10
0
 public static bool LocalEditAllowed(this VersionControlStatus vcs)
 {
     return(vcs.allowLocalEdit);
 }
Exemplo n.º 11
0
        public bool GetStatus(StatusLevel statusLevel, string fstatArgs, string path)
        {
            //D.Log( "Processing " + path );

            string arguments = "status -aedf \"" + path + "\"";

            CommandLineOutput statusCommandLineOutput = null;

            if (statusLevel == StatusLevel.Local)
            {
                using (var p4StatusTask = P4Util.Instance.CreateP4CommandLine(arguments))
                {
                    statusCommandLineOutput = P4Util.Instance.ExecuteOperation(p4StatusTask);
                }
            }

            arguments = fstatArgs + " \"" + path + "\"";
            CommandLineOutput fstatCommandLineOutput = null;

            using (var p4FstatTask = P4Util.Instance.CreateP4CommandLine(arguments))
            {
                fstatCommandLineOutput = P4Util.Instance.ExecuteOperation(p4FstatTask);
            }

            if (statusCommandLineOutput == null || statusCommandLineOutput.Failed || string.IsNullOrEmpty(statusCommandLineOutput.OutputStr) || !active)
            {
                return(false);
            }
            if (fstatCommandLineOutput == null || fstatCommandLineOutput.Failed || string.IsNullOrEmpty(fstatCommandLineOutput.OutputStr) || !active)
            {
                return(false);
            }
            try
            {
                var statusDB = statusCommandLineOutput != null?P4StatusParser.P4ParseStatus(statusCommandLineOutput.OutputStr, P4Util.Instance.Vars.userName) : null;

                var fstatDB = P4StatusParser.P4ParseFstat(fstatCommandLineOutput.OutputStr, P4Util.Instance.Vars.workingDirectory);
                lock (statusDatabaseLockToken)
                {
                    if (statusDB != null)
                    {
                        foreach (var statusIt in statusDB)
                        {
                            var status = statusIt.Value;
                            status.reflectionLevel = statusLevel == StatusLevel.Remote ? VCReflectionLevel.Repository : VCReflectionLevel.Local;
                            statusDatabase[new ComposedString(statusIt.Key.Compose().Replace(P4Util.Instance.Vars.workingDirectory + "/", ""))] = status;
                        }
                    }

                    foreach (var statusIt in fstatDB)
                    {
                        VersionControlStatus status = null;
                        ComposedString       aPath  = new ComposedString(statusIt.Key.Compose().Replace(P4Util.Instance.Vars.workingDirectory + "/", ""));
                        statusDatabase.TryGetValue(aPath, out status);
                        if (status == null || status.reflectionLevel == VCReflectionLevel.Pending)
                        {
                            // no previous status or previous status is pending, so set it here
                            status = statusIt.Value;
                        }
                        else
                        {
                            // probably got this status from the "status -a -e -d" command, merge it with whatever we got back from fstat
                            if (status.fileStatus == VCFileStatus.Modified && statusIt.Value.remoteStatus == VCRemoteFileStatus.Modified)
                            {
                                // we have modified locally and file is out of date with server - mark as a conflict (might not be, but at
                                // least this will raise a flag with the user to make sure they get up to date before going any further)
                                status.fileStatus         = VCFileStatus.Conflicted;
                                status.treeConflictStatus = VCTreeConflictStatus.TreeConflict;
                            }
                        }
                        status.reflectionLevel = statusLevel == StatusLevel.Remote ? VCReflectionLevel.Repository : VCReflectionLevel.Local;
                        statusDatabase[aPath]  = status;
                    }
                }
                lock (requestQueueLockToken)
                {
                    if (statusDB != null)
                    {
                        foreach (var assetIt in statusDB.Keys)
                        {
                            if (statusLevel == StatusLevel.Remote)
                            {
                                remoteRequestQueue.Remove(assetIt.Compose());
                            }
                            localRequestQueue.Remove(assetIt.Compose());
                        }
                    }
                    foreach (var assetIt in fstatDB.Keys)
                    {
                        if (statusLevel == StatusLevel.Remote)
                        {
                            remoteRequestQueue.Remove(assetIt.Compose());
                        }
                        localRequestQueue.Remove(assetIt.Compose());
                    }
                }
                OnStatusCompleted();
            }
            catch (Exception e)
            {
                DebugLog.ThrowException(e);
                return(false);
            }

            return(true);
        }
Exemplo n.º 12
0
        private static VersionControlStatus PopulateFromFstatData(P4FStatData fileData)
        {
            var versionControlStatus = new VersionControlStatus();

            versionControlStatus.remoteStatus         = fileData.haveRev == fileData.headRev ? VCRemoteFileStatus.None : VCRemoteFileStatus.Modified;
            versionControlStatus.lastModifiedRevision = fileData.headRev == -1 ? 1 : fileData.headRev;
            versionControlStatus.revision             = fileData.haveRev == -1 ? 1 : fileData.haveRev;
            versionControlStatus.repositoryStatus     = VCRepositoryStatus.NotLocked; // this is only regarding the local copy
            versionControlStatus.user = "";                                           // supposed to be the last person who checked the file in - don't have that info in p4 fstat
            // we could do another p4 call, but that would not be performant for most cases
            versionControlStatus.changelist = fileData.change;

            if (fileData.otherLock)
            {
                versionControlStatus.lockStatus = VCLockStatus.LockedOther;
                versionControlStatus.owner      = fileData.otherOwner;
            }
            else if (fileData.ourLock)
            {
                versionControlStatus.lockStatus       = VCLockStatus.LockedHere;
                versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                versionControlStatus.owner            = fileData.actionOwner;
            }
            else
            {
                versionControlStatus.lockStatus = VCLockStatus.NoLock;
            }

            if (!String.IsNullOrEmpty(fileData.action))
            {
                switch (fileData.action)
                {
                case "add":
                    versionControlStatus.fileStatus = VCFileStatus.Added;
                    versionControlStatus.owner      = fileData.actionOwner;
                    break;

                case "edit":
                    // if we have it checked out and this is a "+l" type file, it must be locked
                    if (fileData.type.IndexOf("+l") != -1)
                    {
                        versionControlStatus.lockStatus       = VCLockStatus.LockedHere;
                        versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                    }
                    else if (versionControlStatus.lockStatus == VCLockStatus.NoLock)
                    {
                        versionControlStatus.allowLocalEdit = true;
                    }
                    versionControlStatus.owner = fileData.actionOwner;
                    break;

                case "delete":
                    versionControlStatus.fileStatus = VCFileStatus.Deleted;
                    versionControlStatus.owner      = fileData.actionOwner;
                    break;

                default:
                    D.LogError(String.Format("Unexpected action type: {0} for file {1} - status may be incorrect.", fileData.action, fileData.clientFile));
                    break;
                }
            }

            versionControlStatus.treeConflictStatus = VCTreeConflictStatus.Normal;

            //			if (wcStatus.Attributes["tree-conflicted"] != null) versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;


            return(versionControlStatus);
        }
Exemplo n.º 13
0
        private static VersionControlStatus ParseStatusLine(String line, String username)
        {
            // typical p4 status return lines:
            // "path\to\readme.txt - reconcile to add //depot/path/to/readme#1"
            // "path\to\readme.txt - reconcile to edit //depot/path/to/readme#2"
            // "path\to\readme.txt - reconcile to delete //depot/path/to/readme#2"
            var versionControlStatus = new VersionControlStatus();

            versionControlStatus.revision = versionControlStatus.lastModifiedRevision = Int32.Parse(line.Substring(line.LastIndexOf("#") + 1));
            versionControlStatus.repositoryStatus = VCRepositoryStatus.NotLocked;
            //			versionControlStatus.treeConflictStatus = VCTreeConflictStatus.Normal;
            versionControlStatus.user = "";
            if (line.Contains("reconcile to add"))
            {
                // file is unversioned
                versionControlStatus.remoteStatus = VCRemoteFileStatus.None;
                versionControlStatus.fileStatus = VCFileStatus.Unversioned;
                versionControlStatus.user = username;
            }
            else if (line.Contains("reconcile to edit"))
            {
                // file is edited locally, but not checked out - bad user!
                //				versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
                versionControlStatus.fileStatus = VCFileStatus.Modified;
                //				versionControlStatus.treeConflictStatus = VCTreeConflictStatus.TreeConflict;
            }
            else if (line.Contains("reconcile to delete"))
            {
                // file is versioned, but has been deleted locally
                //				versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
                versionControlStatus.fileStatus = VCFileStatus.Deleted;
            }
            /*
            XmlElement reposStatus = entryIt["repos-status"];
            if (reposStatus != null)
            {
                if (reposStatus.Attributes["item"] != null && reposStatus.Attributes["item"].InnerText != "normal") versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;

                XmlElement lockStatus = reposStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null) versionControlStatus.owner = lockStatus["owner"].InnerText;
                    versionControlStatus.lockStatus = VCLockStatus.LockedOther;
                }
            }

            XmlElement wcStatus = entryIt["wc-status"];
            if (wcStatus != null)
            {
                if (wcStatus.Attributes["item"] == null || !P4ToVersionControlStatusMap.fileStatusMap.TryGetValue(wcStatus.Attributes["item"].InnerText, out versionControlStatus.fileStatus)) D.Log("P4: Unknown file status: " + wcStatus.Attributes["item"].InnerText);
                if (wcStatus.Attributes["props"] == null || !P4ToVersionControlStatusMap.propertyMap.TryGetValue(wcStatus.Attributes["props"].InnerText, out versionControlStatus.property)) D.Log("P4: Unknown property: " + wcStatus.Attributes["props"].InnerText);

                if (wcStatus.Attributes["revision"] != null) versionControlStatus.revision = Int32.Parse(wcStatus.Attributes["revision"].InnerText);
                if (wcStatus.Attributes["wc-locked"] != null && wcStatus.Attributes["wc-locked"].InnerText == "true") versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                if (wcStatus.Attributes["tree-conflicted"] != null) versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;

                XmlElement commit = wcStatus["commit"];
                if (commit != null)
                {
                    if (commit.Attributes["revision"] != null) versionControlStatus.lastModifiedRevision = Int32.Parse(commit.Attributes["revision"].InnerText);
                    if (commit["author"] != null) versionControlStatus.user = commit["author"].InnerText;
                }

                XmlElement lockStatus = wcStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null) versionControlStatus.owner = lockStatus["owner"].InnerText;
                    if (lockStatus["token"] != null) versionControlStatus.lockToken = lockStatus["token"].InnerText;
                    versionControlStatus.lockStatus = VCLockStatus.LockedHere;
                }
            }
            */

            return versionControlStatus;
        }
Exemplo n.º 14
0
        private static VersionControlStatus PopulateFromFstatData(P4FStatData fileData)
        {
            var versionControlStatus = new VersionControlStatus();

            versionControlStatus.remoteStatus = fileData.haveRev == fileData.headRev ? VCRemoteFileStatus.None : VCRemoteFileStatus.Modified;
            versionControlStatus.lastModifiedRevision = fileData.headRev == -1 ? 1 : fileData.headRev;
            versionControlStatus.revision = fileData.haveRev == -1 ? 1 : fileData.haveRev;
            versionControlStatus.repositoryStatus = VCRepositoryStatus.NotLocked;	// this is only regarding the local copy
            versionControlStatus.user = "";	// supposed to be the last person who checked the file in - don't have that info in p4 fstat
            // we could do another p4 call, but that would not be performant for most cases
            versionControlStatus.changelist = fileData.change;

            if (fileData.otherLock)
            {
                versionControlStatus.lockStatus = VCLockStatus.LockedOther;
                versionControlStatus.owner = fileData.otherOwner;
            }
            else if (fileData.ourLock)
            {
                versionControlStatus.lockStatus = VCLockStatus.LockedHere;
                versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                versionControlStatus.owner = fileData.actionOwner;
            }
            else
            {
                versionControlStatus.lockStatus = VCLockStatus.NoLock;
            }

            if (!String.IsNullOrEmpty(fileData.action))
            {
                switch (fileData.action)
                {
                    case "add":
                        versionControlStatus.fileStatus = VCFileStatus.Added;
                        versionControlStatus.owner = fileData.actionOwner;
                        break;
                    case "edit":
                        // if we have it checked out and this is a "+l" type file, it must be locked
                        if (fileData.type.IndexOf("+l") != -1)
                        {
                            versionControlStatus.lockStatus = VCLockStatus.LockedHere;
                            versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                        }
                        else if (versionControlStatus.lockStatus == VCLockStatus.NoLock)
                        {
                            versionControlStatus.allowLocalEdit = true;
                        }
                        versionControlStatus.owner = fileData.actionOwner;
                        break;
                    case "delete":
                        versionControlStatus.fileStatus = VCFileStatus.Deleted;
                        versionControlStatus.owner = fileData.actionOwner;
                        break;
                    default:
                        D.LogError(String.Format("Unexpected action type: {0} for file {1} - status may be incorrect.", fileData.action, fileData.clientFile));
                        break;
                }
            }

            versionControlStatus.treeConflictStatus = VCTreeConflictStatus.Normal;

            //			if (wcStatus.Attributes["tree-conflicted"] != null) versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;

            return versionControlStatus;
        }
Exemplo n.º 15
0
 public static string GetStatusText(VersionControlStatus assetStatus)
 {
     if (assetStatus.reflectionLevel == VCReflectionLevel.Pending)
     {
         return("Pending");
     }
     if (assetStatus.fileStatus == VCFileStatus.Conflicted)
     {
         return("Conflicted");
     }
     if (assetStatus.fileStatus == VCFileStatus.Deleted)
     {
         return("Deleted");
     }
     if (assetStatus.lockStatus == VCLockStatus.LockedHere)
     {
         return(Terminology.getlock + (assetStatus.fileStatus == VCFileStatus.Modified?"*":""));
     }
     if (assetStatus.localOnly)
     {
         return("Local Only!");
     }
     if (assetStatus.LocalEditAllowed())
     {
         return(Terminology.allowLocalEdit + (assetStatus.fileStatus == VCFileStatus.Modified ? "*" : ""));
     }
     if (assetStatus.ModifiedWithoutLock())
     {
         return("Modified!");
     }
     if (assetStatus.lockStatus == VCLockStatus.LockedOther)
     {
         return(Terminology.lockedBy + "'" + assetStatus.owner + "'");
     }
     if (assetStatus.fileStatus == VCFileStatus.Modified)
     {
         return("Modified");
     }
     if (assetStatus.fileStatus == VCFileStatus.Unversioned)
     {
         return(Terminology.unversioned);
     }
     if (assetStatus.fileStatus == VCFileStatus.Added)
     {
         return("Added");
     }
     if (assetStatus.property == VCProperty.Modified)
     {
         return("[Merge Info]");
     }
     if (assetStatus.fileStatus == VCFileStatus.Replaced)
     {
         return("Replaced");
     }
     if (assetStatus.fileStatus == VCFileStatus.Ignored)
     {
         return("Ignored");
     }
     if (assetStatus.remoteStatus == VCRemoteFileStatus.Modified)
     {
         return("Modified on server");
     }
     if (assetStatus.fileStatus == VCFileStatus.Normal)
     {
         return("Normal");
     }
     return("-");
 }
Exemplo n.º 16
0
        public static Color GetStatusColor(VersionControlStatus assetStatus, bool includeLockStatus)
        {
            if (assetStatus.treeConflictStatus == VCTreeConflictStatus.TreeConflict)
            {
                return(conflictedColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Conflicted)
            {
                return(conflictedColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Missing)
            {
                return(missingColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Ignored)
            {
                return(ignoreColor);
            }
            if (assetStatus.LocalEditAllowed())
            {
                return(localEditColor);
            }
            if (assetStatus.ModifiedWithoutLock())
            {
                return(modifiedNoLockColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Deleted)
            {
                return(deletedColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Added)
            {
                return(addedColor);
            }

            if (includeLockStatus)
            {
                if (assetStatus.lockStatus == VCLockStatus.LockedHere)
                {
                    return(lockedColor);
                }
                if (assetStatus.lockStatus == VCLockStatus.LockedOther)
                {
                    return(lockedOtherColor);
                }
            }

            if (assetStatus.fileStatus == VCFileStatus.Modified)
            {
                return(modifiedColor);
            }
            if (assetStatus.reflectionLevel == VCReflectionLevel.Pending)
            {
                return(pendingColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Unversioned)
            {
                return(unversionedColor);
            }
            if (assetStatus.remoteStatus == VCRemoteFileStatus.Modified)
            {
                return(remoteModifiedColor);
            }
            if (assetStatus.fileStatus == VCFileStatus.Normal)
            {
                return(normalColor);
            }

            return(pink);
        }
Exemplo n.º 17
0
        private static VersionControlStatus ParseStatusLine(String line, String username)
        {
            // typical p4 status return lines:
            // "path\to\readme.txt - reconcile to add //depot/path/to/readme#1"
            // "path\to\readme.txt - reconcile to edit //depot/path/to/readme#2"
            // "path\to\readme.txt - reconcile to delete //depot/path/to/readme#2"
            var versionControlStatus = new VersionControlStatus();

            versionControlStatus.revision         = versionControlStatus.lastModifiedRevision = Int32.Parse(line.Substring(line.LastIndexOf("#") + 1));
            versionControlStatus.repositoryStatus = VCRepositoryStatus.NotLocked;
            //			versionControlStatus.treeConflictStatus = VCTreeConflictStatus.Normal;
            versionControlStatus.user = "";
            if (line.Contains("reconcile to add"))
            {
                // file is unversioned
                versionControlStatus.remoteStatus = VCRemoteFileStatus.None;
                versionControlStatus.fileStatus   = VCFileStatus.Unversioned;
                versionControlStatus.user         = username;
            }
            else if (line.Contains("reconcile to edit"))
            {
                // file is edited locally, but not checked out - bad user!
                //				versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
                versionControlStatus.fileStatus = VCFileStatus.Modified;
                //				versionControlStatus.treeConflictStatus = VCTreeConflictStatus.TreeConflict;
            }
            else if (line.Contains("reconcile to delete"))
            {
                // file is versioned, but has been deleted locally
                //				versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
                versionControlStatus.fileStatus = VCFileStatus.Deleted;
            }

            /*
             * XmlElement reposStatus = entryIt["repos-status"];
             * if (reposStatus != null)
             * {
             *  if (reposStatus.Attributes["item"] != null && reposStatus.Attributes["item"].InnerText != "normal") versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
             *
             *  XmlElement lockStatus = reposStatus["lock"];
             *  if (lockStatus != null)
             *  {
             *      if (lockStatus["owner"] != null) versionControlStatus.owner = lockStatus["owner"].InnerText;
             *      versionControlStatus.lockStatus = VCLockStatus.LockedOther;
             *  }
             * }
             *
             * XmlElement wcStatus = entryIt["wc-status"];
             * if (wcStatus != null)
             * {
             *  if (wcStatus.Attributes["item"] == null || !P4ToVersionControlStatusMap.fileStatusMap.TryGetValue(wcStatus.Attributes["item"].InnerText, out versionControlStatus.fileStatus)) D.Log("P4: Unknown file status: " + wcStatus.Attributes["item"].InnerText);
             *  if (wcStatus.Attributes["props"] == null || !P4ToVersionControlStatusMap.propertyMap.TryGetValue(wcStatus.Attributes["props"].InnerText, out versionControlStatus.property)) D.Log("P4: Unknown property: " + wcStatus.Attributes["props"].InnerText);
             *
             *  if (wcStatus.Attributes["revision"] != null) versionControlStatus.revision = Int32.Parse(wcStatus.Attributes["revision"].InnerText);
             *  if (wcStatus.Attributes["wc-locked"] != null && wcStatus.Attributes["wc-locked"].InnerText == "true") versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
             *  if (wcStatus.Attributes["tree-conflicted"] != null) versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;
             *
             *  XmlElement commit = wcStatus["commit"];
             *  if (commit != null)
             *  {
             *      if (commit.Attributes["revision"] != null) versionControlStatus.lastModifiedRevision = Int32.Parse(commit.Attributes["revision"].InnerText);
             *      if (commit["author"] != null) versionControlStatus.user = commit["author"].InnerText;
             *  }
             *
             *  XmlElement lockStatus = wcStatus["lock"];
             *  if (lockStatus != null)
             *  {
             *      if (lockStatus["owner"] != null) versionControlStatus.owner = lockStatus["owner"].InnerText;
             *      if (lockStatus["token"] != null) versionControlStatus.lockToken = lockStatus["token"].InnerText;
             *      versionControlStatus.lockStatus = VCLockStatus.LockedHere;
             *  }
             * }
             */

            return(versionControlStatus);
        }
Exemplo n.º 18
0
 public static bool ModifiedWithoutLock(this VersionControlStatus vcs)
 {
     return(vcs.fileStatus == VCFileStatus.Modified && vcs.lockStatus != VCLockStatus.LockedHere && !MergeHandler.IsMergableAsset(vcs.assetPath));
 }
Exemplo n.º 19
0
 public static GUIStyle GetVCBox(VersionControlStatus assetStatus)
 {
     return new GUIStyle(GUI.skin.box)
     {
         border = new RectOffset(2, 2, 2, 2),
         padding = new RectOffset(1, 1, 1, 1),
         normal = { background = IconUtils.boxIcon.GetTexture(AssetStatusUtils.GetStatusColor(assetStatus, true)) }
     };
 }
Exemplo n.º 20
0
 public static bool HaveAssetControl(this VersionControlStatus vcs)
 {
     return(VCUtility.HaveAssetControl(vcs));
 }
Exemplo n.º 21
0
        public static void VersionControlStatusGUI(GUIStyle style, VersionControlStatus assetStatus, Object obj, bool showAddCommit, bool showLockAndAllowLocalEdit, bool showRevert, bool confirmRevert = false)
        {
            using (new PushState<bool>(GUI.enabled, VCCommands.Instance.Ready, v => GUI.enabled = v))
            {
                if (assetStatus.lockStatus == VCLockStatus.LockedHere || assetStatus.ModifiedOrLocalEditAllowed() || !VCUtility.ManagedByRepository(assetStatus))
                {
                    if (!assetStatus.ModifiedOrLocalEditAllowed() && obj.GetAssetPath() != "" && showAddCommit)
                    {
                        if (GUILayout.Button((VCUtility.ManagedByRepository(assetStatus) ? Terminology.commit : Terminology.add), GetPrefabToolbarStyle(style, true)))
                        {
                            VCUtility.ApplyAndCommit(obj, Terminology.commit + " from Inspector");
                        }
                    }
                }

                if (!VCUtility.HaveVCLock(assetStatus) && VCUtility.ManagedByRepository(assetStatus) && showLockAndAllowLocalEdit)
                {
                    if (assetStatus.fileStatus == VCFileStatus.Added)
                    {
                        if (GUILayout.Button(Terminology.commit, GetPrefabToolbarStyle(style, true)))
                        {
                            VCUtility.ApplyAndCommit(obj, Terminology.commit + " from Inspector");
                        }
                    }
                    else if (assetStatus.lockStatus != VCLockStatus.LockedOther)
                    {
                        if (GUILayout.Button(Terminology.getlock, GetPrefabToolbarStyle(style, true)))
                        {
                            VCCommands.Instance.GetLockTask(obj.ToAssetPaths());
                        }
                    }
                    if (!assetStatus.LocalEditAllowed())
                    {
                        if (GUILayout.Button(Terminology.allowLocalEdit, GetPrefabToolbarStyle(style, true)))
                        {
                            VCCommands.Instance.AllowLocalEdit(obj.ToAssetPaths());
                        }
                    }
                }

                if (showRevert)
                {
                    if (GUILayout.Button(Terminology.revert, GetPrefabToolbarStyle(style, VCUtility.ShouldVCRevert(obj))))
                    {
                        if ((!confirmRevert || Event.current.shift) || VCUtility.VCDialog(Terminology.revert, obj))
                        {
                            var seletedGo = Selection.activeGameObject;
                            var revertedObj = VCUtility.Revert(obj);
                            OnNextUpdate.Do(() => Selection.activeObject = ((obj is GameObject) ? revertedObj : seletedGo));
                        }
                    }
                }
            }
        }
Exemplo n.º 22
0
 public static VersionControlStatus MetaStatus(this VersionControlStatus vcs)
 {
     return(vcs.assetPath.EndsWith(VCCAddMetaFiles.meta) ? vcs : VCCommands.Instance.GetAssetStatus(vcs.assetPath + VCCAddMetaFiles.meta));
 }
Exemplo n.º 23
0
        private static VersionControlStatus ParseXMLNode(XmlNode entryIt)
        {
            var        versionControlStatus = new VersionControlStatus();
            XmlElement reposStatus          = entryIt["repos-status"];

            if (reposStatus != null)
            {
                if (reposStatus.Attributes["item"] != null && reposStatus.Attributes["item"].InnerText != "normal")
                {
                    versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;
                }

                XmlElement lockStatus = reposStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null)
                    {
                        versionControlStatus.owner = lockStatus["owner"].InnerText;
                    }
                    versionControlStatus.lockStatus = VCLockStatus.LockedOther;
                }
            }

            XmlElement wcStatus = entryIt["wc-status"];

            if (wcStatus != null)
            {
                if (wcStatus.Attributes["item"] == null || !SVNToVersionControlStatusMap.fileStatusMap.TryGetValue(wcStatus.Attributes["item"].InnerText, out versionControlStatus.fileStatus))
                {
                    D.Log("SVN: Unknown file status: " + wcStatus.Attributes["item"].InnerText);
                }
                if (wcStatus.Attributes["props"] == null || !SVNToVersionControlStatusMap.propertyMap.TryGetValue(wcStatus.Attributes["props"].InnerText, out versionControlStatus.property))
                {
                    D.Log("SVN: Unknown property: " + wcStatus.Attributes["props"].InnerText);
                }

                if (wcStatus.Attributes["revision"] != null)
                {
                    versionControlStatus.revision = Int32.Parse(wcStatus.Attributes["revision"].InnerText);
                }
                if (wcStatus.Attributes["wc-locked"] != null && wcStatus.Attributes["wc-locked"].InnerText == "true")
                {
                    versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                }
                if (wcStatus.Attributes["tree-conflicted"] != null)
                {
                    versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;
                }

                XmlElement commit = wcStatus["commit"];
                if (commit != null)
                {
                    if (commit.Attributes["revision"] != null)
                    {
                        versionControlStatus.lastModifiedRevision = Int32.Parse(commit.Attributes["revision"].InnerText);
                    }
                    if (commit["author"] != null)
                    {
                        versionControlStatus.user = commit["author"].InnerText;
                    }
                }

                XmlElement lockStatus = wcStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null)
                    {
                        versionControlStatus.owner = lockStatus["owner"].InnerText;
                    }
                    if (lockStatus["token"] != null)
                    {
                        versionControlStatus.lockToken = lockStatus["token"].InnerText;
                    }
                    versionControlStatus.lockStatus = VCLockStatus.LockedHere;
                }
            }
            return(versionControlStatus);
        }
Exemplo n.º 24
0
 public void SetMasterSelection(VersionControlStatus status, bool selected)
 {
     if (selected)
         masterSelection.Add(status);
     else
         masterSelection.Remove(status);
 }
Exemplo n.º 25
0
        static void SceneViewUpdate(SceneView sceneView)
        {
            EditorUpdate();
            if (!shouldDraw)
            {
                return;
            }

            if (Event.current.type == EventType.Layout)
            {
                string assetPath = selectionPath;
                VCUtility.RequestStatus(assetPath, VCSettings.HierarchyReflectionMode);
                vcSceneStatus = VCCommands.Instance.GetAssetStatus(assetPath);
                validActions  = VCGUIControls.GetValidActions(assetPath);
            }

            buttonStyle = new GUIStyle(EditorStyles.miniButton)
            {
                margin = new RectOffset(0, 0, 0, 0), fixedWidth = 80
            };

            backgroundGuiStyle           = VCGUIControls.GetVCBox(vcSceneStatus);
            backgroundGuiStyle.padding   = new RectOffset(4, 8, 1, 1);
            backgroundGuiStyle.margin    = new RectOffset(1, 1, 1, 1);
            backgroundGuiStyle.border    = new RectOffset(1, 1, 1, 1);
            backgroundGuiStyle.alignment = TextAnchor.MiddleCenter;

            var rect = new Rect(5, 5, 800, 100);

            Handles.BeginGUI();
            GUILayout.BeginArea(new Rect(0, 0, rect.width, rect.height));
            GUILayout.BeginHorizontal();
            GUILayout.TextField(AssetStatusUtils.GetLockStatusMessage(vcSceneStatus), backgroundGuiStyle);
            GUILayout.Label(selectionPath.Substring(selectionPath.LastIndexOf('/') + 1));
            GUILayout.EndHorizontal();


            int       numberOfButtons = 0;
            const int maxButtons      = 4;

            using (GUILayoutHelper.Vertical())
            {
                using (new PushState <bool>(GUI.enabled, VCCommands.Instance.Ready, v => GUI.enabled = v))
                {
                    if (validActions.showAdd)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button(Terminology.add, buttonStyle))
                        {
                            SceneManagerUtilities.SaveActiveScene();
                            OnNextUpdate.Do(() => VCCommands.Instance.CommitDialog(new[] { selectionPath }));
                        }
                    }
                    if (validActions.showOpen)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button(Terminology.getlock, buttonStyle))
                        {
                            VCCommands.Instance.GetLockTask(new[] { selectionPath });
                        }
                    }
                    if (validActions.showCommit)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button(Terminology.commit, buttonStyle))
                        {
                            OnNextUpdate.Do(() => VCCommands.Instance.CommitDialog(new[] { selectionPath }));
                        }
                    }
                    if (validActions.showRevert)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button(new GUIContent(Terminology.revert, "Shift-click to " + Terminology.revert + " without confirmation"), buttonStyle))
                        {
                            var sceneAssetPath = new[] { selectionPath };
                            if (Event.current.shift || VCUtility.VCDialog(Terminology.revert, sceneAssetPath))
                            {
                                VCCommands.Instance.Revert(sceneAssetPath);
                            }
                        }
                    }
                    if (validActions.showOpenLocal)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button(Terminology.allowLocalEdit, buttonStyle))
                        {
                            VCCommands.Instance.AllowLocalEdit(new[] { selectionPath });
                        }
                    }
                    if (validActions.showUnlock)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button(Terminology.unlock, buttonStyle))
                        {
                            OnNextUpdate.Do(() => VCCommands.Instance.ReleaseLock(new[] { selectionPath }));
                        }
                    }
                    if (validActions.showForceOpen)
                    {
                        numberOfButtons++;
                        if (GUILayout.Button("Force Open", buttonStyle))
                        {
                            OnNextUpdate.Do(() => VCUtility.GetLock(selectionPath, OperationMode.Force));
                        }
                    }

                    // bug: Workaround for a bug in Unity to avoid Tools getting stuck when number of GUI elements change while right mouse is down.
                    using (GUILayoutHelper.Enabled(false))
                    {
                        for (int i = numberOfButtons; i <= maxButtons; ++i)
                        {
                            GUI.Button(new Rect(0, 0, 0, 0), "", EditorStyles.label);
                        }
                    }
                }
            }


            GUILayout.EndArea();
            Handles.EndGUI();
        }
Exemplo n.º 26
0
        public void RefreshGUIFilter()
        {
            ProfilerUtilities.BeginSample("MultiColumnAssetList::RefreshGUIFilter");

            //showBoldLabels = multiColumnState.Ascending && multiColumnState.SelectedColumnIndex == 2;

            if (m_MultiColumnView.bShowAdditionalFolders)
            {
                List <VersionControlStatus> dataWithLabels = interrestingStatus.Where(status => guiFilter(status)).ToList();
                foreach (VersionControlStatus item in dataWithLabels.ToList())
                {
                    string strPath = System.IO.Path.GetDirectoryName(item.assetPath.Compose()).Replace('\\', '/');
                    VersionControlStatus itemCurrent = item;
                    while (strPath != "")
                    {
                        int index = dataWithLabels.IndexOf(itemCurrent) + 1;
                        VersionControlStatus status = new VersionControlStatus();
                        status.assetPath      = strPath;
                        status.allowLocalEdit = false;
                        status.isFolderLabel  = true;

                        if (!dataWithLabels.Any(x => x.assetPath == status.assetPath))
                        {
                            dataWithLabels.Insert(index, status);
                        }


                        itemCurrent = status;
                        strPath     = System.IO.Path.GetDirectoryName(itemCurrent.assetPath.Compose()).Replace('\\', '/');
                    }
                }
                m_MultiColumnView.setItems(dataWithLabels);
            }
            else
            {
                //if (showBoldLabels)
                //{
                //    // HACK: We want to display bold folder labels above our rows like the old Unity Asset Server window.
                //    // Therefore, for each folder path we add an additional asset which only displays the path.
                //    // Used in MultiColumnView.ListViewRow to draw bold labels without any meta information when isFolderLabel is true.
                //    List<VersionControlStatus> dataWithLabels = interrestingStatus.Where(status => guiFilter(status)).ToList();
                //    foreach (VersionControlStatus item in dataWithLabels.ToList())
                //    {
                //        int index = dataWithLabels.IndexOf(item) + 1;
                //        VersionControlStatus status = new VersionControlStatus();
                //        status.assetPath = System.IO.Path.GetDirectoryName(item.assetPath.Compose());
                //        status.allowLocalEdit = false;
                //        status.isFolderLabel = true;

                //        if (!dataWithLabels.Any(x => x.assetPath == status.assetPath))
                //            dataWithLabels.Insert(index, status);
                //    }
                //    multiColumnState.Refresh(dataWithLabels);
                //}
                //else
                //{
                m_MultiColumnView.setItems(interrestingStatus.Where(status => guiFilter(status)));
            }
            //}
            // End Hack.

            ProfilerUtilities.EndSample();
        }
Exemplo n.º 27
0
        private static StatusDatabase ParseStatusResult(XmlDocument xmlDoc)
        {
            if (!xmlDoc.HasChildNodes) return null;

            var statusDatabase = new StatusDatabase();

            XmlNodeList entries = xmlDoc.GetElementsByTagName("entry");
            foreach (XmlNode entryIt in entries)
            {
                ComposedString assetPath = new ComposedString((entryIt.Attributes["path"].InnerText.Replace('\\', '/')).Trim());
                var status = ParseXMLNode(entryIt);
                status.assetPath = assetPath;
                statusDatabase[assetPath] = status;
            }

            XmlNodeList changelists = xmlDoc.GetElementsByTagName("changelist");
            foreach (XmlNode changelistIt in changelists)
            {
                string changelist = changelistIt.Attributes["name"].InnerText;
                foreach (XmlNode entryIt in changelistIt.ChildNodes)
                {
                    ComposedString assetPath = new ComposedString((entryIt.Attributes["path"].InnerText.Replace('\\', '/')).Trim());
                    if (statusDatabase.ContainsKey(assetPath))
                    {
                        statusDatabase[assetPath].changelist = changelist;
                        if (changelist == SVNCommands.localEditChangeList)
                        {
                            statusDatabase[assetPath].allowLocalEdit = true;
                        }
                    }
                }
            }

            foreach (var assetPathIt in new List<ComposedString>(statusDatabase.Keys))
            {
                string assetPathStr = assetPathIt.Compose();
                if (Directory.Exists(assetPathStr))
                {
                    var status = statusDatabase[assetPathIt];
                    if (status.fileStatus == VCFileStatus.Unversioned)
                    {
                        foreach (var unversionedIt in GetFilesInFolder(assetPathStr))
                        {
                            var fileStatus = new VersionControlStatus
                            {
                                assetPath = unversionedIt,
                                fileStatus = VCFileStatus.Unversioned,
                            };
                            statusDatabase[unversionedIt] = fileStatus;
                        }
                    }
                }
            }
            return statusDatabase;
        }
Exemplo n.º 28
0
        private static StatusDatabase ParseStatusResult(XmlDocument xmlDoc)
        {
            if (!xmlDoc.HasChildNodes)
            {
                return(null);
            }

            var statusDatabase = new StatusDatabase();

            XmlNodeList entries = xmlDoc.GetElementsByTagName("entry");

            foreach (XmlNode entryIt in entries)
            {
                ComposedString assetPath = new ComposedString((entryIt.Attributes["path"].InnerText.Replace('\\', '/')).Trim());
                var            status    = ParseXMLNode(entryIt, assetPath);
                status.assetPath          = assetPath;
                statusDatabase[assetPath] = status;
            }

            XmlNodeList changelists = xmlDoc.GetElementsByTagName("changelist");

            foreach (XmlNode changelistIt in changelists)
            {
                string changelist = changelistIt.Attributes["name"].InnerText;
                foreach (XmlNode entryIt in changelistIt.ChildNodes)
                {
                    ComposedString assetPath = new ComposedString((entryIt.Attributes["path"].InnerText.Replace('\\', '/')).Trim());
                    if (statusDatabase.ContainsKey(assetPath))
                    {
                        statusDatabase[assetPath].changelist = changelist;
                        if (changelist == SVNCommands.localEditChangeList)
                        {
                            statusDatabase[assetPath].allowLocalEdit = true;
                        }
                        if (changelist == SVNCommands.localOnlyChangeList)
                        {
                            statusDatabase[assetPath].localOnly = true;
                        }
                    }
                }
            }

            foreach (var assetPathIt in new List <ComposedString>(statusDatabase.Keys))
            {
                string assetPathStr = assetPathIt.Compose();
                if (Directory.Exists(assetPathStr))
                {
                    var status = statusDatabase[assetPathIt];
                    if (status.fileStatus == VCFileStatus.Unversioned)
                    {
                        foreach (var unversionedIt in GetFilesInFolder(assetPathStr))
                        {
                            var fileStatus = new VersionControlStatus
                            {
                                assetPath  = unversionedIt,
                                fileStatus = VCFileStatus.Unversioned,
                            };
                            statusDatabase[unversionedIt] = fileStatus;
                        }
                    }
                }
            }
            return(statusDatabase);
        }
Exemplo n.º 29
0
        private static VersionControlStatus ParseXMLNode(XmlNode entryIt)
        {
            var versionControlStatus = new VersionControlStatus();
            XmlElement reposStatus = entryIt["repos-status"];
            if (reposStatus != null)
            {
                if (reposStatus.Attributes["item"] != null && reposStatus.Attributes["item"].InnerText != "normal") versionControlStatus.remoteStatus = VCRemoteFileStatus.Modified;

                XmlElement lockStatus = reposStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null) versionControlStatus.owner = lockStatus["owner"].InnerText;
                    versionControlStatus.lockStatus = VCLockStatus.LockedOther;
                }
            }

            XmlElement wcStatus = entryIt["wc-status"];
            if (wcStatus != null)
            {
                if (wcStatus.Attributes["item"] == null || !SVNToVersionControlStatusMap.fileStatusMap.TryGetValue(wcStatus.Attributes["item"].InnerText, out versionControlStatus.fileStatus)) D.Log("SVN: Unknown file status: " + wcStatus.Attributes["item"].InnerText);
                if (wcStatus.Attributes["props"] == null || !SVNToVersionControlStatusMap.propertyMap.TryGetValue(wcStatus.Attributes["props"].InnerText, out versionControlStatus.property)) D.Log("SVN: Unknown property: " + wcStatus.Attributes["props"].InnerText);

                if (wcStatus.Attributes["revision"] != null) versionControlStatus.revision = Int32.Parse(wcStatus.Attributes["revision"].InnerText);
                if (wcStatus.Attributes["wc-locked"] != null && wcStatus.Attributes["wc-locked"].InnerText == "true") versionControlStatus.repositoryStatus = VCRepositoryStatus.Locked;
                if (wcStatus.Attributes["tree-conflicted"] != null) versionControlStatus.treeConflictStatus = (wcStatus.Attributes["tree-conflicted"].InnerText == "true") ? VCTreeConflictStatus.TreeConflict : VCTreeConflictStatus.Normal;

                XmlElement commit = wcStatus["commit"];
                if (commit != null)
                {
                    if (commit.Attributes["revision"] != null) versionControlStatus.lastModifiedRevision = Int32.Parse(commit.Attributes["revision"].InnerText);
                    if (commit["author"] != null) versionControlStatus.user = commit["author"].InnerText;
                }

                XmlElement lockStatus = wcStatus["lock"];
                if (lockStatus != null)
                {
                    if (lockStatus["owner"] != null) versionControlStatus.owner = lockStatus["owner"].InnerText;
                    if (lockStatus["token"] != null) versionControlStatus.lockToken = lockStatus["token"].InnerText;
                    versionControlStatus.lockStatus = VCLockStatus.LockedHere;
                }
            }
            return versionControlStatus;
        }