mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
👌 Determine "driver" by reading composer file
This is much faster than checking the actual driver, which might take a while if you have many sites. If we're just checking the actual composer file (which is already parsed) this should be much faster.
This commit is contained in:
@ -39,6 +39,8 @@
|
|||||||
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
C40C7F3227722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
C40C7F3227722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; };
|
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; };
|
||||||
|
C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; };
|
||||||
|
C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; };
|
||||||
C415D3B72770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
C415D3B72770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
||||||
C415D3B82770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
C415D3B82770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
||||||
C415D3E12770F34D005EF286 /* AllowedArguments.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3DE2770F34D005EF286 /* AllowedArguments.swift */; };
|
C415D3E12770F34D005EF286 /* AllowedArguments.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3DE2770F34D005EF286 /* AllowedArguments.swift */; };
|
||||||
@ -228,6 +230,7 @@
|
|||||||
C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; };
|
C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; };
|
||||||
C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
|
C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
|
||||||
C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = "<group>"; };
|
C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = "<group>"; };
|
||||||
|
C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFrameworks.swift; sourceTree = "<group>"; };
|
||||||
C415D3B62770F294005EF286 /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = "<group>"; };
|
C415D3B62770F294005EF286 /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = "<group>"; };
|
||||||
C415D3D62770F341005EF286 /* phpmon-cli */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "phpmon-cli"; sourceTree = BUILT_PRODUCTS_DIR; };
|
C415D3D62770F341005EF286 /* phpmon-cli */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "phpmon-cli"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
C415D3DE2770F34D005EF286 /* AllowedArguments.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllowedArguments.swift; sourceTree = "<group>"; };
|
C415D3DE2770F34D005EF286 /* AllowedArguments.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllowedArguments.swift; sourceTree = "<group>"; };
|
||||||
@ -627,6 +630,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
C4D89BC52783C99400A02B68 /* ComposerJson.swift */,
|
C4D89BC52783C99400A02B68 /* ComposerJson.swift */,
|
||||||
|
C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */,
|
||||||
);
|
);
|
||||||
path = Composer;
|
path = Composer;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -897,6 +901,7 @@
|
|||||||
C4C3ED4327834C5200AB15D8 /* CustomPrefs.swift in Sources */,
|
C4C3ED4327834C5200AB15D8 /* CustomPrefs.swift in Sources */,
|
||||||
54B48B5F275F66AE006D90C5 /* Application.swift in Sources */,
|
54B48B5F275F66AE006D90C5 /* Application.swift in Sources */,
|
||||||
C4B97B78275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */,
|
C4B97B78275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */,
|
||||||
|
C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */,
|
||||||
C4811D2422D70A4700B5F6B3 /* App.swift in Sources */,
|
C4811D2422D70A4700B5F6B3 /* App.swift in Sources */,
|
||||||
C41C1B4922B00A9800E7CF16 /* MenuBarImageGenerator.swift in Sources */,
|
C41C1B4922B00A9800E7CF16 /* MenuBarImageGenerator.swift in Sources */,
|
||||||
C4F30B03278E16BA00755FCE /* HomebrewService.swift in Sources */,
|
C4F30B03278E16BA00755FCE /* HomebrewService.swift in Sources */,
|
||||||
@ -995,6 +1000,7 @@
|
|||||||
C4F780BD25D80B65000DBC97 /* Constants.swift in Sources */,
|
C4F780BD25D80B65000DBC97 /* Constants.swift in Sources */,
|
||||||
C4F780C325D80B75000DBC97 /* HeaderView.swift in Sources */,
|
C4F780C325D80B75000DBC97 /* HeaderView.swift in Sources */,
|
||||||
C44C198E276E3A1C0072762D /* ProgressWindow.swift in Sources */,
|
C44C198E276E3A1C0072762D /* ProgressWindow.swift in Sources */,
|
||||||
|
C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */,
|
||||||
C4D9ADC9277611A0007277F4 /* InternalSwitcher.swift in Sources */,
|
C4D9ADC9277611A0007277F4 /* InternalSwitcher.swift in Sources */,
|
||||||
C4F30B0B278E203C00755FCE /* MainMenu+Startup.swift in Sources */,
|
C4F30B0B278E203C00755FCE /* MainMenu+Startup.swift in Sources */,
|
||||||
C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */,
|
C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */,
|
||||||
@ -1194,7 +1200,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 500;
|
CURRENT_PROJECT_VERSION = 520;
|
||||||
DEVELOPMENT_TEAM = 8M54J5J787;
|
DEVELOPMENT_TEAM = 8M54J5J787;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
INFOPLIST_FILE = phpmon/Info.plist;
|
INFOPLIST_FILE = phpmon/Info.plist;
|
||||||
@ -1203,7 +1209,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = "5.0-b1";
|
MARKETING_VERSION = "5.0-b2";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.beta;
|
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.beta;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -1219,7 +1225,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 500;
|
CURRENT_PROJECT_VERSION = 520;
|
||||||
DEVELOPMENT_TEAM = 8M54J5J787;
|
DEVELOPMENT_TEAM = 8M54J5J787;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
INFOPLIST_FILE = phpmon/Info.plist;
|
INFOPLIST_FILE = phpmon/Info.plist;
|
||||||
@ -1228,7 +1234,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = "5.0-b1";
|
MARKETING_VERSION = "5.0-b2";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.beta;
|
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.beta;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
@ -723,6 +723,7 @@ Gw
|
|||||||
<outlet property="imageViewPhpVersionOK" destination="5aN-ZI-D7U" id="ePz-Cb-dWk"/>
|
<outlet property="imageViewPhpVersionOK" destination="5aN-ZI-D7U" id="ePz-Cb-dWk"/>
|
||||||
<outlet property="imageViewType" destination="0NQ-ZD-CqD" id="Cph-FN-LaY"/>
|
<outlet property="imageViewType" destination="0NQ-ZD-CqD" id="Cph-FN-LaY"/>
|
||||||
<outlet property="labelDriver" destination="TbX-e2-3QL" id="qJh-Ak-Dge"/>
|
<outlet property="labelDriver" destination="TbX-e2-3QL" id="qJh-Ak-Dge"/>
|
||||||
|
<outlet property="labelDriverType" destination="jKi-Ls-7FZ" id="ZTq-pP-qUC"/>
|
||||||
<outlet property="labelPathName" destination="CXK-Q9-CpO" id="iVZ-cL-azB"/>
|
<outlet property="labelPathName" destination="CXK-Q9-CpO" id="iVZ-cL-azB"/>
|
||||||
<outlet property="labelSiteName" destination="XJL-Uw-frD" id="f0t-vd-W68"/>
|
<outlet property="labelSiteName" destination="XJL-Uw-frD" id="f0t-vd-W68"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct ComposerJson: Decodable {
|
struct ComposerJson: Decodable {
|
||||||
|
|
||||||
let dependencies: Dictionary<String, String>?
|
let dependencies: Dictionary<String, String>?
|
||||||
let devDependencies: Dictionary<String, String>?
|
let devDependencies: Dictionary<String, String>?
|
||||||
let configuration: Config?
|
let configuration: Config?
|
||||||
@ -28,9 +29,16 @@ struct ComposerJson: Decodable {
|
|||||||
return ("", "unknown")
|
return ("", "unknown")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Checks if any notable dependencies can be resolved.
|
||||||
|
Only notable dependencies are saved.
|
||||||
|
*/
|
||||||
public func getNotableDependencies() -> [String: String] {
|
public func getNotableDependencies() -> [String: String] {
|
||||||
var notable: [String: String] = [:]
|
var notable: [String: String] = [:]
|
||||||
let scan = ["php", "laravel/framework"]
|
|
||||||
|
var scan = Array(PhpFrameworks.DependencyList.keys)
|
||||||
|
scan.append("php")
|
||||||
|
|
||||||
scan.forEach { dependency in
|
scan.forEach { dependency in
|
||||||
if dependencies?[dependency] != nil {
|
if dependencies?[dependency] != nil {
|
||||||
|
46
phpmon/Domain/Integrations/Composer/PhpFrameworks.swift
Normal file
46
phpmon/Domain/Integrations/Composer/PhpFrameworks.swift
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// Frameworks.swift
|
||||||
|
// PHP Monitor
|
||||||
|
//
|
||||||
|
// Created by Nico Verbruggen on 26/01/2022.
|
||||||
|
// Copyright © 2022 Nico Verbruggen. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct PhpFrameworks {
|
||||||
|
|
||||||
|
/// This list should probably be reversed when checked, because some of these
|
||||||
|
/// will also require either laravel/framework or symfony/symfony.
|
||||||
|
public static let DependencyList = [
|
||||||
|
|
||||||
|
// COMMON FRAMEWORKS
|
||||||
|
"laravel/framework" : "Laravel",
|
||||||
|
"symfony/symfony": "Symfony",
|
||||||
|
"laravel/lumen": "Lumen",
|
||||||
|
|
||||||
|
// VARIOUS CMS
|
||||||
|
"roots/bedrock": "Bedrock",
|
||||||
|
"cakephp/app": "CakePHP",
|
||||||
|
|
||||||
|
// TODO: Handle wildcards like these (currently disabled)
|
||||||
|
// "concrete5/*": "Concrete5",
|
||||||
|
// "contao/*": "Contao",
|
||||||
|
|
||||||
|
"craftcms/craft": "Craft",
|
||||||
|
"drupal/core": "Drupal",
|
||||||
|
"tightenco/jigsaw": "Jigsaw",
|
||||||
|
"joomla/uri": "Joomla",
|
||||||
|
"themsaid/katana": "Katana",
|
||||||
|
"getkirby/cms": "Kirby",
|
||||||
|
// "magento/*": "Magento",
|
||||||
|
"october/october": "OctoberCMS",
|
||||||
|
"sculpin/sculpin": "Sculpin",
|
||||||
|
// "slim/*": "Slim",
|
||||||
|
"statamic/cms": "Statamic",
|
||||||
|
"johnpbloch/wordpress-core": "Wordpress",
|
||||||
|
"zendframework/zendframework": "Zend",
|
||||||
|
"zendframework/zend-mvc": "Zend"
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
@ -21,6 +21,9 @@ class Valet {
|
|||||||
/// A cached list of sites that were detected after analyzing the paths set up for Valet.
|
/// A cached list of sites that were detected after analyzing the paths set up for Valet.
|
||||||
var sites: [Site] = []
|
var sites: [Site] = []
|
||||||
|
|
||||||
|
/// Whether we're busy with some blocking operation.
|
||||||
|
var isBusy: Bool = false
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
version = VersionExtractor.from(valet("--version"))
|
version = VersionExtractor.from(valet("--version"))
|
||||||
?? "UNKNOWN"
|
?? "UNKNOWN"
|
||||||
@ -49,6 +52,10 @@ class Valet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func reloadSites() {
|
public func reloadSites() {
|
||||||
|
if (isBusy) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
resolvePaths(tld: config.tld)
|
resolvePaths(tld: config.tld)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,6 +95,8 @@ class Valet {
|
|||||||
Resolves all paths and creates linked or parked site instances that can be referenced later.
|
Resolves all paths and creates linked or parked site instances that can be referenced later.
|
||||||
*/
|
*/
|
||||||
private func resolvePaths(tld: String) {
|
private func resolvePaths(tld: String) {
|
||||||
|
isBusy = true
|
||||||
|
|
||||||
sites = []
|
sites = []
|
||||||
|
|
||||||
for path in config.paths {
|
for path in config.paths {
|
||||||
@ -98,6 +107,8 @@ class Valet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sites = sites.sorted { $0.absolutePath < $1.absolutePath }
|
sites = sites.sorted { $0.absolutePath < $1.absolutePath }
|
||||||
|
|
||||||
|
isBusy = false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,6 +173,9 @@ class Valet {
|
|||||||
/// What driver is currently in use. If not detected, defaults to nil.
|
/// What driver is currently in use. If not detected, defaults to nil.
|
||||||
var driver: String? = nil
|
var driver: String? = nil
|
||||||
|
|
||||||
|
/// Whether the driver was determined by checking the Composer file.
|
||||||
|
var driverDeterminedByComposer: Bool = false
|
||||||
|
|
||||||
/// A list of notable Composer dependencies.
|
/// A list of notable Composer dependencies.
|
||||||
var notableComposerDependencies: [String: String] = [:]
|
var notableComposerDependencies: [String: String] = [:]
|
||||||
|
|
||||||
@ -179,8 +193,8 @@ class Valet {
|
|||||||
self.name = URL(fileURLWithPath: absolutePath).lastPathComponent
|
self.name = URL(fileURLWithPath: absolutePath).lastPathComponent
|
||||||
self.aliasPath = nil
|
self.aliasPath = nil
|
||||||
determineSecured(tld)
|
determineSecured(tld)
|
||||||
determineDriver()
|
|
||||||
determineComposerPhpVersion()
|
determineComposerPhpVersion()
|
||||||
|
determineDriver()
|
||||||
}
|
}
|
||||||
|
|
||||||
convenience init(aliasPath: String, tld: String) {
|
convenience init(aliasPath: String, tld: String) {
|
||||||
@ -189,19 +203,27 @@ class Valet {
|
|||||||
self.name = URL(fileURLWithPath: aliasPath).lastPathComponent
|
self.name = URL(fileURLWithPath: aliasPath).lastPathComponent
|
||||||
self.aliasPath = aliasPath
|
self.aliasPath = aliasPath
|
||||||
determineSecured(tld)
|
determineSecured(tld)
|
||||||
determineDriver()
|
|
||||||
determineComposerPhpVersion()
|
determineComposerPhpVersion()
|
||||||
|
determineDriver()
|
||||||
}
|
}
|
||||||
|
|
||||||
public func determineSecured(_ tld: String) {
|
public func determineSecured(_ tld: String) {
|
||||||
secured = Shell.fileExists("~/.config/valet/Certificates/\(self.name!).\(tld).key")
|
secured = Shell.fileExists("~/.config/valet/Certificates/\(self.name!).\(tld).key")
|
||||||
}
|
}
|
||||||
|
|
||||||
public func determineDriver() {
|
public func determineDriverViaComposer() {
|
||||||
|
PhpFrameworks.DependencyList.reversed().forEach { (key: String, value: String) in
|
||||||
|
if self.notableComposerDependencies.keys.contains(key) {
|
||||||
|
self.driver = value
|
||||||
|
self.driverDeterminedByComposer = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func determineDriverViaValet() {
|
||||||
let driver = Shell.pipe("cd '\(absolutePath!)' && valet which", requiresPath: true)
|
let driver = Shell.pipe("cd '\(absolutePath!)' && valet which", requiresPath: true)
|
||||||
if driver.contains("This site is served by") {
|
if driver.contains("This site is served by") {
|
||||||
self.driver = driver
|
self.driver = driver
|
||||||
// TODO: Use a regular expression to retrieve the driver instead?
|
|
||||||
.replacingOccurrences(of: "This site is served by [", with: "")
|
.replacingOccurrences(of: "This site is served by [", with: "")
|
||||||
.replacingOccurrences(of: "ValetDriver].\n", with: "")
|
.replacingOccurrences(of: "ValetDriver].\n", with: "")
|
||||||
} else {
|
} else {
|
||||||
@ -209,6 +231,11 @@ class Valet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func determineDriver() {
|
||||||
|
// TODO: Offer a preference that still fetches the driver (slower)
|
||||||
|
self.determineDriverViaComposer()
|
||||||
|
}
|
||||||
|
|
||||||
public func determineComposerPhpVersion() {
|
public func determineComposerPhpVersion() {
|
||||||
let path = "\(absolutePath!)/composer.json"
|
let path = "\(absolutePath!)/composer.json"
|
||||||
do {
|
do {
|
||||||
|
@ -15,6 +15,7 @@ class SiteListCell: NSTableCellView
|
|||||||
|
|
||||||
@IBOutlet weak var labelSiteName: NSTextField!
|
@IBOutlet weak var labelSiteName: NSTextField!
|
||||||
@IBOutlet weak var labelPathName: NSTextField!
|
@IBOutlet weak var labelPathName: NSTextField!
|
||||||
|
@IBOutlet weak var labelDriverType: NSTextField!
|
||||||
|
|
||||||
@IBOutlet weak var imageViewLock: NSImageView!
|
@IBOutlet weak var imageViewLock: NSImageView!
|
||||||
@IBOutlet weak var imageViewType: NSImageView!
|
@IBOutlet weak var imageViewType: NSImageView!
|
||||||
@ -53,6 +54,10 @@ class SiteListCell: NSTableCellView
|
|||||||
: NSColor.init(red: 246/255, green: 71/255, blue: 71/255, alpha: 1.0) // red
|
: NSColor.init(red: 246/255, green: 71/255, blue: 71/255, alpha: 1.0) // red
|
||||||
|
|
||||||
// Show the current driver
|
// Show the current driver
|
||||||
|
labelDriverType.stringValue = site.driverDeterminedByComposer
|
||||||
|
? "Project Type".uppercased()
|
||||||
|
: "Driver Type".uppercased()
|
||||||
|
|
||||||
labelDriver.stringValue = "\(site.driver ?? "???")"
|
labelDriver.stringValue = "\(site.driver ?? "???")"
|
||||||
|
|
||||||
// Determine the Laravel version
|
// Determine the Laravel version
|
||||||
|
Reference in New Issue
Block a user