コード例 #1
0
        /// <summary>
        /// Gets the mapped file paths from the given directory, using the project filtering
        /// The result is saved in the files List
        /// </summary>
        /// <param name="files">The list of mapped files</param>
        /// <param name="prj">The current project</param>
        /// <param name="dir">The mapped path directory</param>
        private void GetPaths(ref List <MappedPath> files, DirectoryInfo dirInfo, Project prj, MappedPath dirMap)
        {
            String servercopy = prj.Data.ServerCopy,
                   fileInServerCopy;

            foreach (var file in dirInfo.GetFiles())
            {
                //Files must exist in server copy and shouldn't be already added
                fileInServerCopy = file.FullName.Replace(MappingUtils.ValidatePath(prj.Data.ProjectCopy, true), MappingUtils.ValidatePath(prj.Data.ServerCopy, true)) + ".copy";
                if (File.Exists(fileInServerCopy) && files.Count(x => file.FullName == x.GetFullServerCopy()) == 0)
                {
                    files.Add(SftpUtils.GetMappedPath(file, dirMap.ProjectCopy, dirMap.RemotePath, dirMap.ServerCopy));
                }
            }
            foreach (var dir in dirInfo.GetDirectories())
            {
                GetPaths(ref files, dir, prj, dirMap);
            }
        }
コード例 #2
0
 /// <summary>
 /// Push the files to the server only the mapped files are push to the server
 /// </summary>
 /// <param name="prj">The current project</param>
 /// <param name="silentMode">if true push changes without confirmation</param>
 private void PushToServer(Project prj, Boolean silentMode = false)
 {
     if (prj.Data.Map.Files.Count() > 0 || prj.Data.Map.Directories.Count() > 0)
     {
         List <MappedPath> files = new List <MappedPath>();
         foreach (var file in prj.Data.Map.Files)
         {
             if (files.Count(x => x.GetFullProjectCopy() == file.GetFullProjectCopy()) == 0)
             {
                 files.Add(file);
             }
         }
         foreach (var dir in prj.Data.Map.Directories)
         {
             this.GetPaths(ref files, new DirectoryInfo(dir.GetFullProjectCopy()), prj, dir);
         }
         diff_match_patch dmp = new diff_match_patch();
         //Only uploads files with diff
         String[] cExt = Program.Settings.ComparableFilesExt;
         Boolean  isComparable;
         var      filesToUpload = files.Where(x =>
         {
             isComparable = x.GetFullProjectCopy().IsComparable(cExt);
             return(isComparable && !dmp.AreFilesEquals(x.GetFullProjectCopy(), x.GetFullServerCopy() + ".copy"));
         }).ToArray();
         if (filesToUpload.Length > 0)
         {
             SftpUtils.UploadFiles(filesToUpload, prj, silentMode);
         }
         else
         {
             Console.WriteLine(MSG_INF_PRJ_PUSH_NO_CHANGES);
         }
     }
     else
     {
         throw new Exception(MSG_ERR_PRJ_PULL_EMPTY_MAP);
     }
 }
コード例 #3
0
        /// <summary>
        /// Adds a file or a directory to the server
        /// </summary>
        /// <param name="prj">The current project</param>
        /// <param name="localPath">The local path</param>
        /// <param name="remotePath">The remote path</param>
        private void AddToServer(Project prj, string localPath, string remotePath)
        {
            String prjPath    = Environment.CurrentDirectory;
            String configFile = Path.Combine(prjPath, ".ssh", "config.json");

            localPath  = Path.Combine(prj.Data.ProjectCopy, localPath);
            remotePath = Path.Combine(prj.Connection.Data.RootDir, remotePath);
            if (File.Exists(localPath)) //is a file
            {
                var mapped = prj.Data.Map.Files.FirstOrDefault(x => x.ProjectCopy == localPath);
                if (mapped == null)
                {
                    // File.Copy (localPath, localPath.Replace (prj.Data.ProjectCopy, prj.Data.ServerCopy), true);
                    MappedPath newMap = new MappedPath()
                    {
                        ProjectCopy   = localPath,
                        ServerCopy    = localPath.Replace(prj.Data.ProjectCopy, prj.Data.ServerCopy),
                        RemotePath    = remotePath,
                        RemoteVersion = DateTime.Now,
                        LocalVersion  = DateTime.Now
                    };
                    SftpUtils.UploadFiles(new MappedPath[] { newMap }, prj, true);
                    prj.Data.Map.Files = prj.Data.Map.Files.Union(new MappedPath[] { newMap }).ToArray();
                    prj.SaveProject(configFile);
                    Console.WriteLine(String.Format(MSG_INF_MAP_CREATED, localPath, remotePath));
                }
                else
                {
                    throw new Exception(String.Format(MSG_ERR_MAP_AlREADY_MAPPED, localPath));
                }
            }
            else if (Directory.Exists(localPath))
            {
                var mapped = prj.Data.Map.Files.FirstOrDefault(x => x.ProjectCopy == localPath);
                if (mapped == null)
                {
                    var files = prj.Filter.FilesInDirectory(localPath);
                    foreach (String file in files)
                    {
                        File.Copy(file, file.Replace(prj.Data.ProjectCopy, prj.Data.ServerCopy + ".copy"));
                    }
                    SftpUtils.UploadFiles(files.Select(x =>
                                                       new MappedPath()
                    {
                        ProjectCopy   = x,
                        ServerCopy    = x.Replace(prj.Data.ProjectCopy, prj.Data.ServerCopy),
                        RemotePath    = remotePath + "/" + x.Substring(x.LastIndexOf('\\')),
                        RemoteVersion = DateTime.Now,
                        LocalVersion  = DateTime.Now
                    }
                                                       ), prj);
                    MappedPath newMap = new MappedPath()
                    {
                        ProjectCopy   = localPath,
                        ServerCopy    = localPath.Replace(prj.Data.ProjectCopy, prj.Data.ServerCopy),
                        RemotePath    = remotePath,
                        RemoteVersion = DateTime.Now,
                        LocalVersion  = DateTime.Now
                    };
                    prj.Data.Map.Directories = prj.Data.Map.Directories.Union(new MappedPath[] { newMap }).ToArray();
                    prj.SaveProject(configFile);
                    Console.WriteLine(String.Format(MSG_INF_MAP_CREATED, localPath, remotePath));
                }
            }
            else
            {
                throw new Exception(MSG_ERR_PRJ_BAD_LOC_PTH);
            }
        }