Пример #1
0
        public void Test_DirectoryandFileUtil()
        {
            bool result = true;

            try
            {
                if (!Directory.Exists("Test1"))
                {
                    Directory.CreateDirectory("Test1");
                    Directory.CreateDirectory(@"Test1\Testing");
                }
                File.WriteAllText(@"Test1\test1.txt", "Testing");
                DirectoryUtil.DirectoryCopy("Test1", "Test2", true);
                DirectoryUtil.EmptyDirectory("Test2");
                if (Directory.GetFiles("Test2").Length == 0)
                {
                    Directory.Delete("Test2");
                }
                DirectoryUtil.CreateSymLink(@"Test1\TestLink", @"Test1\test1.txt", DirectoryUtil.SymbolicLink.File);
                string location = FileUtil.GetSymlinkTargetLocation(@"Test1\TestLink");
                if (location == string.Empty)
                {
                    result = false;
                }
                DirectoryUtil.EmptyDirectory("Test1");
                Directory.Delete("Test1");
            }
            catch
            {
                result = false;
            }
            Assert.AreEqual(true, result);
        }
Пример #2
0
        public static void FixSymlinks(string directory)
        {
            string linuxDir = Cygpath(directory);

            // We use a .LINUXSYMLINK dummy suffix for cygpath when getting symlink names, otherwise it will convert them to the target directory
            string symlinkArguments = string.Format(@"--norc --login -c ""find -L {0} -xtype l -print0 | sort -z | xargs -0 -I {{}} cygpath --windows {{}}{1}""", linuxDir, DummySymlinkSuffix);
            string targetArguments  = string.Format(@"--norc --login -c ""find -L {0} -xtype l -print0 | sort -z | xargs -0 -I {{}} cygpath --windows {{}}""", linuxDir);

            string[] symlinks = ProcessExtensions.RunCommandAndGetOutput(BashBinary, symlinkArguments).StdOut.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            string[] targets  = ProcessExtensions.RunCommandAndGetOutput(BashBinary, targetArguments).StdOut.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

            if (symlinks.Length != targets.Length)
            {
                Logger.Error("Symlink count doesn't match target count in directory '{0}'. Symlinks: {1}. Targets: {2}", directory, string.Join(";", symlinks), string.Join(";", targets));
                throw new Exception("Symlink count doesn't match target count in directory.");
            }

            for (int i = 0; i < symlinks.Length; i++)
            {
                string symlink = symlinks[i].Replace(DummySymlinkSuffix, "");
                string target  = targets[i];

                // Only fix links that cygwin translates (it will not translate Windows junction points, but it will see them as symlinks)
                if (symlink != target)
                {
                    Logger.Debug("Fixing symlink {0} -> {1}", symlink, target);
                    File.Delete(symlink);
                    DirectoryUtil.CreateSymLink(symlink, target, DirectoryUtil.SymbolicLink.Directory);
                }
            }
        }
Пример #3
0
        public void LinkDeploymentId(string deploymentDateTime, string deploymentId)
        {
            Logger.Debug("Linking deployment id {0} to datetime {1}, for gear {2}", deploymentId, deploymentDateTime, this.Uuid);

            string target = Path.Combine(this.ContainerDir, "app-deployments", deploymentDateTime);
            string link   = Path.Combine(this.ContainerDir, "app-deployments", "by-id", deploymentId);

            DirectoryUtil.CreateSymLink(link, target, DirectoryUtil.SymbolicLink.Directory);
        }
Пример #4
0
        public void UpdateCurrentDeploymentDateTimeSymlink(string deploymentDateTime)
        {
            string dir = Path.Combine(this.ContainerDir, "app-deployments", "current");

            if (Directory.Exists(dir))
            {
                Directory.Delete(dir, true);
            }

            DirectoryUtil.CreateSymLink(dir, deploymentDateTime, DirectoryUtil.SymbolicLink.Directory);
        }