Skip to content

Commit

Permalink
Merge pull request #907 from scriptcs/dev
Browse files Browse the repository at this point in the history
merge dev to master
  • Loading branch information
adamralph committed Jan 28, 2015
2 parents c2f2318 + 483e284 commit dca555d
Show file tree
Hide file tree
Showing 86 changed files with 2,820 additions and 1,065 deletions.
5 changes: 4 additions & 1 deletion README.md
@@ -1,5 +1,8 @@
# scriptcs [![Chocolatey Version](http://img.shields.io/chocolatey/v/scriptcs.svg?style=flat)](http://chocolatey.org/packages/scriptcs) [![Chocolatey Downloads](http://img.shields.io/chocolatey/dt/scriptcs.svg?style=flat)](http://chocolatey.org/packages/scriptcs) [![*nix Build Status](http://img.shields.io/travis/scriptcs/scriptcs/dev.svg?style=flat)](https://travis-ci.org/scriptcs/scriptcs) [![Windows Build Status](http://img.shields.io/teamcity/codebetter/bt949.svg?style=flat)](http://ci.scriptcs.net)
# scriptcs

[![Chocolatey Version](http://img.shields.io/chocolatey/v/scriptcs.svg?style=flat-square)](http://chocolatey.org/packages/scriptcs) [![Chocolatey Downloads](http://img.shields.io/chocolatey/dt/scriptcs.svg?style=flat-square)](http://chocolatey.org/packages/scriptcs) [![NuGet version (ScriptCs.Hosting)](https://img.shields.io/nuget/v/ScriptCs.Hosting.svg?style=flat-square)](https://www.nuget.org/packages/ScriptCs.Hosting/)

[![*nix Build Status](http://img.shields.io/travis/scriptcs/scriptcs/dev.svg?style=flat-square&label=linux-build)](https://travis-ci.org/scriptcs/scriptcs) [![Windows Build Status](http://img.shields.io/teamcity/codebetter/Scriptcs_Ci.svg?style=flat-square&label=windows-build)](http://ci.scriptcs.net) [![Coverity Scan Build Status](https://img.shields.io/badge/coverity-passed-brightgreen.svg?style=flat-square)](https://scan.coverity.com/projects/2356)

## What is it?

Expand Down
2 changes: 1 addition & 1 deletion build/ScriptCs.Version.props
Expand Up @@ -4,7 +4,7 @@
<!-- Use the properties below to control the version of the assemblies created. -->
<PropertyGroup>
<MajorVersion>0</MajorVersion>
<MinorVersion>12</MinorVersion>
<MinorVersion>13</MinorVersion>
<PatchVersion>0</PatchVersion>

<!-- Change this to set the build quality of the project. Use values like "alpha", "beta", "rc1", "rtm", etc. -->
Expand Down
15 changes: 11 additions & 4 deletions src/ScriptCs.Contracts/IFileSystem.cs
Expand Up @@ -6,14 +6,19 @@ namespace ScriptCs.Contracts
{
public interface IFileSystem
{
IEnumerable<string> EnumerateFiles(string dir, string search, SearchOption searchOption = SearchOption.AllDirectories);
IEnumerable<string> EnumerateFiles(
string dir, string search, SearchOption searchOption = SearchOption.AllDirectories);

IEnumerable<string> EnumerateDirectories(string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories);
IEnumerable<string> EnumerateDirectories(
string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories);

IEnumerable<string> EnumerateFilesAndDirectories(string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories);
IEnumerable<string> EnumerateFilesAndDirectories(
string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories);

void Copy(string source, string dest, bool overwrite);

void CopyDirectory(string source, string dest, bool overwrite);

bool DirectoryExists(string path);

void CreateDirectory(string path, bool hidden = false);
Expand All @@ -38,6 +43,8 @@ public interface IFileSystem

void Move(string source, string dest);

void MoveDirectory(string source, string dest);

bool FileExists(string path);

void FileDelete(string path);
Expand Down Expand Up @@ -66,4 +73,4 @@ public interface IFileSystem

string GlobalOptsFile { get; }
}
}
}
7 changes: 7 additions & 0 deletions src/ScriptCs.Contracts/IFileSystemMigrator.cs
@@ -0,0 +1,7 @@
namespace ScriptCs.Contracts
{
public interface IFileSystemMigrator
{
void Migrate();
}
}
1 change: 1 addition & 0 deletions src/ScriptCs.Contracts/ScriptCs.Contracts.csproj
Expand Up @@ -62,6 +62,7 @@
<Compile Include="IFileParser.cs" />
<Compile Include="IFilePreProcessor.cs" />
<Compile Include="IFileSystem.cs" />
<Compile Include="IFileSystemMigrator.cs" />
<Compile Include="IInstallationProvider.cs" />
<Compile Include="ILineProcessor.cs" />
<Compile Include="IModule.cs" />
Expand Down
2 changes: 1 addition & 1 deletion src/ScriptCs.Core/AssemblyResolver.cs
Expand Up @@ -70,7 +70,7 @@ public IEnumerable<string> GetBinAssemblyPaths(string path)
return Enumerable.Empty<string>();
}

var assemblies = _fileSystem.EnumerateBinaries(binFolder)
var assemblies = _fileSystem.EnumerateBinaries(binFolder, SearchOption.TopDirectoryOnly)
.Where(f => _assemblyUtility.IsManagedAssembly(f))
.ToList();

Expand Down
53 changes: 41 additions & 12 deletions src/ScriptCs.Core/FileSystem.cs
Expand Up @@ -7,17 +7,20 @@ namespace ScriptCs
{
public class FileSystem : IFileSystem
{
public virtual IEnumerable<string> EnumerateFiles(string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
public virtual IEnumerable<string> EnumerateFiles(
string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
{
return Directory.EnumerateFiles(dir, searchPattern, searchOption);
}

public virtual IEnumerable<string> EnumerateDirectories(string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
public virtual IEnumerable<string> EnumerateDirectories(
string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
{
return Directory.EnumerateDirectories(dir, searchPattern, searchOption);
}

public virtual IEnumerable<string> EnumerateFilesAndDirectories(string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
public virtual IEnumerable<string> EnumerateFilesAndDirectories(
string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
{
return Directory.EnumerateFileSystemEntries(dir, searchPattern, searchOption);
}
Expand All @@ -27,6 +30,28 @@ public virtual void Copy(string source, string dest, bool overwrite)
File.Copy(source, dest, overwrite);
}

public virtual void CopyDirectory(string source, string dest, bool overwrite)
{
// NOTE: adding guards since the exceptions thrown by System.IO would be confusing
Guard.AgainstNullArgument("source", source);
Guard.AgainstNullArgument("dest", dest);

if (!Directory.Exists(dest))
{
Directory.CreateDirectory(dest);
}

foreach (var file in Directory.GetFiles(source))
{
File.Copy(file, Path.Combine(dest, Path.GetFileName(file)), overwrite);
}

foreach (var directory in Directory.GetDirectories(source))
{
CopyDirectory(directory, Path.Combine(dest, Path.GetFileName(directory)), overwrite);
}
}

public virtual bool DirectoryExists(string path)
{
return Directory.Exists(path);
Expand Down Expand Up @@ -83,6 +108,11 @@ public virtual void Move(string source, string dest)
File.Move(source, dest);
}

public virtual void MoveDirectory(string source, string dest)
{
Directory.Move(source, dest);
}

public virtual bool FileExists(string path)
{
return File.Exists(path);
Expand Down Expand Up @@ -119,7 +149,8 @@ public virtual string GlobalFolder
{
get
{
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "scriptcs");
return Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "scriptcs");
}
}

Expand All @@ -134,9 +165,7 @@ public virtual string GetWorkingDirectory(string path)

if (FileExists(realPath) || DirectoryExists(realPath))
{
var attributes = File.GetAttributes(realPath);

if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
if ((File.GetAttributes(realPath) & FileAttributes.Directory) == FileAttributes.Directory)
{
return realPath;
}
Expand All @@ -159,27 +188,27 @@ public virtual string HostBin

public virtual string BinFolder
{
get { return "bin"; }
get { return "scriptcs_bin"; }
}

public virtual string DllCacheFolder
{
get { return ".cache"; }
get { return ".scriptcs_cache"; }
}

public virtual string PackagesFile
{
get { return "packages.config"; }
get { return "scriptcs_packages.config"; }
}

public virtual string PackagesFolder
{
get { return "packages"; }
get { return "scriptcs_packages"; }
}

public virtual string NugetFile
{
get { return "nuget.config"; }
get { return "scriptcs_nuget.config"; }
}

public virtual string GlobalOptsFile
Expand Down
95 changes: 95 additions & 0 deletions src/ScriptCs.Core/FileSystemMigrator.cs
@@ -0,0 +1,95 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Common.Logging;
using ScriptCs.Contracts;

namespace ScriptCs
{
public class FileSystemMigrator : IFileSystemMigrator
{
private readonly IFileSystem _fileSystem;
private readonly ILog _logger;
private readonly Dictionary<string, string> _fileCopies;
private readonly Dictionary<string, string> _directoryMoves;
private readonly Dictionary<string, string> _directoryCopies;

public FileSystemMigrator(IFileSystem fileSystem, ILog logger)
{
Guard.AgainstNullArgument("fileSystem", fileSystem);
Guard.AgainstNullArgument("logger", logger);

_fileSystem = fileSystem;
_logger = logger;

_fileCopies = new Dictionary<string, string>
{
{ "packages.config", _fileSystem.PackagesFile },
{ "nuget.config", _fileSystem.NugetFile },
};

_directoryMoves = new Dictionary<string, string>
{
{ ".cache", _fileSystem.DllCacheFolder },
};

_directoryCopies = new Dictionary<string, string>
{
{ "bin", _fileSystem.BinFolder },
{ "packages", _fileSystem.PackagesFolder },
};
}

public void Migrate()
{
foreach (var copy in _fileCopies
.Where(copy => _fileSystem.FileExists(copy.Value)))
{
_logger.DebugFormat(
CultureInfo.InvariantCulture,
"Not performing migration since file '{0}' already exists.",
copy.Value);

return;
}

foreach (var action in _directoryMoves.Concat(_directoryCopies)
.Where(action => _fileSystem.DirectoryExists(action.Value)))
{
_logger.DebugFormat(
CultureInfo.InvariantCulture,
"Not performing migration since directory '{0}' already exists.",
action.Value);

return;
}

foreach (var copy in _fileCopies
.Where(copy => _fileSystem.FileExists(copy.Key)))
{
_logger.InfoFormat(
CultureInfo.InvariantCulture, "Copying file '{0}' to '{1}'...", copy.Key, copy.Value);

_fileSystem.Copy(copy.Key, copy.Value, false);
}

foreach (var move in _directoryMoves
.Where(move => _fileSystem.DirectoryExists(move.Key)))
{
_logger.InfoFormat(
CultureInfo.InvariantCulture, "Moving directory '{0}' to '{1}'...", move.Key, move.Value);

_fileSystem.MoveDirectory(move.Key, move.Value);
}

foreach (var copy in _directoryCopies
.Where(copy => _fileSystem.DirectoryExists(copy.Key)))
{
_logger.InfoFormat(
CultureInfo.InvariantCulture, "Copying directory '{0}' to '{1}'...", copy.Key, copy.Value);

_fileSystem.CopyDirectory(copy.Key, copy.Value, false);
}
}
}
}
1 change: 1 addition & 0 deletions src/ScriptCs.Core/ScriptCs.Core.csproj
Expand Up @@ -51,6 +51,7 @@
<Compile Include="AssemblyInfo.cs" />
<Compile Include="AssemblyResolver.cs" />
<Compile Include="AssemblyUtility.cs" />
<Compile Include="FileSystemMigrator.cs" />
<Compile Include="ReplCommands\AliasCommand.cs" />
<Compile Include="ReplCommands\CdCommand.cs" />
<Compile Include="ReplCommands\ClearCommand.cs" />
Expand Down
3 changes: 3 additions & 0 deletions src/ScriptCs.Core/ScriptServices.cs
Expand Up @@ -19,6 +19,7 @@ public class ScriptServices
ILog logger,
IAssemblyResolver assemblyResolver,
IEnumerable<IReplCommand> replCommands,
IFileSystemMigrator fileSystemMigrator,
IConsole console = null,
IInstallationProvider installationProvider = null)
{
Expand All @@ -36,6 +37,7 @@ public class ScriptServices
AssemblyResolver = assemblyResolver;
InstallationProvider = installationProvider;
ReplCommands = replCommands;
FileSystemMigrator = fileSystemMigrator;
}

public IFileSystem FileSystem { get; private set; }
Expand All @@ -52,5 +54,6 @@ public class ScriptServices
public IAssemblyResolver AssemblyResolver { get; private set; }
public IInstallationProvider InstallationProvider { get; private set; }
public IEnumerable<IReplCommand> ReplCommands { get; private set; }
public IFileSystemMigrator FileSystemMigrator { get; private set; }
}
}
40 changes: 7 additions & 33 deletions src/ScriptCs.Engine.Mono/MonoScriptEngine.cs
Expand Up @@ -8,7 +8,7 @@
using Mono.Collections.Generic;
using MonoCSharp::Mono.CSharp;
using ScriptCs.Contracts;
using ScriptCs.Engine.Mono.Parser;
using ScriptCs.Engine.Mono.Segmenter;

namespace ScriptCs.Engine.Mono
{
Expand Down Expand Up @@ -126,39 +126,15 @@ protected virtual ScriptResult Execute(string code, Evaluator session)

try
{
var parser = new SyntaxParser();
var parseResult = parser.Parse(code);

if (parseResult.TypeDeclarations != null && parseResult.TypeDeclarations.Any())
{
foreach (var @class in parseResult.TypeDeclarations)
{
session.Compile(@class);
}
}

if (parseResult.MethodExpressions != null && parseResult.MethodExpressions.Any())
object scriptResult = null;
var segmenter = new ScriptSegmenter();
foreach (var segment in segmenter.Segment(code))
{
foreach (var prototype in parseResult.MethodPrototypes)
{
session.Run(prototype);
}

foreach (var method in parseResult.MethodExpressions)
{
session.Run(method);
}
}

if (!string.IsNullOrWhiteSpace(parseResult.Evaluations))
{
object scriptResult;
bool resultSet;

session.Evaluate(parseResult.Evaluations, out scriptResult, out resultSet);

return new ScriptResult(scriptResult);
session.Evaluate(segment.Code, out scriptResult, out resultSet);
}

return new ScriptResult(returnValue: scriptResult);
}
catch (AggregateException ex)
{
Expand All @@ -168,8 +144,6 @@ protected virtual ScriptResult Execute(string code, Evaluator session)
{
return new ScriptResult(executionException: ex);
}

return ScriptResult.Empty;
}

private void ImportNamespaces(IEnumerable<string> namespaces, SessionState<Evaluator> sessionState)
Expand Down

0 comments on commit dca555d

Please sign in to comment.