Skip to content

Commit 194200c

Browse files
jws305madskristensen
authored andcommitted
Keep track of which Less dependencies have been checked. (#426)
* Keep track of which Less dependencies have been checked. * Fixed Less circular dependency check.
1 parent e2ac3d7 commit 194200c

File tree

6 files changed

+48
-3
lines changed

6 files changed

+48
-3
lines changed

src/WebCompiler/Config/Config.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,21 @@ private bool HasDependenciesNewerThanOutput(FileInfo input, FileInfo output)
105105
return false;
106106
}
107107

108-
private bool CheckForNewerDependenciesRecursively(string key, Dictionary<string, Dependencies> dependencies, FileInfo output)
108+
private bool CheckForNewerDependenciesRecursively(string key, Dictionary<string, Dependencies> dependencies, FileInfo output, HashSet<string> checkedDependencies = null)
109109
{
110+
if (checkedDependencies == null)
111+
checkedDependencies = new HashSet<string>();
112+
113+
checkedDependencies.Add(key);
114+
110115
if (!dependencies.ContainsKey(key))
111116
return false;
112117

113118
foreach (var file in dependencies[key].DependentOn.ToArray())
114119
{
120+
if (checkedDependencies.Contains(file))
121+
continue;
122+
115123
var fileInfo = new FileInfo(file);
116124

117125
if (!fileInfo.Exists)
@@ -120,7 +128,7 @@ private bool CheckForNewerDependenciesRecursively(string key, Dictionary<string,
120128
if (fileInfo.LastWriteTimeUtc > output.LastWriteTimeUtc)
121129
return true;
122130

123-
if (CheckForNewerDependenciesRecursively(file, dependencies, output))
131+
if (CheckForNewerDependenciesRecursively(file, dependencies, output, checkedDependencies))
124132
return true;
125133
}
126134

src/WebCompilerTest/Compile/LessTest.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.IO;
1+
using System;
2+
using System.IO;
23
using System.Linq;
34
using Microsoft.VisualStudio.TestTools.UnitTesting;
45
using WebCompiler;
@@ -25,6 +26,8 @@ public void Cleanup()
2526
File.Delete("../../artifacts/less/error.css");
2627
File.Delete("../../artifacts/less/relative.css");
2728
File.Delete("../../artifacts/less/relative.min.css");
29+
File.Delete("../../artifacts/less/circrefa.css");
30+
File.Delete("../../artifacts/less/circrefa.min.css");
2831
}
2932

3033
[TestMethod, TestCategory("LESS")]
@@ -92,6 +95,19 @@ public void OtherExtensionTypeSourceFileChangedTest()
9295
}
9396

9497
[TestMethod, TestCategory("LESS")]
98+
public void CompileCircularReference()
99+
{
100+
// Set the last write time and create outputs in a way that Config.CheckForNewerDependenciesRecursively will be called
101+
File.SetLastWriteTimeUtc("../../artifacts/less/circrefa.less", DateTime.UtcNow);
102+
File.SetLastWriteTimeUtc("../../artifacts/less/circrefb.less", DateTime.UtcNow);
103+
File.WriteAllText("../../artifacts/less/circrefa.css", string.Empty);
104+
File.WriteAllText("../../artifacts/less/circrefa.min.css", string.Empty);
105+
106+
// Since the outputs were generated after the inputs, no compilation should have occurred
107+
var result = _processor.Process("../../artifacts/lessconfigCircRef.json");
108+
Assert.AreEqual(0, result.Count<CompilerResult>());
109+
}
110+
95111
public void CompileLessLegacyStrictMath()
96112
{
97113
var result = _processor.Process("../../artifacts/lessconfigLegacyStrictMath.json");

src/WebCompilerTest/WebCompilerTest.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@
8686
<None Include="artifacts\handlebars\test.hbs" />
8787
<None Include="artifacts\handlebars\error.hbs" />
8888
<None Include="artifacts\handlebars\_partial.hbs" />
89+
<None Include="artifacts\lessconfigCircRef.json" />
90+
<None Include="artifacts\less\circrefa.less" />
91+
<None Include="artifacts\less\circrefb.less" />
8992
<None Include="artifacts\lessconfigLegacyStrictMath.json" />
9093
<None Include="artifacts\scss\sub\foo.scss" />
9194
<None Include="artifacts\stylusconfig.json" />
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import "circrefb.less";
2+
3+
@primary-color: #f00;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@import (reference) "circrefa.less";
2+
3+
.btn {
4+
background-color: @primary-color;
5+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"outputFile": "less/circrefa.css",
4+
"inputFile": "less/circrefa.less",
5+
"includeInProject": true,
6+
"options": {
7+
"relativeUrls": true
8+
}
9+
}
10+
]

0 commit comments

Comments
 (0)