Beispiel #1
0
        public Package(DirectoryInfo packageDirectory)
        {
            _directoryInfo = packageDirectory;

            var jsonFile = _directoryInfo.GetFile("metadata.json");
            var yamlFile = _directoryInfo.GetFile("metadata.yml");

            if (jsonFile.Exists)
            {
                var se = new Serializer();
                Metadata = JsonConvert.DeserializeObject<PackageMetadata>(File.ReadAllText(_directoryInfo.GetFile("metadata.json").FullName));
                using (var yamlStream = yamlFile.Open(FileMode.OpenOrCreate))
                {
                    using (var yamlWriter = new StreamWriter(yamlStream, Encoding.UTF8))
                    {
                        se.Serialize(yamlWriter, Metadata);
                    }
                }
                jsonFile.Delete();
            }

            var dse = new Deserializer();
            //Console.WriteLine("Reading YAML: {0}", yamlFile.FullName);
            using (var yamlStream = yamlFile.Open(FileMode.Open))
            {
                using (var yamlReader = new StreamReader(yamlStream, Encoding.UTF8, true))
                {
                    Metadata = dse.Deserialize<PackageMetadata>(yamlReader);
                }
            }
        }
Beispiel #2
0
        public static FileInfo CopyToDirectory(this FileInfo file, DirectoryInfo dir, bool overwrite)
        {
            var newFile = dir.GetFile(file.Name);

            file.CopyTo(newFile.FullName, overwrite);
            return(newFile);
        }
Beispiel #3
0
        // Constructor
        /// <summary>
        /// Open a profile (create if not exist) and load it.
        /// </summary>
        /// <param name="profileDirectory">The root directory of the profile</param>
        public CraftitudeProfile(DirectoryInfo profileDirectory)
        {
            Directory = profileDirectory;

            _craftitudeDirectory = Directory.CreateSubdirectory("craftitude");
            _craftitudeDirectory.CreateSubdirectory("repositories"); // repository package lists
            _craftitudeDirectory.CreateSubdirectory("packages"); // cached package setups

            _bsonFile = _craftitudeDirectory.GetFile("profile.bson");

            if (!_bsonFile.Exists)
            {
                ProfileInfo = new ProfileInfo();
            }
            else
            {
                using (FileStream bsonStream = _bsonFile.Open(FileMode.OpenOrCreate))
                {
                    using (var bsonReader = new BsonReader(bsonStream))
                    {
                        var jsonSerializer = new JsonSerializer();
                        ProfileInfo = jsonSerializer.Deserialize<ProfileInfo>(bsonReader) ?? new ProfileInfo();
                    }
                }
            }
        }
		private static FileInfo GetFile(DirectoryInfo dirInfo, string relativePath) {
			if (!dirInfo.SafeExists()) {
				return null;
			}
			var fileInfo = dirInfo.GetFile(relativePath);
			return fileInfo.Exists ? fileInfo : null;
		}
        private static void VerifyMeasureAndLocalize(
                string testTargetNames, string inDirPath, string expDirPath, DirectoryInfo outDir) {
            var ret = Inserter.Run(
                    new[] {
                            "-r",
                            outDir.FullName,
                            "-t",
                            outDir.GetDirectory("test").FullName,
                    });
            Assert.That(ret, Is.True);

            // jarとdllファイルが存在するか
            var jar = outDir.GetFile("CoverageWriter.jar");
            Assert.That(jar.Exists, Is.True);

            var covInfoFile = outDir.GetFile(OccfNames.CoverageInfo);
            var testInfoFile = outDir.GetFile(OccfNames.TestInfo);
            var recordFile = outDir.GetFile(OccfNames.Record);
            var resultFile = outDir.GetFile("testresult.txt");

            var targets = Directory.EnumerateFiles(
                    expDirPath, "*.java",
                    SearchOption.AllDirectories)
                    .Concat(
                            Directory.EnumerateFiles(
                                    expDirPath, OccfNames.BackupSuffix,
                                    SearchOption.AllDirectories))
                    .Concat(new[] { covInfoFile.FullName, testInfoFile.FullName });
            foreach (var target in targets) {
                AssertEqualFiles(target, expDirPath, inDirPath);
            }

            Compile(outDir.FullName);
            RunTest(outDir.FullName, testTargetNames);

            var covInfo = CoverageInfo.Read(covInfoFile);
            var testInfo = TestInfo.Read(testInfoFile);

            testInfo.InitializeForStoringData(true);
            BugLocalizer.ReadJUnitResult(resultFile, testInfo);
            CoverageDataReader.ReadFile(testInfo, recordFile);

            var localizeStatements = BugLocalizer.LocalizeStatements(covInfo, testInfo,
                    "metrics/BugLocalization.py");
            Assert.That(localizeStatements, Is.Not.Null);
        }
 public MvcDotNetProjectMigrationOptions(string projectRootPath, string tempWorkingDirectoryPath, IEnumerable<string> extraDirectories, IEnumerable<string> extraFiles)
 {
     TempWorkingDirectory = new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), tempWorkingDirectoryPath));
     var projectRoot = new DirectoryInfo(projectRootPath);
     SourceWebConfig = projectRoot.GetFile("Web.config");
     SourceFiles = ListFiles(projectRoot, extraFiles);
     SourceDirectories = ListDirectories(projectRoot, extraDirectories);
     OverwriteWebConfig = delegate { };
 }
Beispiel #7
0
 public static void Transform(this IEnumerable <FileInfo> files, DirectoryInfo baseDir, DirectoryInfo targetDir, Action <FileInfo, FileInfo> transformer)
 {
     foreach (var file in files)
     {
         var relFile         = baseDir.CreateRelativePathTo(file);
         var finalTargetFile = targetDir.GetFile(relFile);
         transformer(file, finalTargetFile);
     }
 }
Beispiel #8
0
        public static void Transform(this DirectoryInfo dir, string searchPattern, SearchOption searchOption, DirectoryInfo targetDir, Action <FileInfo, FileInfo> transformer)
        {
            var files = dir.GetFiles(searchPattern, searchOption);

            foreach (var file in files)
            {
                var relFile         = dir.CreateRelativePathTo(file);
                var finalTargetFile = targetDir.GetFile(relFile);
                transformer(file, finalTargetFile);
            }
        }
Beispiel #9
0
		public static CourseSettings Load(DirectoryInfo dir)
		{
			var file = dir.GetFile("Course.xml");
			if (!file.Exists)
				return DefaultSettings;
			var settings = file.DeserializeXml<CourseSettings>();
			if (settings.DefaultLanguageVersions == null)
				settings.DefaultLanguageVersions = new Language[0];
			if (settings.Preludes == null)
				settings.Preludes = new PreludeFile[0];
			return settings;
		}
Beispiel #10
0
		private void StudentsZipIsBuildingOk(Slide slide, ProjectExerciseBlock ex)
		{
			var tempDir = new DirectoryInfo("./temp");
			try
			{
				Utils.UnpackZip(ex.StudentsZip.Content(), "./temp");
				var res = MsBuildRunner.BuildProject(settings.MsBuildSettings, tempDir.GetFile(ex.CsprojFileName).FullName, tempDir);
				if (!res.Success)
					ReportSlideError(slide, ex.CsprojFileName + " not building! " + res);
			}
			finally
			{
				tempDir.Delete(true);
			}
		}
Beispiel #11
0
		public void CreateLockFile()
		{
			var current = new DirectoryInfo(".");
			var tempFileName = CreateTempFile();
			var lockFileName = current.GetFile("lock-file").FullName;
			File.WriteAllText(lockFileName, "test");
			try
			{
				new FileInfo(tempFileName).MoveTo(lockFileName);
				throw new AssertionException("MoveTo() should create IOException if destination file already exists");
			}
			catch (IOException)
			{
			}
			File.ReadAllText(lockFileName).ShouldBeEquivalentTo("test");
		}
Beispiel #12
0
        public static void Transform(
            this DirectoryInfo dir, string searchPattern, SearchOption searchOption,
            DirectoryInfo targetDir,
            Action <FileInfo, FileInfo, Dictionary <string, string> > transformer, Dictionary <string, string> args)
        {
            var files = dir.GetFiles(searchPattern, searchOption);

            foreach (var file in files)
            {
                if (file.FullName.Contains("\\.svn\\"))
                {
                    continue;
                }
                var relFile         = dir.CreateRelativePathTo(file);
                var finalTargetFile = targetDir.GetFile(relFile);
                transformer(file, finalTargetFile, args);
            }
        }
Beispiel #13
0
        public static void DownloadBucket(string url, string targetPath, int parallelDownloads = 32)
        {
            Dictionary<string, string> etags;

            var di = new DirectoryInfo(targetPath);

            using (var s = di.GetFile("bucket.bson").Open(FileMode.OpenOrCreate))
            {
                using (var br = new BsonReader(s))
                {
                    var se = new JsonSerializer();
                    etags = se.Deserialize<Dictionary<string, string>>(br) ?? new Dictionary<string, string>();
                }
            }

            XDocument doc;
            XNamespace xmlns = "http://s3.amazonaws.com/doc/2006-03-01/";
            Console.Write("Loading S3 bucket... ");
            while (true)
            {
                var xdoc = new XmlDocument();
                xdoc.Load(url);
                var xnr = new XmlNodeReader(xdoc);
                xnr.MoveToContent();
                doc = XDocument.Load(xnr);
                Console.WriteLine("found {0} items", doc.Descendants(xmlns + "Contents").Count());
                if (!doc.Descendants(xmlns + "Contents").Any())
                {
                    continue;
                }
                break;
            }

            var actionsCompleted = 0;
            var actions = new List<Tuple<string, string>>();

            Action<Tuple<string, string>> downloadingAction = t =>
                    {
                        var etag = t.Item1;
                        var path = t.Item2;

                        var rpath = path.Replace('/', Path.DirectorySeparatorChar);

                        var fi = new FileInfo(Path.Combine(di.FullName + Path.DirectorySeparatorChar, rpath));
                        if (fi.Directory != null && !fi.Directory.Exists)
                            fi.Directory.Create();
                        else if (fi.Exists)
                            fi.Delete();

                        var b = new UriBuilder(url);
                        b.Path = b.Path.TrimEnd('/') + "/" + path;

                        while (true)
                        {
                            try
                            {
                                File.Move(Http.Download(b.Uri.ToString()), fi.FullName);
                            }
                            catch
                            {
                                continue;
                            }
                            break;
                        }

                        lock (etags)
                        {
                            etags[path] = etag;
                            actionsCompleted++;
                            Console.Write("Downloading... ({0}/{1}, {2}%)\r", actionsCompleted, actions.Count, Math.Round(100 * (float)actionsCompleted / actions.Count, 0));
                        }
                    };

            foreach (var content in doc.Descendants(xmlns + "Contents"))
            {
                var xkey = content.Element(xmlns + "Key");
                var xetag = content.Element(xmlns + "ETag");

                if (xkey == null || xetag == null)
                    continue;

                // Key as relative path
                var relpath = xkey.Value;

                // Compare etags
                var etag = xetag.Value.Trim('"');
                if (!etags.ContainsKey(relpath))
                    etags.Add(relpath, null);
                if (etags[relpath] == etag)
                    continue; // File or directory not changed

                // Local path
                var rellpath = relpath.Replace('/', Path.DirectorySeparatorChar);

                // Check if directory
                if (relpath.EndsWith("/")) // is a directory
                    Directory.CreateDirectory(Path.Combine(di.FullName + Path.DirectorySeparatorChar, rellpath));
                else
                {
                    actions.Add(new Tuple<string, string>(etag, relpath));
                }
            }

            Console.WriteLine("Starting download of {0} items.", actions.Count);
            Parallel.ForEach(actions, new ParallelOptions {
                MaxDegreeOfParallelism = 16
            }, downloadingAction);

            while (actionsCompleted < actions.Count)
                Thread.Sleep(25);

            Console.WriteLine("Download of {0} items from Amazon S3 bucket finished!", actions.Count);
            actions.Clear();

            using (var s = di.GetFile("bucket.bson").Open(FileMode.OpenOrCreate))
            {
                using (var bw = new BsonWriter(s))
                {
                    var se = new JsonSerializer();
                    se.Serialize(bw, etags);
                }
            }
        }
Beispiel #14
0
		public static void Transform(
			this DirectoryInfo dir, string searchPattern, SearchOption searchOption,
			DirectoryInfo targetDir,
			Action<FileInfo, FileInfo, Dictionary<string, string>> transformer, Dictionary<string, string> args)
		{
			var files = dir.GetFiles(searchPattern, searchOption);
			foreach (var file in files)
			{
				if (file.FullName.Contains("\\.svn\\"))
					continue;
				var relFile = dir.CreateRelativePathTo(file);
				var finalTargetFile = targetDir.GetFile(relFile);
				transformer(file, finalTargetFile, args);
			}
		}
Beispiel #15
0
		private void InitialCodeIsNotSolutionForProjExercise(ExerciseSlide slide)
		{
			var exercise = (ProjectExerciseBlock)slide.Exercise;
			var directoryName = Path.Combine(exercise.SlideFolderPath.FullName, exercise.ExerciseDir);
			var excluded = (exercise.PathsToExcludeForChecker ?? new string[0]).Concat(new[] { "bin/*", "obj/*" }).ToList();
			var exerciseDir = new DirectoryInfo(directoryName);
			var bytes = exerciseDir.ToZip(excluded, new[]
			{
				new FileContent
				{
					Path = exercise.CsprojFileName,
					Data = ProjModifier.ModifyCsproj(exerciseDir.GetFile(exercise.CsprojFileName),
						proj => ProjModifier.PrepareForChecking(proj, exercise, excluded))
				}
			});
			var result = SandboxRunner.Run(new ProjRunnerSubmission
			{
			    Id = slide.Id.ToString(),
			    ZipFileData = bytes,
			    ProjectFileName = exercise.CsprojFileName,
			    Input = "",
			    NeedRun = true
			});
			var isOk = result.Verdict.IsOneOf(Verdict.Ok, Verdict.MemoryLimit, Verdict.TimeLimit);
			if (!isOk)
				ReportSlideError(slide, "Exercise initial code verdict is not OK. RunResult = " + result);
			else if (result.Verdict == Verdict.Ok && result.Output == "")
				ReportSlideError(slide, "Exercise initial code (available to students) is solution!");
		}
		public override void RemoveLibraries(DirectoryInfo outDirInfo) {
			outDirInfo.GetFile("covman.c").Delete();
			outDirInfo.GetFile("covman.h").Delete();
		}
		public override void RemoveLibraries(DirectoryInfo outDirInfo) {
			outDirInfo.GetFile("_CoverageWriter.pyd").Delete();
			outDirInfo.GetFile("CoverageWriter.py").Delete();
		}
Beispiel #18
0
		private static void InitialCodeIsNotSolutionForProjExercise(ExerciseSlide slide)
		{
			var exercise = slide.Exercise as ProjectExerciseBlock;
			var directoryName = Path.Combine(exercise.SlideFolderPath.FullName, exercise.ExerciseDir);
			var excluded = (exercise.PathsToExcludeForChecker ?? new string[0]).Concat(new[] { "bin/*", "obj/*" }).ToList();
			var exerciseDir = new DirectoryInfo(directoryName);
			var bytes = exerciseDir.ToZip(excluded, new[]
			{
				new FileContent
				{
					Path = exercise.CsprojFileName,
					Data = ProjModifier.ModifyCsproj(exerciseDir.GetFile(exercise.CsprojFileName),
						proj => ProjModifier.PrepareForChecking(proj, exercise, excluded))
				}
			});
			var result = SandboxRunner.Run(new ProjRunnerSubmission
			{
			    Id = slide.Id.ToString(),
			    ZipFileData = bytes,
			    ProjectFileName = exercise.CsprojFileName,
			    Input = "",
			    NeedRun = true
			});

			Console.WriteLine("Result = " + result);
			Assert.AreEqual(Verdict.Ok, result.Verdict);

			Assert.AreNotEqual("", result.Output);
		}
 private byte[] GetZipBytesForChecker(string code)
 {
     var directoryName = Path.Combine(SlideFolderPath.FullName, ExerciseDir);
     List<string> excluded = (PathsToExcludeForChecker ?? new string[0]).Concat(new[] { "bin/*", "obj/*" }).ToList();
     var exerciseDir = new DirectoryInfo(directoryName);
     return exerciseDir.ToZip(excluded,
         new[]
         {
             new FileContent { Path = UserCodeFileName, Data = Encoding.UTF8.GetBytes(code) },
             new FileContent { Path = CsprojFileName,
                 Data = ProjModifier.ModifyCsproj(
                         exerciseDir.GetFile(CsprojFileName),
                         p => ProjModifier.PrepareForChecking(p, this, excluded)) }
         });
 }
		public override void RemoveLibraries(DirectoryInfo outDirInfo) {
			outDirInfo.GetFile("CoverageWriter.UM.jar");
			outDirInfo.GetFile("junit-4.8.2.jar");
			outDirInfo.GetFile("Occf.Writer.UM.Java.dll");
		}
Beispiel #21
0
		public static FileInfo CopyToDirectory(this FileInfo file, DirectoryInfo dir, bool overwrite)
		{
			var newFile = dir.GetFile(file.Name);
			file.CopyTo(newFile.FullName, overwrite);
			return newFile;
		}
		private static void AnalyzeTestResult(DirectoryInfo rootDirInfo, TestInfo testInfo) {
			var fileInfo = rootDirInfo.GetFile(OccfNames.SuccessfulTests);
			using (var reader = fileInfo.OpenText()) {
				foreach (var line in reader.ReadLines()) {
					var testCase = testInfo.TestCases.FirstOrDefault(t => t.Name.EndsWith(line));
					if (testCase != null) {
						testCase.Passed = true;
					} else {
						Console.Error.WriteLine("[WARNING] the testcase of '" + line
						                        + "' is not founded.");
					}
				}
			}
		}
 private IEnumerable<FileInfo> ListFiles(DirectoryInfo projectRoot, IEnumerable<string> extraFiles)
 {
     yield return projectRoot.GetFile("Global.asax");
     foreach (var fileName in extraFiles)
         yield return projectRoot.GetFile(fileName);
 }
Beispiel #24
0
        public static void CopyToDirectory(this FileInfo file, string dir)
        {
            var di = new DirectoryInfo(dir);

            file.CopyTo(di.GetFile(file.Name).FullName);
        }
Beispiel #25
0
		public static void Transform(this DirectoryInfo dir, string searchPattern, SearchOption searchOption, DirectoryInfo targetDir, Action<FileInfo, FileInfo> transformer)
		{
			var files = dir.GetFiles(searchPattern, searchOption);
			foreach (var file in files)
			{
				var relFile = dir.CreateRelativePathTo(file);
				var finalTargetFile = targetDir.GetFile(relFile);
				transformer(file, finalTargetFile);
			}
		}
Beispiel #26
0
		private static string GetTitle(DirectoryInfo dir)
		{
			return dir.GetFile("Title.txt").ContentAsUtf8();
		}
Beispiel #27
0
		public static void CopyToDirectory(this FileInfo file, string dir)
		{
			var di = new DirectoryInfo(dir);
			file.CopyTo(di.GetFile(file.Name).FullName);
		}