mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
🚀 Version 5.6.1
This commit is contained in:
@ -1741,7 +1741,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 = 965;
|
CURRENT_PROJECT_VERSION = 973;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEBUG = YES;
|
DEBUG = YES;
|
||||||
DEVELOPMENT_TEAM = 8M54J5J787;
|
DEVELOPMENT_TEAM = 8M54J5J787;
|
||||||
@ -1752,7 +1752,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = 5.6.0;
|
MARKETING_VERSION = 5.6.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
|
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -1769,7 +1769,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 = 965;
|
CURRENT_PROJECT_VERSION = 973;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEBUG = NO;
|
DEBUG = NO;
|
||||||
DEVELOPMENT_TEAM = 8M54J5J787;
|
DEVELOPMENT_TEAM = 8M54J5J787;
|
||||||
@ -1780,7 +1780,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = 5.6.0;
|
MARKETING_VERSION = 5.6.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
|
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
@ -18,4 +18,30 @@ class AppUpdaterCheckTest: XCTestCase {
|
|||||||
XCTAssertNotNil(version)
|
XCTAssertNotNil(version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testTaggedReleaseOmitsZeroPatch() {
|
||||||
|
let version = AppVersion.from("3.5.0_333")!
|
||||||
|
|
||||||
|
XCTAssertEqual(version.tagged, "3.5")
|
||||||
|
XCTAssertEqual(version.version, "3.5.0")
|
||||||
|
}
|
||||||
|
|
||||||
|
func testTaggedReleaseDoesntOmitNonZeroPatch() {
|
||||||
|
let version = AppVersion.from("3.5.1_333")!
|
||||||
|
|
||||||
|
XCTAssertEqual(version.tagged, "3.5.1")
|
||||||
|
XCTAssertEqual(version.version, "3.5.1")
|
||||||
|
}
|
||||||
|
|
||||||
|
func testTagTruncationDoesntAffectMajorVersions() {
|
||||||
|
var version = AppVersion.from("5.0_333")!
|
||||||
|
|
||||||
|
XCTAssertEqual(version.tagged, "5.0")
|
||||||
|
XCTAssertEqual(version.version, "5.0")
|
||||||
|
|
||||||
|
version = AppVersion.from("5.0.0_333")!
|
||||||
|
|
||||||
|
XCTAssertEqual(version.tagged, "5.0")
|
||||||
|
XCTAssertEqual(version.version, "5.0.0")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import XCTest
|
import XCTest
|
||||||
|
|
||||||
|
// swiftlint:disable type_body_length
|
||||||
class PhpVersionNumberTest: XCTestCase {
|
class PhpVersionNumberTest: XCTestCase {
|
||||||
|
|
||||||
func testCanDeconstructPhpVersion() throws {
|
func testCanDeconstructPhpVersion() throws {
|
||||||
@ -287,4 +288,76 @@ class PhpVersionNumberTest: XCTestCase {
|
|||||||
.make(from: ["7.3.1", "7.2.9"]).all
|
.make(from: ["7.3.1", "7.2.9"]).all
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testCanCheckLessThanOrEqualConstraints() throws {
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<=7.2", strict: true),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.2", "7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<=7.2.0", strict: true),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.2", "7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
|
||||||
|
// Strict check (>7.2.5 is too new for 7.2 which resolves to 7.2.0)
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<=7.2.5", strict: true),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.2", "7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
|
||||||
|
// Non-strict check (ignoring patch has no effect)
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<=7.2.5", strict: false),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.2", "7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCanCheckLessThanConstraints() throws {
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<7.2", strict: true),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<7.2.0", strict: true),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
|
||||||
|
// Strict check (>7.2.5 is too new for 7.2 which resolves to 7.2.0)
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<7.2.5", strict: true),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.2", "7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
|
||||||
|
// Non-strict check (patch resolves to 7.2.999, which is bigger than 7.2.5)
|
||||||
|
XCTAssertEqual(
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.4", "7.3", "7.2", "7.1", "7.0"])
|
||||||
|
.matching(constraint: "<7.2.5", strict: false),
|
||||||
|
PhpVersionNumberCollection
|
||||||
|
.make(from: ["7.1", "7.0"]).all
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,12 +14,18 @@ extension Shell {
|
|||||||
let task = Process()
|
let task = Process()
|
||||||
task.launchPath = "/bin/zsh"
|
task.launchPath = "/bin/zsh"
|
||||||
|
|
||||||
// We need an interactive shell so the user's PATH is loaded in correctly
|
let command = Filesystem.fileExists("~/.zshrc")
|
||||||
task.arguments = ["--login", "-ilc", "echo $PATH"]
|
// source the user's .zshrc file if it exists to complete $PATH
|
||||||
|
? ". ~/.zshrc && echo $PATH"
|
||||||
|
// otherwise, non-interactive mode is sufficient
|
||||||
|
: "echo $PATH"
|
||||||
|
|
||||||
|
task.arguments = ["--login", "-lc", command]
|
||||||
|
|
||||||
let pipe = Pipe()
|
let pipe = Pipe()
|
||||||
task.standardOutput = pipe
|
task.standardOutput = pipe
|
||||||
task.launch()
|
task.launch()
|
||||||
|
|
||||||
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
||||||
|
|
||||||
return String(data: data, encoding: String.Encoding.utf8) ?? ""
|
return String(data: data, encoding: String.Encoding.utf8) ?? ""
|
||||||
|
@ -87,6 +87,14 @@ public struct PhpVersionNumberCollection: Equatable {
|
|||||||
return self.versions.filter { $0.isNewerThan(version, strict) }
|
return self.versions.filter { $0.isNewerThan(version, strict) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let version = PhpVersionNumber.make(from: constraint, type: .smallerThanOrEqual) {
|
||||||
|
return self.versions.filter { $0.isSameAs(version, strict) || $0.isOlderThan(version, strict)}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let version = PhpVersionNumber.make(from: constraint, type: .smallerThan) {
|
||||||
|
return self.versions.filter { $0.isOlderThan(version, strict)}
|
||||||
|
}
|
||||||
|
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,12 +124,8 @@ public struct PhpVersionNumber: Equatable, Hashable {
|
|||||||
case tildeVersionRange = #"^~(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
case tildeVersionRange = #"^~(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
||||||
case greaterThanOrEqual = #"^>=(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
case greaterThanOrEqual = #"^>=(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
||||||
case greaterThan = #"^>(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
case greaterThan = #"^>(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
||||||
|
|
||||||
// TODO: (6.0) Handle these cases (even though I suspect these are uncommon)
|
|
||||||
/*
|
|
||||||
case smallerThanOrEqual = #"^<=(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
case smallerThanOrEqual = #"^<=(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
||||||
case smallerThan = #"^<(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
case smallerThan = #"^<(?<major>\d+).(?<minor>\d+).?(?<patch>\d+)?\z"#
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func parse(_ text: String) throws -> Self {
|
public static func parse(_ text: String) throws -> Self {
|
||||||
@ -175,6 +179,15 @@ public struct PhpVersionNumber: Equatable, Hashable {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal func isOlderThan(_ version: PhpVersionNumber, _ strict: Bool) -> Bool {
|
||||||
|
return (
|
||||||
|
self.major < version.major ||
|
||||||
|
self.major == version.major && self.minor < version.minor ||
|
||||||
|
self.major == version.major && self.minor == version.minor
|
||||||
|
&& self.patch(strict) < version.patch(strict)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
internal func hasNewerMinorVersionOrPatch(_ version: PhpVersionNumber, _ strict: Bool) -> Bool {
|
internal func hasNewerMinorVersionOrPatch(_ version: PhpVersionNumber, _ strict: Bool) -> Bool {
|
||||||
return self.major == version.major &&
|
return self.major == version.major &&
|
||||||
(
|
(
|
||||||
|
@ -146,8 +146,9 @@ class AppUpdateChecker {
|
|||||||
text: "updater.alerts.buttons.release_notes".localized,
|
text: "updater.alerts.buttons.release_notes".localized,
|
||||||
action: { vc in
|
action: { vc in
|
||||||
vc.close(with: .OK)
|
vc.close(with: .OK)
|
||||||
|
|
||||||
NSWorkspace.shared.open(
|
NSWorkspace.shared.open(
|
||||||
Constants.Urls.GitHubReleases.appendingPathComponent("/tag/v\(version.version)\(devSuffix)")
|
Constants.Urls.GitHubReleases.appendingPathComponent("/tag/v\(version.tagged)\(devSuffix)")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -66,6 +66,14 @@ class AppVersion {
|
|||||||
return AppVersion.from("\(App.shortVersion)_\(App.bundleVersion)")!
|
return AppVersion.from("\(App.shortVersion)_\(App.bundleVersion)")!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tagged: String {
|
||||||
|
if version.suffix(2) == ".0" && version.count > 3 {
|
||||||
|
return String(version.dropLast(2))
|
||||||
|
}
|
||||||
|
|
||||||
|
return version
|
||||||
|
}
|
||||||
|
|
||||||
var computerReadable: String {
|
var computerReadable: String {
|
||||||
return "\(version)_\(build ?? "0")"
|
return "\(version)_\(build ?? "0")"
|
||||||
}
|
}
|
||||||
|
@ -155,11 +155,11 @@ extension MainMenu {
|
|||||||
|
|
||||||
App.shared.detectedApplications = Application.detectPresetApplications()
|
App.shared.detectedApplications = Application.detectPresetApplications()
|
||||||
|
|
||||||
let customApps = Preferences.custom.scanApps.map { appName in
|
let customApps = Preferences.custom.scanApps?.map { appName in
|
||||||
return Application(appName, .user_supplied)
|
return Application(appName, .user_supplied)
|
||||||
}.filter { app in
|
}.filter { app in
|
||||||
return app.isInstalled()
|
return app.isInstalled()
|
||||||
}
|
} ?? []
|
||||||
|
|
||||||
App.shared.detectedApplications.append(contentsOf: customApps)
|
App.shared.detectedApplications.append(contentsOf: customApps)
|
||||||
|
|
||||||
|
@ -216,14 +216,14 @@ extension StatusMenu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addItems([
|
addItems([
|
||||||
NSMenuItem.separator(),
|
|
||||||
NSMenuItem(title: "mi_xdebug_mode".localized, submenu: [
|
NSMenuItem(title: "mi_xdebug_mode".localized, submenu: [
|
||||||
HeaderView.asMenuItem(text: "mi_xdebug_available_modes".localized)
|
HeaderView.asMenuItem(text: "mi_xdebug_available_modes".localized)
|
||||||
] + Xdebug.asMenuItems() + [
|
] + Xdebug.asMenuItems() + [
|
||||||
HeaderView.asMenuItem(text: "mi_xdebug_actions".localized),
|
HeaderView.asMenuItem(text: "mi_xdebug_actions".localized),
|
||||||
NSMenuItem(title: "mi_xdebug_disable_all".localized,
|
NSMenuItem(title: "mi_xdebug_disable_all".localized,
|
||||||
action: #selector(MainMenu.disableAllXdebugModes))
|
action: #selector(MainMenu.disableAllXdebugModes))
|
||||||
], target: MainMenu.shared)
|
], target: MainMenu.shared),
|
||||||
|
NSMenuItem.separator()
|
||||||
], target: MainMenu.shared)
|
], target: MainMenu.shared)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,9 @@ class StatusMenu: NSMenu {
|
|||||||
|
|
||||||
if Preferences.isEnabled(.displayExtensions) {
|
if Preferences.isEnabled(.displayExtensions) {
|
||||||
addExtensionsMenuItems()
|
addExtensionsMenuItems()
|
||||||
addXdebugMenuItem()
|
|
||||||
NSMenuItem.separator()
|
NSMenuItem.separator()
|
||||||
|
|
||||||
|
addXdebugMenuItem()
|
||||||
}
|
}
|
||||||
|
|
||||||
addPhpDoctorMenuItem()
|
addPhpDoctorMenuItem()
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct CustomPrefs: Decodable {
|
struct CustomPrefs: Decodable {
|
||||||
let scanApps: [String]
|
let scanApps: [String]?
|
||||||
let presets: [Preset]?
|
let presets: [Preset]?
|
||||||
let services: [String]?
|
let services: [String]?
|
||||||
let environmentVariables: [String: String]?
|
let environmentVariables: [String: String]?
|
||||||
|
@ -10,8 +10,13 @@ import Foundation
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
var isRunningSwiftUIPreview: Bool {
|
var isRunningSwiftUIPreview: Bool {
|
||||||
return ProcessInfo.processInfo
|
#if DEBUG
|
||||||
.environment["XCODE_RUNNING_FOR_PREVIEWS"] != nil
|
// If running SwiftUI *and* when debugging
|
||||||
|
return ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] != nil
|
||||||
|
#else
|
||||||
|
// Release builds should always return false here
|
||||||
|
return false
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Color {
|
extension Color {
|
||||||
|
Reference in New Issue
Block a user