Update Xcode processing to support Xcode project as root directory, clean up usage statements
diff --git a/WhiskSwiftTools/ConsoleIO.swift b/WhiskSwiftTools/ConsoleIO.swift
index 054bc6c..653aed7 100644
--- a/WhiskSwiftTools/ConsoleIO.swift
+++ b/WhiskSwiftTools/ConsoleIO.swift
@@ -43,7 +43,17 @@
let executableName = (Process.arguments[0] as NSString).lastPathComponent
print ("usage:")
- print ("\(executableName) build")
+ print ("To install a project:")
+ print ("=====================")
+ print ("\(executableName) install (for current directory)")
+ print ("or")
+ print ("\(executableName) install <project directory>")
+ print ("To uninstall a project:")
+ print ("=======================")
+ print ("\(executableName) uninstall (for current directory)")
+ print ("or")
+ print ("\(executableName) uninstall <project directory>")
+
print ("Type \(executableName) -h or --help to show usage information")
}
diff --git a/WhiskSwiftTools/ProjectManager.swift b/WhiskSwiftTools/ProjectManager.swift
index 3f49d0a..f7ef723 100644
--- a/WhiskSwiftTools/ProjectManager.swift
+++ b/WhiskSwiftTools/ProjectManager.swift
@@ -49,7 +49,10 @@
do {
self.projectReader?.clearAll()
- try self.projectReader?.readRootDependencies(clone: true)
+ if self.projectReader?.detectXcode(path: self.path) == false {
+ try self.projectReader?.readRootDependencies(clone: true)
+ }
+
try self.projectReader?.readProjectDirectory()
//self.projectReader?.dumpProjectStructure()
@@ -92,7 +95,9 @@
do {
self.projectReader?.clearAll()
- try self.projectReader?.readRootDependencies(clone: false)
+ if self.projectReader?.detectXcode(path: self.path) == false {
+ try self.projectReader?.readRootDependencies(clone: false)
+ }
try self.projectReader?.readProjectDirectory()
// self.projectReader?.dumpProjectStructure()
diff --git a/WhiskSwiftTools/ProjectReader.swift b/WhiskSwiftTools/ProjectReader.swift
index 7ef3c77..de3ffe5 100644
--- a/WhiskSwiftTools/ProjectReader.swift
+++ b/WhiskSwiftTools/ProjectReader.swift
@@ -41,37 +41,37 @@
case Python
}
-struct Package {
+public struct Package {
let name: NSString
let bindTo: String?
let parameters: Array<[String:AnyObject]>?
}
-struct Trigger {
+public struct Trigger {
let name: NSString
let feed: NSString?
let parameters: Array<[String:AnyObject]>?
}
-struct Rule {
+public struct Rule {
let name: NSString
let trigger: NSString
let action: NSString
}
-struct Sequence {
+public struct Sequence {
let name: NSString
let actions: Array<String>
}
-struct Action {
+public struct Action {
let name: NSString
let path: NSString
var runtime: Runtime
var parameters: Array<[String:AnyObject]>?
}
-struct Dependency {
+public struct Dependency {
let name: NSString
let url: NSString
let version: NSString
@@ -331,7 +331,12 @@
let xcodeProject = WhiskTokenizer(from: dirPath, to:projectPath)
do {
- try xcodeProject.readXCodeProjectDirectory()
+ let xcodeActions = try xcodeProject.readXCodeProjectDirectory()
+
+ for xcodeAction in xcodeActions {
+ actionsDict[xcodeAction.name] = xcodeAction
+ }
+
} catch {
print("Error reading xcode project \(error)")
}
diff --git a/WhiskSwiftTools/WhiskInstaller.swift b/WhiskSwiftTools/WhiskInstaller.swift
index c91cc60..57383ba 100644
--- a/WhiskSwiftTools/WhiskInstaller.swift
+++ b/WhiskSwiftTools/WhiskInstaller.swift
@@ -19,10 +19,19 @@
class WhiskInstaller {
let consoleIO = ConsoleIO()
+ var projectPath: String!
+
+ init() {
+ projectPath = getCurrentDirectory()
+ }
func staticMode() {
let argCount = Process.argc
let argument = Process.arguments[1]
+
+ if argCount > 2 {
+ projectPath = NSString(string: Process.arguments[2]).expandingTildeInPath as String
+ }
var offset = 0
if argument.hasPrefix("--") {
@@ -63,8 +72,8 @@
}
func getCurrentDirectory() -> String {
- //return FileManager.default.currentDirectoryPath
- return "/Users/pcastro/Desktop/ow-projects"
+ return FileManager.default.currentDirectoryPath
+ //return "/Users/pcastro/Desktop/ow-projects"
}
func setupProjectManager() throws -> ProjectManager? {
@@ -88,7 +97,7 @@
if let tokens = tokens, namespace = namespace {
let credentials = WhiskCredentials(accessKey: tokens[0], accessToken: tokens[1])
- return ProjectManager(path: getCurrentDirectory(), credentials: credentials, namespace: namespace)
+ return ProjectManager(path: projectPath!, credentials: credentials, namespace: namespace)
}
} catch {
print("Error reading ~/.wskprops")
diff --git a/WhiskSwiftTools/WhiskTokenizer.swift b/WhiskSwiftTools/WhiskTokenizer.swift
index c4a75a1..1dc2d89 100644
--- a/WhiskSwiftTools/WhiskTokenizer.swift
+++ b/WhiskSwiftTools/WhiskTokenizer.swift
@@ -34,6 +34,8 @@
public class WhiskTokenizer {
+ let OpenWhiskActionDirectory = "OpenWhiskActions"
+
var atPath: String!
var toPath: String!
public var actions = [ActionToken]()
@@ -43,11 +45,12 @@
toPath = to
}
- public func readXCodeProjectDirectory() throws {
+ public func readXCodeProjectDirectory() throws -> [Action] {
let dir: FileManager = FileManager.default
+ var whiskActionArray = [Action]()
if let enumerator: FileManager.DirectoryEnumerator = dir.enumerator(atPath: atPath) {
-
+
while let item = enumerator.nextObject() as? NSString {
var isDir = ObjCBool(false)
@@ -67,8 +70,20 @@
actions.append(action)
do {
- let fileUrl = URL(fileURLWithPath: toPath+"/\(action.actionName).swift")
+
+ let actionDirPath = toPath+"/\(OpenWhiskActionDirectory)"
+
+ try FileManager.default.createDirectory(atPath: actionDirPath, withIntermediateDirectories: true, attributes: nil)
+
+ let actionPath = actionDirPath+"/\(action.actionName).swift"
+
+ let fileUrl = URL(fileURLWithPath: actionPath)
try action.actionCode.write(to: fileUrl, atomically: false, encoding: String.Encoding.utf8)
+
+ let whiskAction = Action(name: action.actionName, path: actionPath, runtime: Runtime.Swift, parameters: nil)
+
+ whiskActionArray.append(whiskAction)
+
} catch {
print("Error writing actions from Xcode \(error)")
}
@@ -86,6 +101,8 @@
}
}
+
+ return whiskActionArray
}
func getActions(str: String) -> [ActionToken]? {