コード例 #1
0
ファイル: SvnRepositoryType.cs プロジェクト: mo5h/omeo
        private void GetDiff(IResource repository, FileChange fileChange)
        {
            if (fileChange.HasProp(Props.Diff))
            {
                return;
            }

            int revision = fileChange.Revision;

            if (revision == 1)
            {
                return;
            }

            string repoRoot = repository.GetProp(Props.RepositoryRoot);

            if (repoRoot == null)
            {
                try
                {
                    repoRoot = GetRunner(repository).GetSvnInfo("Repository Root:");
                    ClearLastError(repository);
                }
                catch (RunnerException ex)
                {
                    SetLastError(repository, ex);
                    return;
                }
                new ResourceProxy(repository).SetPropAsync(Props.RepositoryRoot, repoRoot);
            }

            string    repoPath  = BuildFileName(repository, fileChange);
            SvnRunner svnRunner = GetRunner(repository);

            svnRunner.RepositoryUrl = repoRoot;
            try
            {
                string diff = svnRunner.GetDiff(repoPath, revision - 1, revision);
                fileChange.Diff = diff;
                fileChange.SaveAsync();
                if (diff == "")
                {
                    CheckBinaryFile(repository, repoRoot, repoPath, fileChange);
                }

                ClearLastError(repository);
            }
            catch (RunnerException ex)
            {
                SetLastError(repository, ex);
            }
        }
コード例 #2
0
ファイル: ChangeSetDisplayPane.cs プロジェクト: mo5h/omeo
        private void HandleFileChangeChanged(object sender, ResourcePropIndexEventArgs e)
        {
            if (!Core.UserInterfaceAP.IsOwnerThread)
            {
                Core.UIManager.QueueUIJob(() => HandleFileChangeChanged(sender, e));
                return;
            }
            FileChange fileChange = (FileChange)_changedFilesList.SelectedItem;

            if (fileChange != null && fileChange.Resource == e.Resource)
            {
                UpdateSelectedChange();
            }
        }
コード例 #3
0
ファイル: SvnRepositoryType.cs プロジェクト: mo5h/omeo
        internal override string BuildLinkToFile(IResource repository, FileChange fileChange)
        {
            string url = repository.GetProp(Props.RepositoryUrl);

            if (url.StartsWith("http://"))
            {
                if (url.EndsWith("/"))
                {
                    url = url.Substring(0, url.Length - 1);
                }
                return(url + BuildPath(fileChange.AffectsFolder) + "/" + fileChange.Name);
            }
            return(null);
        }
コード例 #4
0
ファイル: ChangeSetDisplayPane.cs プロジェクト: mo5h/omeo
        private void UpdateSelectedChange()
        {
            FileChange fileChange = (FileChange)_changedFilesList.SelectedItem;

            if (fileChange != null)
            {
                IResource      repository = _changeSet.GetProp(Props.ChangeSetRepository);
                RepositoryType repType    = SccPlugin.GetRepositoryType(repository);
                string         diffText   = repType.OnFileChangeSelected(repository, fileChange);
                _lnkFileName.Text = repType.BuildFileName(repository, fileChange);
                if (_lnkFileName.Links.Count == 1)
                {
                    _lnkFileName.Links [0].LinkData = fileChange;
                }

                _edtDiff.Clear();
                string changeType = fileChange.ChangeType;
                if (changeType == "add")
                {
                    _edtDiff.Text = "New file";
                }
                else if (changeType == "delete")
                {
                    _edtDiff.Text = "File deleted";
                }
                else if (fileChange.Binary)
                {
                    _edtDiff.Text = "Binary file";
                }
                else
                {
                    string diff = fileChange.Diff;
                    if (String.IsNullOrEmpty(diff))
                    {
                        _edtDiff.Text = diffText;
                    }
                    else
                    {
                        _edtDiff.Text = FilterWhitespaceOnlyDiffs(diff);
                        ColorizeDiff();
                    }
                }
            }
            else
            {
                ClearSelectedChange();
            }
        }
コード例 #5
0
ファイル: SvnRepositoryType.cs プロジェクト: mo5h/omeo
        private static void ProcessFileChanges(IResource repository, ResourceProxy csProxy, XmlElement node, int revision)
        {
            foreach (XmlElement pathNode in node.SelectNodes("paths/path"))
            {
                string action = pathNode.GetAttribute("action");
                string path   = pathNode.InnerText;

                int    pos        = path.LastIndexOf('/');
                string folderName = path.Substring(0, pos);
                string fileName   = path.Substring(pos + 1);

                IResource folder = FindOrCreateFolder(repository, folderName);
                csProxy.AddLink(Props.AffectsFolder, folder);

                FileChange fileChange = FileChange.Create();
                fileChange.Name          = fileName;
                fileChange.AffectsFolder = folder;
                switch (action)
                {
                case "A":
                    fileChange.ChangeType = "add";
                    break;

                case "D":
                    fileChange.ChangeType = "delete";
                    break;

                case "R":
                    fileChange.ChangeType = "replace";
                    break;

                default:
                    fileChange.ChangeType = "change";
                    break;
                }
                fileChange.Revision = revision;
                fileChange.Save();

                csProxy.AddLink(Props.Change, fileChange.Resource);
            }
        }
コード例 #6
0
ファイル: P4RepositoryType.cs プロジェクト: mo5h/omeo
        private static void SaveChangeSet(IResource repository, IResource changeSet, ChangeSetDetails details)
        {
            if (changeSet.HasProp(Props.Change))
            {
                return;
            }

            ResourceProxy proxy = new ResourceProxy(changeSet);

            proxy.BeginUpdate();

            SetChangeSetDescription(proxy, details.Description);

            foreach (var fileChangeData in details.FileChanges)
            {
                int    pos        = fileChangeData.Path.LastIndexOf('/');
                string folderName = fileChangeData.Path.Substring(0, pos);
                string fileName   = fileChangeData.Path.Substring(pos + 1);

                IResource folder = FindOrCreateFolder(repository, folderName);
                proxy.AddLink(Props.AffectsFolder, folder);

                var fileChange = FileChange.Create();
                fileChange.Name          = fileName;
                fileChange.AffectsFolder = folder;
                fileChange.ChangeType    = fileChangeData.ChangeType;
                fileChange.Revision      = fileChangeData.Revision;
                fileChange.Diff          = fileChangeData.Diff;
                fileChange.Binary        = fileChangeData.Binary;
                fileChange.Save();

                proxy.AddLink(Props.Change, fileChange.Resource);
            }

            proxy.EndUpdate();
            Core.TextIndexManager.QueryIndexing(proxy.Resource.Id);
        }
コード例 #7
0
ファイル: SvnRepositoryType.cs プロジェクト: mo5h/omeo
        private static void CheckBinaryFile(IResource repository, string repoRoot, string repoPath, FileChange fileChange)
        {
            SvnRunner svnRunner = GetRunner(repository);

            svnRunner.RepositoryUrl = repoRoot;
            try
            {
                string prop = svnRunner.GetProperty(repoPath, "svn:mime-type");
                ClearLastError(repository);
                // see libsvn_subr/validate.c:svn_mime_type_is_binary() in Subversion source code
                if (!prop.StartsWith("text/") && !prop.StartsWith("image/x-xbitmap") &&
                    !prop.StartsWith("image/x-xpixmap"))
                {
                    fileChange.Binary = true;
                    fileChange.SaveAsync();
                }
            }
            catch (RunnerException ex)
            {
                SetLastError(repository, ex);
            }
        }
コード例 #8
0
ファイル: SvnRepositoryType.cs プロジェクト: mo5h/omeo
 internal override string BuildFileName(IResource repository, FileChange fileChange)
 {
     return(BuildPath(fileChange.AffectsFolder) + "/" + fileChange.Name);
 }
コード例 #9
0
ファイル: RepositoryType.cs プロジェクト: mo5h/omeo
 internal abstract string BuildLinkToFile(IResource repository, FileChange fileChange);
コード例 #10
0
ファイル: RepositoryType.cs プロジェクト: mo5h/omeo
 internal abstract string BuildFileName(IResource repository, FileChange fileChange);
コード例 #11
0
ファイル: RepositoryType.cs プロジェクト: mo5h/omeo
 /// <summary>
 /// Called when a file change is selected in the repository.
 /// </summary>
 /// <param name="repository">The repository to which the file change belongs.</param>
 /// <param name="fileChange">The selected file change.</param>
 /// <returns>The text to display in the diff preview pane.</returns>
 internal virtual string OnFileChangeSelected(IResource repository, FileChange fileChange)
 {
     return(null);
 }