예제 #1
0
        void PreviewTarget(IDXVcsRepository repository, string file, string vcsFile, int leftVersion = 0, int rightVersion = 0, bool compareWithCurrent = true)
        {
            string leftFile  = Path.GetTempFileName();
            string rightFile = Path.GetTempFileName();

            try {
                if (leftVersion > 0)
                {
                    repository.Get(vcsFile, leftFile, leftVersion);
                }
                else
                {
                    repository.GetLatestVersion(vcsFile, leftFile);
                }

                if (compareWithCurrent)
                {
                    CopyFileContent(file, rightFile);
                }
                else if (rightVersion > 0)
                {
                    repository.Get(vcsFile, rightFile, rightVersion);
                }
                else
                {
                    repository.GetLatestVersion(vcsFile, rightFile);
                }

                LaunchDiffTool(leftFile, rightFile);
            }
            finally {
                File.Delete(leftFile);
                File.Delete(rightFile);
            }
        }
예제 #2
0
        void PreviewTarget(IDXVcsRepository repository, string vcsFile, string file)
        {
            string tmpVcsFile = Path.GetTempFileName();

            try {
                repository.GetLatestVersion(vcsFile, tmpVcsFile);
                LaunchDiffTool(tmpVcsFile, file);
            }
            finally {
                File.Delete(tmpVcsFile);
            }
        }
예제 #3
0
        public MergeState MergeChanges(DXVcsBranch currentBranch, string filePath, string mergePath, bool showPreview)
        {
            try {
                IDXVcsRepository repository      = DXVcsRepositoryFactory.Create(Port.VcsServer);
                string           tmpOriginalFile = Path.GetTempFileName();

                string vcsOriginalPath = Port.GetRelativePath(filePath);
                string vcsTargetFile   = mergePath == null?GetMergeVcsPathByOriginalPath(filePath, currentBranch) : Port.GetRelativePath(mergePath, currentBranch);

                try {
                    repository.GetLatestVersion(vcsOriginalPath, tmpOriginalFile);
                    string tmpTargetFile = string.Empty;
                    try {
                        tmpTargetFile = repository.GetFileWorkingPath(vcsTargetFile);
                    }
                    catch (Exception e) {
                        Logger.AddError("MergeCommand. Target file error.", e);
                        return(MergeState.TargetFileError);
                    }
                    if (string.IsNullOrEmpty(tmpTargetFile))
                    {
                        Logger.AddError("MergeCommand. Target file path is empty.");
                        return(MergeState.TargetFileError);
                    }

                    try {
                        repository.CheckOutFile(vcsTargetFile, tmpTargetFile, string.Empty);
                    }
                    catch (Exception e) {
                        Logger.AddError("MergeCommand. Check out file error.", e);
                        return(MergeState.CheckOutFileError);
                    }


                    var diff = new FileDiff();
                    if (!diff.Merge(tmpOriginalFile, filePath, tmpTargetFile))
                    {
                        return(MergeState.Conflict);
                    }
                    if (showPreview)
                    {
                        PreviewTarget(repository, vcsTargetFile, tmpTargetFile);
                    }
                }
                finally {
                    File.Delete(tmpOriginalFile);
                }
            }
            catch {
                return(MergeState.UnknownError);
            }
            return(MergeState.Success);
        }
예제 #4
0
        public bool UndoCheckout(string filePath)
        {
            string vcsFilePath = Port.GetRelativePath(filePath);

            try {
                IDXVcsRepository repository = DXVcsRepositoryFactory.Create(Port.VcsServer);
                repository.UndoCheckout(vcsFilePath, filePath);
                repository.GetLatestVersion(vcsFilePath, filePath);
                FileInfo info = new FileInfo(filePath);
                info.IsReadOnly = true;
            }
            catch {
                return(true);
            }
            return(false);
        }
예제 #5
0
        void PreviewTarget(IDXVcsRepository repository, string file, string vcsFile, string targetFile, bool isNew)
        {
            string tmpFile = Path.GetTempFileName();

            try {
                if (!isNew)
                {
                    repository.GetLatestVersion(vcsFile, tmpFile);
                }
                else
                {
                    CopyFileContent(file, tmpFile);
                }

                LaunchDiffTool(tmpFile, targetFile);
            }
            finally {
                File.Delete(tmpFile);
            }
        }