Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file modified Solution/.vs/DirectoriesComparator/v16/TestStore/0/000.testlog
Binary file not shown.
Binary file not shown.
Binary file not shown.
30 changes: 28 additions & 2 deletions Solution/DirectoriesComparator.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30330.147
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectoriesComparator", "DirectoriesComparator\DirectoriesComparator.csproj", "{D4A43F32-7DC7-4E4D-96D8-D5647F8C0FF8}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectoriesComparator .net4", "DirectoriesComparator\DirectoriesComparator .net4.csproj", "{D4A43F32-7DC7-4E4D-96D8-D5647F8C0FF8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject1", "TestProject1\TestProject1.csproj", "{15CDC8B8-1FD8-48E6-ABC2-0FF13D66EC95}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests .net4", "TestProject1\Tests .net4.csproj", "{15CDC8B8-1FD8-48E6-ABC2-0FF13D66EC95}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9EA941C2-13E0-4277-9ADE-8DA9C08BE544}"
ProjectSection(SolutionItems) = preProject
Expand All @@ -14,6 +14,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectoriesComparator .net4.8", "DirectoriesComparator\DirectoriesComparator .net4.8.csproj", "{19C06DD7-79C3-4410-8708-1B9BBD4917D3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests .net4.8", "TestProject1\Tests .net4.8.csproj", "{F4758CD8-217F-43E2-BC9F-1840619B47C8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -45,6 +49,28 @@ Global
{15CDC8B8-1FD8-48E6-ABC2-0FF13D66EC95}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{15CDC8B8-1FD8-48E6-ABC2-0FF13D66EC95}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{15CDC8B8-1FD8-48E6-ABC2-0FF13D66EC95}.Release|x86.ActiveCfg = Release|Any CPU
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Debug|Any CPU.ActiveCfg = Debug|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Debug|Mixed Platforms.Build.0 = Debug|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Debug|x86.ActiveCfg = Debug|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Debug|x86.Build.0 = Debug|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Release|Any CPU.ActiveCfg = Release|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Release|Mixed Platforms.ActiveCfg = Release|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Release|Mixed Platforms.Build.0 = Release|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Release|x86.ActiveCfg = Release|x86
{19C06DD7-79C3-4410-8708-1B9BBD4917D3}.Release|x86.Build.0 = Release|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Debug|Mixed Platforms.Build.0 = Debug|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Debug|x86.ActiveCfg = Debug|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Debug|x86.Build.0 = Debug|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Release|Any CPU.Build.0 = Release|Any CPU
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Release|Mixed Platforms.ActiveCfg = Release|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Release|Mixed Platforms.Build.0 = Release|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Release|x86.ActiveCfg = Release|x86
{F4758CD8-217F-43E2-BC9F-1840619B47C8}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
92 changes: 92 additions & 0 deletions Solution/DirectoriesComparator/Auxiliary/Formatter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
using System;

namespace DirectoriesComparator
{
public class Formatter
{
public static string SizeToFormatedString(long bytes, bool noFractionalDigits)
{
if (bytes == 0)
return 0.ToString();

const string kilo = "KB";
const string mega = "MB";
const string giga = "GB";
const string tera = "TB";
const string peta = "PB";
const string exa = "EB";
const string zetta = "ZB";
const string yotta = "YB";

var resultValue = noFractionalDigits ? "{0:.} {1}" : "{0:.##} {1}";
var dimensionValue = "bytes";
var convertedValue = 0.0;


// bytes
if (bytes < Math.Pow(2, 10))
{
convertedValue = bytes;
} // kilo
else if (bytes < Math.Pow(2, 20))
{
convertedValue = bytes / Math.Pow(2, 10);
dimensionValue = kilo;
} // mega
else if (bytes < Math.Pow(2, 30))
{
convertedValue = bytes / Math.Pow(2, 20);
dimensionValue = mega;
} // giga
else if (bytes < Math.Pow(2, 40))
{
convertedValue = bytes / Math.Pow(2, 30);
dimensionValue = giga;
} // tera
else if (bytes < Math.Pow(2, 50))
{
convertedValue = bytes / Math.Pow(2, 40);
dimensionValue = tera;
} // peta
else if (bytes < Math.Pow(2, 60))
{
convertedValue = bytes / Math.Pow(2, 50);
dimensionValue = peta;
} // exa
else if (bytes < Math.Pow(2, 70))
{
convertedValue = bytes / Math.Pow(2, 60);
dimensionValue = exa;
} // zetta
else if (bytes < Math.Pow(2, 80))
{
convertedValue = bytes / Math.Pow(2, 70);
dimensionValue = zetta;
} // yotta
else if (bytes < Math.Pow(2, 90))
{
convertedValue = bytes / Math.Pow(2, 80);
dimensionValue = yotta;
}

return string.Format(resultValue, convertedValue, dimensionValue);
}

public static string Unquote(string p_str)
{
if (p_str.Length < 2)
{
return p_str;
}

if ((p_str.StartsWith("\"") && p_str.EndsWith("\""))
|| (p_str.StartsWith("\'") && p_str.EndsWith("\'"))
)
{
return p_str.Substring(1, p_str.Length - 2);
}

return p_str;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,48 +1,57 @@
using DirectoriesComparator.CommandLine.Parser.States;
using System;
using DirectoriesComparator.CommandLine.Parser.States;

namespace DirectoriesComparator.CommandLine.Parser
{
public static class CommandLineParser
{
public const string SourcePrefix = "/source:";
public const string TargetPrefix = "/target:";
public const string MinFileSizePrefix = "/minsize:";

public static Parameters ParseCommandLine( string p_Args )
{
var result = new Parameters();

if (string.IsNullOrEmpty( p_Args ))
{
//result.Empty = true; default value for that property
return result;
}
public class CommandLineParser
{
public const string SourcePrefix = "/source:";
public const string TargetPrefix = "/target:";
public const string MinFileSizePrefix = "/minsize:";

string args = p_Args.Trim().ToLower();
public Parameters ParseCommandLine(string p_Args)
{
var result = new Parameters();

bool quotesOpened;
var words = ParametersSplitter.SplitString(args, out quotesOpened);
if (quotesOpened)
{
result.Empty = false;
result.Incorrect = true;
return result;
}
if (string.IsNullOrEmpty(p_Args))
{
//result.Empty = true; default value for that property
return result;
}

var parserContext = new ParsingContext( result );
AbstractState currentState = InitialState.Item;
foreach (var word in words)
{
currentState = currentState.ProcessWord( word, parserContext );
string args = p_Args.Trim().ToLower();

if (currentState is ErrorState)
bool quotesOpened;
var words = ParametersSplitter.SplitString(args, out quotesOpened);
if (quotesOpened)
{
break;
result.Empty = false;
result.Incorrect = true;
return result;
}
}

var parserContext = new ParsingContext(result);
SetupParserContext(parserContext);
AbstractState currentState = InitialState.Item;
foreach (var word in words)
{
currentState = currentState.ProcessWord(word, parserContext);

if (currentState is ErrorState)
{
break;
}
}


return result;
}

public Func<string> GetAppFileFullNameOverride;

return result;
}
}
private void SetupParserContext(ParsingContext p_parserContext)
{
p_parserContext.GetAppFileFullNameOverride = GetAppFileFullNameOverride;
}
}
}
42 changes: 28 additions & 14 deletions Solution/DirectoriesComparator/CommandLine/Parser/ParsingContext.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,34 @@
namespace DirectoriesComparator.CommandLine.Parser
using System;

namespace DirectoriesComparator.CommandLine.Parser
{
internal class ParsingContext
{
private readonly Parameters m_Parameters;
public class ParsingContext
{
private readonly Parameters m_Parameters;

public Parameters Parameters
{
get { return m_Parameters; }
}

public Parameters Parameters
{
get { return m_Parameters; }
}
public bool ApplicationFileSpecified { get; set; }

public bool ApplicationFileSpecified { get; set; }
public ParsingContext(Parameters p_Parameters)
{
m_Parameters = p_Parameters;
}

public Func<string> GetAppFileFullNameOverride;
public string GetAppFileFullName()
{
if (GetAppFileFullNameOverride != null)
{
return GetAppFileFullNameOverride();
}
var currentProcess = System.Diagnostics.Process.GetCurrentProcess();

public ParsingContext( Parameters p_Parameters )
{
m_Parameters = p_Parameters;
}
}
var appFileFullName = currentProcess.MainModule.FileName.ToLower();
return appFileFullName;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ public static AbstractState Item

public override AbstractState ProcessWord( string p_Word, ParsingContext p_ParsingContext )
{
var currentProcess = System.Diagnostics.Process.GetCurrentProcess();
var appFileFullName = Formatter.Unquote(p_ParsingContext.GetAppFileFullName());
var word = Formatter.Unquote(p_Word);

var appFileFullName = currentProcess.MainModule.FileName.ToLower();

if ((appFileFullName == p_Word)|| (Path.GetFileName(appFileFullName)== p_Word))
if ((appFileFullName == word) || (Path.GetFileName(appFileFullName)== word))
{
if (p_ParsingContext.ApplicationFileSpecified)
{
Expand All @@ -34,12 +33,12 @@ public override AbstractState ProcessWord( string p_Word, ParsingContext p_Parsi
return this;
}

if (p_Word.Equals( (CommandLineParser.SourcePrefix) ))
if (word.Equals( (CommandLineParser.SourcePrefix) ))
{
return ClauseSourceInitiated.Item;
}

if (p_Word.Equals( (CommandLineParser.TargetPrefix) ))
if (word.Equals( (CommandLineParser.TargetPrefix) ))
{
return ClauseTargetInitiated.Item;
}
Expand Down
Loading