Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f9107cf
Removed RestoreCommand
khellang May 26, 2013
f855757
Fixed failing test
khellang May 26, 2013
f1dccbf
Removed bin folder logic in CleanCommand
khellang May 26, 2013
1b3ad3a
Added SearchOption parameter to FileSystem.EnumerateFiles
khellang May 26, 2013
ecb33fb
Changed registering of MEF composable part catalog
khellang May 26, 2013
624c6bc
Added common base class for ExecuteScript- and ExecuteReplCommand
khellang May 26, 2013
83f21b5
Added variable
khellang May 26, 2013
0b655d1
Merged upstream changes
khellang May 27, 2013
c8df9c9
Removed ScriptCommand base class and renamed IAssemblyName to IAssemb…
khellang May 27, 2013
7540fc3
Added ScriptManifest, InstallCommand writes the manifest, while Assem…
khellang May 27, 2013
e583fe0
Fixed bug where manifest wasn't deserialized
khellang May 27, 2013
3f72a1f
Added more logging
khellang May 27, 2013
a07ea4d
Refactored out check for managed assemblies into IAssemblyUtility, ad…
khellang May 27, 2013
0c3b6b8
Merge branch 'dev' into 1
khellang May 30, 2013
21458b9
Fixed bad merge
khellang May 30, 2013
6df6a89
Merge branch 'dev' into 1
khellang May 30, 2013
5416721
Fixed bug where all assemblies inside working dir was picked up by MEF
khellang Jun 6, 2013
c8e5712
Removed manifest stuff after perf. testing NuGet API alternative
khellang Jun 6, 2013
2305c93
Merge branch 'dev' into 1
khellang Jun 6, 2013
f007f42
Fixed failing test
khellang Jun 6, 2013
9b850d4
Renamed method to a more appropriate name :)
khellang Jun 6, 2013
d46626a
Added caching of assembly paths in AssemblyResolver
khellang Jun 6, 2013
c3f2403
Removed static cache because of failing tests
khellang Jun 6, 2013
80388d0
Trigger CI build
khellang Jun 6, 2013
ba603fe
Merged upstream changes
khellang Jun 9, 2013
12a0490
Fixed failing build after merge
khellang Jun 9, 2013
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions src/ScriptCs.Core/AssemblyName.cs

This file was deleted.

84 changes: 84 additions & 0 deletions src/ScriptCs.Core/AssemblyResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;

using Common.Logging;

namespace ScriptCs
{
public class AssemblyResolver : IAssemblyResolver
{
private readonly Dictionary<string, List<string>> _assemblyPathCache = new Dictionary<string, List<string>>();

private readonly IFileSystem _fileSystem;

private readonly IPackageAssemblyResolver _packageAssemblyResolver;

private readonly ILog _logger;

private readonly IAssemblyUtility _assemblyUtility;

public AssemblyResolver(
IFileSystem fileSystem,
IPackageAssemblyResolver packageAssemblyResolver,
IAssemblyUtility assemblyUtility,
ILog logger)
{
_fileSystem = fileSystem;
_packageAssemblyResolver = packageAssemblyResolver;
_logger = logger;
_assemblyUtility = assemblyUtility;
}

public IEnumerable<string> GetAssemblyPaths(string path)
{
Guard.AgainstNullArgument("path", path);

List<string> assemblies;
if (_assemblyPathCache.TryGetValue(path, out assemblies)) return assemblies;

var packageAssemblies = GetPackageAssemblies(path);
var binAssemblies = GetBinAssemblies(path);

assemblies = packageAssemblies.Union(binAssemblies).ToList();
_assemblyPathCache.Add(path, assemblies);

return assemblies;
}

private IEnumerable<string> GetBinAssemblies(string path)
{
var binFolder = Path.Combine(path, Constants.BinFolder);
if (!_fileSystem.DirectoryExists(binFolder))
return Enumerable.Empty<string>();

var assemblies = _fileSystem.EnumerateFiles(binFolder, "*.dll")
.Union(_fileSystem.EnumerateFiles(binFolder, "*.exe"))
.Where(_assemblyUtility.IsManagedAssembly)
.ToList();

foreach (var assembly in assemblies)
{
_logger.DebugFormat("Found assembly in bin folder: {0}", Path.GetFileName(assembly));
}

return assemblies;
}

private IEnumerable<string> GetPackageAssemblies(string path)
{
var packagesFolder = Path.Combine(path, Constants.PackagesFolder);
if (!_fileSystem.DirectoryExists(packagesFolder))
return Enumerable.Empty<string>();

var assemblies = _packageAssemblyResolver.GetAssemblyNames(path).ToList();

foreach (var packageAssembly in assemblies)
{
_logger.DebugFormat("Found package assembly: {0}", Path.GetFileName(packageAssembly));
}

return assemblies;
}
}
}
21 changes: 21 additions & 0 deletions src/ScriptCs.Core/AssemblyUtility.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.Reflection;

namespace ScriptCs
{
public class AssemblyUtility : IAssemblyUtility
{
public bool IsManagedAssembly(string path)
{
try
{
AssemblyName.GetAssemblyName(path);
return true;
}
catch (BadImageFormatException)
{
return false;
}
}
}
}
1 change: 0 additions & 1 deletion src/ScriptCs.Core/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ public static class Constants
public const string PackagesFolder = "packages";
public const string BinFolder = "bin";
public const string DefaultRepositoryUrl = "https://nuget.org/api/v2/";

public const string DebugContractName = "Debug";
public const string RunContractName = "Run";
}
Expand Down
9 changes: 7 additions & 2 deletions src/ScriptCs.Core/FileSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ namespace ScriptCs
{
public class FileSystem : IFileSystem
{
public IEnumerable<string> EnumerateFiles(string dir, string searchPattern)
public IEnumerable<string> EnumerateFiles(string dir, string searchPattern, SearchOption searchOption = SearchOption.AllDirectories)
{
return Directory.EnumerateFiles(dir, searchPattern, SearchOption.AllDirectories);
return Directory.EnumerateFiles(dir, searchPattern, searchOption);
}

public void Copy(string source, string dest, bool overwrite)
Expand Down Expand Up @@ -81,6 +81,11 @@ public IEnumerable<string> SplitLines(string value)
return value.Split(new[] { NewLine }, StringSplitOptions.None);
}

public void WriteToFile(string path, string text)
{
File.WriteAllText(path, text);
}

public Stream CreateFileStream(string filePath, FileMode mode)
{
return new FileStream(filePath, mode);
Expand Down
7 changes: 0 additions & 7 deletions src/ScriptCs.Core/IAssemblyName.cs

This file was deleted.

9 changes: 9 additions & 0 deletions src/ScriptCs.Core/IAssemblyResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Collections.Generic;

namespace ScriptCs
{
public interface IAssemblyResolver
{
IEnumerable<string> GetAssemblyPaths(string path);
}
}
7 changes: 7 additions & 0 deletions src/ScriptCs.Core/IAssemblyUtility.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace ScriptCs
{
public interface IAssemblyUtility
{
bool IsManagedAssembly(string assemblyPath);
}
}
4 changes: 3 additions & 1 deletion src/ScriptCs.Core/IFileSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace ScriptCs
{
public interface IFileSystem
{
IEnumerable<string> EnumerateFiles(string dir, string search);
IEnumerable<string> EnumerateFiles(string dir, string search, SearchOption searchOption = SearchOption.AllDirectories);

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

Expand Down Expand Up @@ -39,6 +39,8 @@ public interface IFileSystem
void FileDelete(string path);

IEnumerable<string> SplitLines(string value);

void WriteToFile(string path, string text);

Stream CreateFileStream(string filePath, FileMode mode);
}
Expand Down
6 changes: 4 additions & 2 deletions src/ScriptCs.Core/ScriptCs.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyName.cs" />
<Compile Include="AssemblyResolver.cs" />
<Compile Include="AssemblyUtility.cs" />
<Compile Include="DebugScriptExecutor.cs" />
<Compile Include="Exceptions\ScriptExecutionException.cs" />
<Compile Include="Exceptions\MissingAssemblyException.cs" />
Expand All @@ -56,7 +57,8 @@
<Compile Include="FilePreProcessorResult.cs" />
<Compile Include="FileSystem.cs" />
<Compile Include="Guard.cs" />
<Compile Include="IAssemblyName.cs" />
<Compile Include="IAssemblyResolver.cs" />
<Compile Include="IAssemblyUtility.cs" />
<Compile Include="IFilePreProcessor.cs" />
<Compile Include="IFileSystem.cs" />
<Compile Include="IPackageAssemblyResolver.cs" />
Expand Down
43 changes: 3 additions & 40 deletions src/ScriptCs/Command/CleanCommand.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
using System;
using System.IO;
using System.Linq;
using Common.Logging;

namespace ScriptCs.Command
{
internal class CleanCommand : ICleanCommand
{
private readonly string _scriptName;

private readonly IFileSystem _fileSystem;
private readonly IPackageAssemblyResolver _packageAssemblyResolver;

private readonly ILog _logger;

public CleanCommand(string scriptName,
IFileSystem fileSystem,
IPackageAssemblyResolver packageAssemblyResolver, ILog logger)
public CleanCommand(string scriptName, IFileSystem fileSystem, ILog logger)
{
_scriptName = scriptName;
_fileSystem = fileSystem;
_packageAssemblyResolver = packageAssemblyResolver;
_logger = logger;
}

Expand All @@ -29,32 +26,11 @@ public CommandResult Execute()
var workingDirectory = _fileSystem.GetWorkingDirectory(_scriptName);
_logger.TraceFormat("Working directory: {0}", workingDirectory);

var binFolder = Path.Combine(workingDirectory, Constants.BinFolder);
_logger.TraceFormat("Bin folder: {0}", binFolder);

var packageFolder = Path.Combine(workingDirectory, Constants.PackagesFolder);
_logger.TraceFormat("Packages folder: {0}", packageFolder);

try
{
if (_fileSystem.DirectoryExists(binFolder))
{
var packages = _packageAssemblyResolver.GetAssemblyNames(workingDirectory);

foreach (var package in packages)
{
_logger.DebugFormat("Deleting file: {0}", package);
DeleteFile(package, binFolder);
}

var remaining = _fileSystem.EnumerateFiles(binFolder, "*.*").Any();
if (!remaining)
{
_logger.DebugFormat("Deleting bin directory: {0}", binFolder);
_fileSystem.DeleteDirectory(binFolder);
}
}

if (_fileSystem.DirectoryExists(packageFolder))
{
_logger.DebugFormat("Deleting package directory: {0}", packageFolder);
Expand All @@ -70,18 +46,5 @@ public CommandResult Execute()
return CommandResult.Error;
}
}

private void DeleteFile(string package, string binFolder)
{
var assemblyFileName = Path.GetFileName(package);
if (assemblyFileName == null) return;

var destFile = Path.Combine(binFolder, assemblyFileName);

if (_fileSystem.FileExists(destFile))
{
_fileSystem.FileDelete(destFile);
}
}
}
}
43 changes: 12 additions & 31 deletions src/ScriptCs/Command/CommandFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,14 @@ public ICommand CreateCommand(ScriptCsArgs args, string[] scriptArgs)
if (args.Repl)
{
var replCommand = new ExecuteReplCommand(
_scriptServiceRoot.FileSystem, _scriptServiceRoot.ScriptPackResolver,
_scriptServiceRoot.Engine, _scriptServiceRoot.FilePreProcessor, _scriptServiceRoot.Logger, _scriptServiceRoot.Console,
_scriptServiceRoot.AssemblyName);
_scriptServiceRoot.FileSystem,
_scriptServiceRoot.ScriptPackResolver,
_scriptServiceRoot.Engine,
_scriptServiceRoot.FilePreProcessor,
_scriptServiceRoot.Logger,
_scriptServiceRoot.Console,
_scriptServiceRoot.AssemblyResolver);

return replCommand;
}

Expand All @@ -38,7 +43,7 @@ public ICommand CreateCommand(ScriptCsArgs args, string[] scriptArgs)
_scriptServiceRoot.Executor,
_scriptServiceRoot.ScriptPackResolver,
_scriptServiceRoot.Logger,
_scriptServiceRoot.AssemblyName);
_scriptServiceRoot.AssemblyResolver);

var fileSystem = _scriptServiceRoot.FileSystem;
var currentDirectory = fileSystem.CurrentDirectory;
Expand All @@ -55,24 +60,7 @@ public ICommand CreateCommand(ScriptCsArgs args, string[] scriptArgs)
_scriptServiceRoot.PackageInstaller,
_scriptServiceRoot.Logger);

var restoreCommand = new RestoreCommand(
args.ScriptName,
_scriptServiceRoot.FileSystem,
_scriptServiceRoot.PackageAssemblyResolver,
_scriptServiceRoot.Logger);

return new CompositeCommand(installCommand, restoreCommand, executeCommand);
}

if (args.Restore)
{
var restoreCommand = new RestoreCommand(
args.ScriptName,
_scriptServiceRoot.FileSystem,
_scriptServiceRoot.PackageAssemblyResolver,
_scriptServiceRoot.Logger);

return new CompositeCommand(restoreCommand, executeCommand);
return new CompositeCommand(installCommand, executeCommand);
}

return executeCommand;
Expand All @@ -88,22 +76,16 @@ public ICommand CreateCommand(ScriptCsArgs args, string[] scriptArgs)
_scriptServiceRoot.PackageInstaller,
_scriptServiceRoot.Logger);

var restoreCommand = new RestoreCommand(
args.Install,
_scriptServiceRoot.FileSystem,
_scriptServiceRoot.PackageAssemblyResolver,
_scriptServiceRoot.Logger);

var currentDirectory = _scriptServiceRoot.FileSystem.CurrentDirectory;
var packageFile = Path.Combine(currentDirectory, Constants.PackagesFile);

if (!_scriptServiceRoot.FileSystem.FileExists(packageFile))
{
var saveCommand = new SaveCommand(_scriptServiceRoot.PackageAssemblyResolver);
return new CompositeCommand(installCommand, restoreCommand, saveCommand);
return new CompositeCommand(installCommand, saveCommand);
}

return new CompositeCommand(installCommand, restoreCommand);
return installCommand;
}

if (args.Clean)
Expand All @@ -113,7 +95,6 @@ public ICommand CreateCommand(ScriptCsArgs args, string[] scriptArgs)
var cleanCommand = new CleanCommand(
args.ScriptName,
_scriptServiceRoot.FileSystem,
_scriptServiceRoot.PackageAssemblyResolver,
_scriptServiceRoot.Logger);

return new CompositeCommand(saveCommand, cleanCommand);
Expand Down
Loading