summaryrefslogtreecommitdiff
path: root/external/aspnetwebstack/tools/WebStack.tasks.targets
blob: 2e17df78c65812a37b558f83a961a2e7e2ed54f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="CheckForPackages" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
        <ParameterGroup>
            <Packages ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
            <PackagesDir ParameterType="System.String" Required="true" />
            <CompactMessage ParameterType="System.Boolean" Required="false" />
        </ParameterGroup>
        <Task>
            <Using Namespace="System" />
            <Using Namespace="System.Collections.Generic" />
            <Using Namespace="System.IO" />
            <Using Namespace="System.Linq" />
            <Using Namespace="Microsoft.Build.Framework" />
            <Using Namespace="Microsoft.Build.Utilities" />
            <Code Type="Fragment" Language="cs">
                <![CDATA[
                    try {
                        string[] dirs = Directory.GetDirectories(PackagesDir);
                        var missingPackages = new List<string>();

                        foreach (ITaskItem package in Packages) {
                            string packageSpec = package.ItemSpec;
                            bool found = false;

                            foreach (var dir in dirs)
                                if (Path.GetFileName(dir).StartsWith(packageSpec, StringComparison.OrdinalIgnoreCase)) {
                                    found = true;
                                    break;
                                }

                            if (!found)
                                missingPackages.Add(packageSpec);
                        }

                        if (missingPackages.Any()) {
                            if (CompactMessage) {
                                Log.LogError("NuGet package restore is not currently enabled. For more information, please see: http://aspnetwebstack.codeplex.com/wikipage?title=NuGet+Packages");
                            }
                            else {
                                Log.LogMessage(MessageImportance.High, "The following NuGet packages have not yet been downloaded:");

                                foreach (var missingPackage in missingPackages)
                                    Log.LogMessage(MessageImportance.High, "    " + missingPackage);

                                Log.LogMessage(MessageImportance.High, "For more information on enabling package restore, please see:");
                                Log.LogMessage(MessageImportance.High, "http://aspnetwebstack.codeplex.com/wikipage?title=NuGet+Packages");
                            }

                            return false;
                        }

                        return true;
                    }
                    catch (Exception ex) {
                        Log.LogErrorFromException(ex);
                        return false;
                    }
                ]]>
            </Code>
        </Task>
    </UsingTask>

    <UsingTask TaskName="RegexReplace" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
        <ParameterGroup>
            <Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
            <Find ParameterType="System.String" Required="true" />
            <Replace ParameterType="System.String" Required="true" />
            <WarnOnNoMatch ParameterType="System.Boolean" Required="false" />
        </ParameterGroup>
        <Task>
            <Using Namespace="System" />
            <Using Namespace="System.IO" />
            <Using Namespace="System.Text" />
            <Using Namespace="System.Text.RegularExpressions" />
            <Using Namespace="Microsoft.Build.Framework" />
            <Using Namespace="Microsoft.Build.Utilities" />
            <Code Type="Fragment" Language="cs">
                <![CDATA[
                    try {
                        Regex regex = new Regex(Find, RegexOptions.Multiline | RegexOptions.Compiled);

                        foreach (ITaskItem file in Files) {
                            string fullPath = Path.GetFullPath(file.ItemSpec);
                            string originalText = File.ReadAllText(fullPath);
                            bool matched = regex.IsMatch(originalText);

                            if (!matched) {
                                if (WarnOnNoMatch) {
                                    Log.LogWarning("No matches for '{0}' in '{1}'.", Find, fullPath);
                                }
                            }
                            else {
                                File.SetAttributes(fullPath, File.GetAttributes(fullPath) & ~FileAttributes.ReadOnly);
                                File.WriteAllText(fullPath, regex.Replace(originalText, Replace), Encoding.UTF8);
                            }
                        }

                        return true;
                    }
                    catch (Exception ex) {
                        Log.LogErrorFromException(ex);
                        return false;
                    }
                ]]>
            </Code>
        </Task>
    </UsingTask>
</Project>