Skip to content

Commit 3e74a3f

Browse files
committed
implement rebuild option
1 parent 7b050b9 commit 3e74a3f

File tree

6 files changed

+40
-25
lines changed

6 files changed

+40
-25
lines changed

Compile System Package.run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="Compile System Package" type="DotNetProject" factoryName=".NET Project">
33
<option name="EXE_PATH" value="$PROJECT_DIR$/kscr-build/bin/net6.0/kbuild.exe" />
4-
<option name="PROGRAM_PARAMETERS" value="build" />
4+
<option name="PROGRAM_PARAMETERS" value="build -r" />
55
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/kscr-system/" />
66
<option name="PASS_PARENT_ENVS" value="1" />
77
<option name="USE_EXTERNAL_CONSOLE" value="0" />

Test Build - build.run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="Test Build - build" type="DotNetProject" factoryName=".NET Project">
33
<option name="EXE_PATH" value="$PROJECT_DIR$/kscr-build/bin/net6.0/kbuild.exe" />
4-
<option name="PROGRAM_PARAMETERS" value="build" />
4+
<option name="PROGRAM_PARAMETERS" value="build -r" />
55
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/examples/modular/testing" />
66
<option name="PASS_PARENT_ENVS" value="1" />
77
<option name="USE_EXTERNAL_CONSOLE" value="0" />

Test Build - run.run.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="Test Build - run" type="DotNetProject" factoryName=".NET Project">
33
<option name="EXE_PATH" value="$PROJECT_DIR$/kscr-build/bin/net6.0/kbuild.exe" />
4-
<option name="PROGRAM_PARAMETERS" value="run" />
4+
<option name="PROGRAM_PARAMETERS" value="run -r" />
55
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/examples/modular/testing/" />
66
<option name="PASS_PARENT_ENVS" value="1" />
77
<option name="USE_EXTERNAL_CONSOLE" value="0" />

kscr-build/Commands.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ namespace KScr.Build;
44

55
public interface CmdBase
66
{
7-
[Option]
7+
[Value(0, Required = false)]
88
public DirectoryInfo? Dir { get; set; }
99
}
1010

11+
public interface IRebuildCmd
12+
{
13+
[Option('r', "rebuild", Default = false)]
14+
public bool Rebuild { get; set; }
15+
}
16+
1117
[Verb("info")]
1218
public class CmdInfo : CmdBase
1319
{
@@ -21,9 +27,10 @@ public class CmdDependencies : CmdBase
2127
}
2228

2329
[Verb("build")]
24-
public class CmdBuild : CmdBase
30+
public class RebuildCmdBuild : CmdBase, IRebuildCmd
2531
{
2632
public DirectoryInfo? Dir { get; set; }
33+
public bool Rebuild { get; set; }
2734
}
2835

2936
[Verb("publish")]
@@ -33,7 +40,8 @@ public class CmdPublish : CmdBase
3340
}
3441

3542
[Verb("run")]
36-
public class CmdRun : CmdBase
43+
public class RebuildCmdRun : CmdBase, IRebuildCmd
3744
{
3845
public DirectoryInfo? Dir { get; set; }
46+
public bool Rebuild { get; set; }
3947
}

kscr-build/KScrBuild.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,19 @@ static KScrBuild()
2222

2323
public static void Main(string[] args)
2424
{
25-
Log<KScrBuild>.WithExceptionLogger(() => Parser.Default.ParseArguments<CmdInfo, CmdDependencies, CmdBuild, CmdPublish, CmdRun>(args)
25+
Log<KScrBuild>.Get().RunWithExceptionLogger(() => Parser.Default.ParseArguments<CmdInfo, CmdDependencies, RebuildCmdBuild, CmdPublish, RebuildCmdRun>(args)
2626
.WithParsed<CmdInfo>(PrintInfo)
2727
.WithParsed<CmdDependencies>(PrintDependencies)
28-
.WithParsed<CmdBuild>(RunBuild)
28+
.WithParsed<RebuildCmdBuild>(RunBuild)
2929
.WithParsed<CmdPublish>(RunPublish)
30-
.WithParsed<CmdRun>(RunRun)
30+
.WithParsed<RebuildCmdRun>(RunRun)
3131
, "Build failed with unhandled exception");
3232
}
3333

34-
private static void RunRun(CmdRun cmd)
34+
private static void RunRun(RebuildCmdRun rebuildCmd)
3535
{
36-
var (baseModule, exported) = ExtractModules(cmd);
36+
ApplyCmd(rebuildCmd);
37+
var (baseModule, exported) = ExtractModules(rebuildCmd);
3738

3839
foreach (var module in exported)
3940
module.RunBuild();
@@ -84,16 +85,21 @@ private static (ModuleInfo? baseModule, List<Module> exported) ExtractModules(Cm
8485
return (modulesInfo, exported);
8586
}
8687

87-
private static void RunBuild(CmdBuild cmd)
88+
private static void RunBuild(RebuildCmdBuild rebuildCmd)
8889
{
89-
var (baseModule, exported) = ExtractModules(cmd);
90+
ApplyCmd(rebuildCmd);
91+
var (baseModule, exported) = ExtractModules(rebuildCmd);
9092

9193
SortModulesByCoDependencies(exported);
9294

9395
foreach (var module in exported)
9496
module.RunBuild();
9597
}
96-
98+
99+
private static void ApplyCmd(IRebuildCmd cmd) => Rebuild = cmd.Rebuild;
100+
101+
public static bool Rebuild { get; private set; }
102+
97103
private class CoDepNode
98104
{
99105
internal readonly Module Module;

kscr-build/Module.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace KScr.Build;
77

88
public class Module
99
{
10+
private readonly Log log;
1011
public readonly ModuleInfo? ModulesInfo;
1112
public readonly ModuleInfo ModuleInfo;
1213
public readonly DirectoryInfo RootDir;
@@ -16,6 +17,7 @@ public Module(ModuleInfo? modulesInfo, ModuleInfo moduleInfo, DirectoryInfo root
1617
ModulesInfo = modulesInfo;
1718
ModuleInfo = moduleInfo;
1819
RootDir = rootDir;
20+
log = new Log(Notation);
1921
}
2022

2123
public ProjectInfo Project => ModulesInfo != null ? ModulesInfo.Project + ModuleInfo.Project : ModuleInfo.Project;
@@ -30,10 +32,9 @@ private IEnumerable<T> Concat<T>(IEnumerable<T>? first, IEnumerable<T>? second)
3032

3133
public void RunBuild()
3234
{
33-
Log<Module>.WithExceptionLogger(() =>
35+
log.RunWithExceptionLogger(() =>
3436
{
35-
var oldwkdir = Environment.CurrentDirectory;
36-
Log<KScrBuild>.At(LogLevel.Debug, $"Set working Directory for module: {Environment.CurrentDirectory = RootDir.FullName}");
37+
(var oldwkdir, Environment.CurrentDirectory) = (Environment.CurrentDirectory, RootDir.FullName);
3738

3839
var cmd = new CmdCompile()
3940
{
@@ -46,9 +47,9 @@ public void RunBuild()
4647
};
4748

4849
long compileTime = -1, ioTime = -1;
49-
if (cmd.Output.IsUpToDate(KScrBuild.Md5Path))
50+
if (!KScrBuild.Rebuild && cmd.Output.IsUpToDate(KScrBuild.Md5Path))
5051
{
51-
Log<Module>.At(LogLevel.Config, $"Build {Notation} not necessary; output dir is up-to-date");
52+
log.At(LogLevel.Config, $"Build {Notation} not necessary; output dir is up-to-date");
5253
goto skipBuild;
5354
}
5455

@@ -59,17 +60,17 @@ public void RunBuild()
5960
KScrStarter.LoadClasspath(cmd);
6061
}
6162

62-
Log<Module>.At(LogLevel.Config, $"Compiling source '{cmd.Source}' into '{cmd.Output}'...");
63+
log.At(LogLevel.Config, $"Compiling source '{cmd.Source}' into '{cmd.Output}'...");
6364
compileTime = KScrStarter.CompileSource(cmd, cmd.PkgBase);
6465
if (KScrStarter.VM.CompilerErrors.Count > 0)
6566
foreach (var error in KScrStarter.VM.CompilerErrors)
66-
Log<Module>.At(LogLevel.Error, "Compiler Error:\r\n" + error);
67+
log.At(LogLevel.Error, "Compiler Error:\r\n" + error);
6768
ioTime = KScrStarter.WriteClasses(cmd);
6869

6970
skipBuild:
7071
ioTime += DebugUtil.Measure(() => SaveToFiles());
7172
cmd.Output.UpdateMd5(KScrBuild.Md5Path);
72-
Log<Module>.At(LogLevel.Info, $"Build {Notation} succeeded; {KScrStarter.IOTimeString(compileTime, ioTime: ioTime)}");
73+
log.At(LogLevel.Info, $"Build {Notation} succeeded; {KScrStarter.IOTimeString(compileTime, ioTime: ioTime)}");
7374
Environment.CurrentDirectory = oldwkdir;
7475
}, $"Build {Notation} failed with exception");
7576
}
@@ -79,12 +80,12 @@ public void SaveToFiles(string dir = null!)
7980
dir ??= Build.Output ?? Path.Combine(Environment.CurrentDirectory, "build/classes/");
8081
// Create FileStream for output ZIP archive
8182
var lib = new FileInfo(Build.OutputLib ?? Path.Combine(dir, RuntimeBase.ModuleLibFile));
82-
if (lib.IsUpToDate(KScrBuild.Md5Path))
83+
if (!KScrBuild.Rebuild && lib.IsUpToDate(KScrBuild.Md5Path))
8384
{
84-
Log<Module>.At(LogLevel.Config, $"Create Package {Notation} not necessary; output library is up-to-date");
85+
log.At(LogLevel.Config, $"Create Package {Notation} not necessary; output library is up-to-date");
8586
return;
8687
}
87-
Log<Module>.At(LogLevel.Debug, $"Writing module {Notation} to file {lib.FullName}");
88+
log.At(LogLevel.Debug, $"Writing module {Notation} to file {lib.FullName}");
8889
if (lib.Exists)
8990
lib.Delete();
9091
var zipFile = lib.OpenWrite();

0 commit comments

Comments
 (0)