Skip to content

Commit 23a6d3d

Browse files
committed
Refactor SyncTask
1 parent 1d1fde5 commit 23a6d3d

File tree

4 files changed

+32
-72
lines changed

4 files changed

+32
-72
lines changed

Sources/autobuild/SyncTask.swift

-26
This file was deleted.

Sources/autobuild/autobuild.swift

+30-20
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1+
//
2+
// autobuild.swift
3+
// autobuild
4+
//
5+
// Created by Liang on 07/12/2015.
6+
// Copyright © 2015 UnchartedWorks. All rights reserved.
7+
//
8+
19
import Foundation
210
import libc
311
import POSIX
412
import CommandLineKit
513
import HaskellSwift
614

15+
//MARK: - data structures
716
public enum AutobuildError: Swift.Error {
817
case InvalidUsage
918
case InvalidParameter(hint: String)
@@ -40,7 +49,7 @@ struct MonitorOption {
4049
let fileExtensions: [String]
4150
}
4251

43-
//MARK: - main
52+
//MARK: - autobuild
4453
public func autobuild(_ args: [String]) {
4554
let result = parse(args) >>>= createMonitorOption >>>= validateMonitorOption >>>= monitor
4655
printResult(result)
@@ -160,8 +169,6 @@ private func monitor(_ option: MonitorOption) -> Either<AutobuildError, Bool> {
160169
Log.info("Start monitoring:\nWorking directory: \(option.workingDirectory)\nFile extensions: \(option.fileExtensions)")
161170

162171
changeWorkingDirectory(option.workingDirectory)
163-
installSignalHandlers()
164-
165172
monitorEvent([option.workingDirectory], handleFiles(option.executable, option.fileExtensions))
166173
return Right(true)
167174
}
@@ -185,25 +192,17 @@ func _changeWorkingDirectory(_ dir: String) {
185192
}
186193
}
187194

188-
//MARK: installSignalHandlers
189-
func installSignalHandlers() {
190-
signal(SIGINT, terminateProcessTree)
191-
}
192-
193-
func terminateProcessTree(pid: Int32) {
194-
Log.error(closure: "\nTerminating subprocesses")
195-
didTerminate(Process())
196-
}
197-
198195
//MARK: handleFiles
199196
func handleFiles(_ executable: String, _ fileExtensions: [String]) -> (String) -> Void {
200197
return {( content: String) in handleModifiedFiles(content, executable, fileExtensions) }
201198
}
202199

200+
//MARK: -handleModifiedFiles
203201
func handleModifiedFiles(_ content: String, _ executable: String, _ fileExtensions: [String]) {
204-
isFileModified(fileExtensions, content) ? SyncTask.execute("/bin/bash", [executable]) : ()
202+
isFileModified(fileExtensions, content) ? runProcess(["/bin/bash", executable]) : ()
205203
}
206204

205+
//MARK: --isFileModified
207206
func isFileModified(_ fileExtensions: [String], _ content: String) -> Bool {
208207
let getModifiedFiles: (String) -> [String] = filter(anyFileExtensions(fileExtensions)) .. lines
209208
let isModified: ([String]) -> Bool = not .. null .. map({Log.info($0)})
@@ -227,6 +226,23 @@ func isFile(_ fileExtension: String, _ path: String) -> Bool {
227226
return ext1 == ext2
228227
}
229228

229+
//MARK: --runProcess
230+
func runProcess(_ command: [String]) {
231+
command >>>= createProcess >>>= launchProcess
232+
}
233+
234+
private func createProcess(_ command: [String]) -> Process? {
235+
let process = Process()
236+
process.launchPath = head(command)
237+
process.arguments = tail(command)
238+
return process
239+
}
240+
241+
private func launchProcess(_ process: Process) {
242+
process.launch()
243+
process.waitUntilExit()
244+
}
245+
230246
//MARK: monitorEvent
231247
func monitorEvent(_ arguments: [String], _ action: @escaping (String) -> Void) {
232248
arguments >>>= createWatchProcess >>>= watch >>>= build(action)
@@ -238,7 +254,6 @@ func createWatchProcess(arguments: [String]) -> Process? {
238254
task.launchPath = fswatchPath()
239255
task.arguments = arguments
240256
task.standardOutput = Pipe()
241-
task.terminationHandler = didTerminate
242257
return task
243258
}
244259

@@ -254,11 +269,6 @@ func exitfswatch() {
254269
POSIX.exit(-1)
255270
}
256271

257-
func didTerminate(_ process: Process) -> Void {
258-
Log.error(closure: "Terminated subprocesses")
259-
POSIX.exit(-1)
260-
}
261-
262272
func which(_ program: String) -> String? {
263273
return (try? popen(["/usr/bin/which", program])) >>>= rstrip
264274
}

Tests/depTests/SyncTaskTests.swift

-11
This file was deleted.

autobuild.xcodeproj/project.pbxproj

+2-15
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@
1010
EC2E51161F1A338100D1495F /* HaskellSwift.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC2E51151F1A338100D1495F /* HaskellSwift.a */; };
1111
OBJ_100 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* Async.swift */; };
1212
OBJ_101 /* autobuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* autobuild.swift */; };
13-
OBJ_102 /* FSEventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* FSEventMonitor.swift */; };
1413
OBJ_103 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_22 /* Logger.swift */; };
1514
OBJ_104 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_23 /* main.swift */; };
16-
OBJ_105 /* SyncTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_24 /* SyncTask.swift */; };
1715
OBJ_107 /* libc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_67 /* libc.framework */; };
1816
OBJ_108 /* POSIX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_70 /* POSIX.framework */; };
1917
OBJ_109 /* CommandLineKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_71 /* CommandLineKit.framework */; };
@@ -40,7 +38,6 @@
4038
OBJ_152 /* AutobuildTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_47 /* AutobuildTests.swift */; };
4139
OBJ_153 /* LogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_48 /* LogTests.swift */; };
4240
OBJ_154 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* main.swift */; };
43-
OBJ_155 /* SyncTaskTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_50 /* SyncTaskTests.swift */; };
4441
OBJ_162 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_52 /* main.swift */; };
4542
OBJ_163 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_53 /* XCTestCaseProvider.swift */; };
4643
OBJ_165 /* libc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_67 /* libc.framework */; };
@@ -140,10 +137,8 @@
140137
OBJ_17 /* Version.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = "<group>"; };
141138
OBJ_19 /* Async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = "<group>"; };
142139
OBJ_20 /* autobuild.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = autobuild.swift; sourceTree = "<group>"; };
143-
OBJ_21 /* FSEventMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSEventMonitor.swift; sourceTree = "<group>"; };
144140
OBJ_22 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
145141
OBJ_23 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
146-
OBJ_24 /* SyncTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncTask.swift; sourceTree = "<group>"; };
147142
OBJ_26 /* chdir.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = chdir.swift; sourceTree = "<group>"; };
148143
OBJ_27 /* env.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = env.swift; sourceTree = "<group>"; };
149144
OBJ_28 /* Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = "<group>"; };
@@ -165,7 +160,6 @@
165160
OBJ_47 /* AutobuildTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutobuildTests.swift; sourceTree = "<group>"; };
166161
OBJ_48 /* LogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogTests.swift; sourceTree = "<group>"; };
167162
OBJ_49 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
168-
OBJ_50 /* SyncTaskTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncTaskTests.swift; sourceTree = "<group>"; };
169163
OBJ_52 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
170164
OBJ_53 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = "<group>"; };
171165
OBJ_55 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
@@ -279,10 +273,8 @@
279273
children = (
280274
OBJ_19 /* Async.swift */,
281275
OBJ_20 /* autobuild.swift */,
282-
OBJ_21 /* FSEventMonitor.swift */,
283276
OBJ_22 /* Logger.swift */,
284277
OBJ_23 /* main.swift */,
285-
OBJ_24 /* SyncTask.swift */,
286278
);
287279
name = autobuild;
288280
path = Sources/autobuild;
@@ -338,13 +330,12 @@
338330
OBJ_47 /* AutobuildTests.swift */,
339331
OBJ_48 /* LogTests.swift */,
340332
OBJ_49 /* main.swift */,
341-
OBJ_50 /* SyncTaskTests.swift */,
342333
);
343334
name = depTests;
344335
path = Tests/depTests;
345336
sourceTree = SOURCE_ROOT;
346337
};
347-
OBJ_5 /* */ = {
338+
OBJ_5 = {
348339
isa = PBXGroup;
349340
children = (
350341
OBJ_6 /* Package.swift */,
@@ -357,7 +348,6 @@
357348
EC2E51151F1A338100D1495F /* HaskellSwift.a */,
358349
OBJ_66 /* Products */,
359350
);
360-
name = "";
361351
sourceTree = "<group>";
362352
};
363353
OBJ_51 /* autobuildTests */ = {
@@ -577,7 +567,7 @@
577567
knownRegions = (
578568
en,
579569
);
580-
mainGroup = OBJ_5 /* */;
570+
mainGroup = OBJ_5;
581571
productRefGroup = OBJ_66 /* Products */;
582572
projectDirPath = "";
583573
projectRoot = "";
@@ -634,7 +624,6 @@
634624
OBJ_152 /* AutobuildTests.swift in Sources */,
635625
OBJ_153 /* LogTests.swift in Sources */,
636626
OBJ_154 /* main.swift in Sources */,
637-
OBJ_155 /* SyncTaskTests.swift in Sources */,
638627
);
639628
runOnlyForDeploymentPostprocessing = 0;
640629
};
@@ -689,10 +678,8 @@
689678
files = (
690679
OBJ_100 /* Async.swift in Sources */,
691680
OBJ_101 /* autobuild.swift in Sources */,
692-
OBJ_102 /* FSEventMonitor.swift in Sources */,
693681
OBJ_103 /* Logger.swift in Sources */,
694682
OBJ_104 /* main.swift in Sources */,
695-
OBJ_105 /* SyncTask.swift in Sources */,
696683
);
697684
runOnlyForDeploymentPostprocessing = 0;
698685
};

0 commit comments

Comments
 (0)