示例#1
0
      public void Execute(IEnumerable<FileCompare> files, IMergeOperation mergeOp)
      {
        try
        {
          var output = new StringBuilder();
          ExecCmd("hg", "status", mergeOp.MergePath(""), output);
          var statuses = GetStatus(output.ToString());
          WorkingDirStatus status;

          var toProcess = files.Where(f =>
                f.ResolutionStatus == MergeStatus.TakeLocal
              || f.ResolutionStatus == MergeStatus.TakeRemote)
            .ToArray();

          FileCompare file;
          for (var i = 0; i < toProcess.Length; i++ )
          {
            file = toProcess[i];
            var path = mergeOp.MergePath(file.Path);
            if (file.ResolutionStatus == MergeStatus.TakeLocal)
            {
              if (file.InLocal == FileStatus.DoesntExist)
              {
                if (File.Exists(path))
                  File.Delete(path);
              }
              else
              {
                if (statuses.ContainsKey(file.Path))
                {
                  Directory.CreateDirectory(Path.GetDirectoryName(path));
                  using (var write = new FileStream(path, FileMode.Create, FileAccess.Write))
                  {
                    mergeOp.GetLocal(file.Path).CopyTo(write);
                  }
                }
              }
            }
            else
            {
              if (File.Exists(path))
                File.Delete(path);

              if (file.InRemote != FileStatus.DoesntExist)
              {
                Directory.CreateDirectory(Path.GetDirectoryName(path));
                using (var write = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                  mergeOp.GetRemote(file.Path).CopyTo(write);
                }
              }
            }
            OnProgressChanged("Processing files...", ((i + 1) * 100) / toProcess.Length);
          }

          OnActionComplete();
        }
        catch (Exception ex)
        {
          OnActionComplete(ex);
        }
      }
示例#2
0
            public void Execute(IEnumerable <FileCompare> files, IMergeOperation mergeOp)
            {
                try
                {
                    var output = new StringBuilder();
                    ExecCmd("hg", "status", mergeOp.MergePath(""), output);
                    var statuses = GetStatus(output.ToString());
                    WorkingDirStatus status;

                    var toProcess = files.Where(f =>
                                                f.ResolutionStatus == MergeStatus.TakeLocal ||
                                                f.ResolutionStatus == MergeStatus.TakeRemote)
                                    .ToArray();

                    FileCompare file;
                    for (var i = 0; i < toProcess.Length; i++)
                    {
                        file = toProcess[i];
                        var path = mergeOp.MergePath(file.Path);
                        if (file.ResolutionStatus == MergeStatus.TakeLocal)
                        {
                            if (file.InLocal == FileStatus.DoesntExist)
                            {
                                if (File.Exists(path))
                                {
                                    File.Delete(path);
                                }
                            }
                            else
                            {
                                if (statuses.ContainsKey(file.Path))
                                {
                                    Directory.CreateDirectory(Path.GetDirectoryName(path));
                                    using (var write = new FileStream(path, FileMode.Create, FileAccess.Write))
                                    {
                                        mergeOp.GetLocal(file.Path).CopyTo(write);
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (File.Exists(path))
                            {
                                File.Delete(path);
                            }

                            if (file.InRemote != FileStatus.DoesntExist)
                            {
                                Directory.CreateDirectory(Path.GetDirectoryName(path));
                                using (var write = new FileStream(path, FileMode.Create, FileAccess.Write))
                                {
                                    mergeOp.GetRemote(file.Path).CopyTo(write);
                                }
                            }
                        }
                        OnProgressChanged("Processing files...", ((i + 1) * 100) / toProcess.Length);
                    }

                    OnActionComplete();
                }
                catch (Exception ex)
                {
                    OnActionComplete(ex);
                }
            }