mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2024-09-11 12:56:03 +03:00
commit
c442558e73
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,3 +7,4 @@ xcuserdata
|
|||||||
*.xcuserstate
|
*.xcuserstate
|
||||||
XcodeGen.xcodeproj
|
XcodeGen.xcodeproj
|
||||||
xcodegen.zip
|
xcodegen.zip
|
||||||
|
.vscode/launch.json
|
||||||
|
12
CHANGELOG.md
12
CHANGELOG.md
@ -2,10 +2,22 @@
|
|||||||
|
|
||||||
## Next Version
|
## Next Version
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed crash caused by a simultaneous write during a glob processing [#1177](https://github.com/yonaskolb/XcodeGen/issues/1177) @tr1ckyf0x
|
||||||
|
|
||||||
|
## 2.26.0
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added the option to specify a `location` in a test target [#1150](https://github.com/yonaskolb/XcodeGen/issues/1150) @KrisRJack
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Speed up source inclusion checking for big projects [#1122](https://github.com/yonaskolb/XcodeGen/pull/1122) @PaulTaykalo
|
- Speed up source inclusion checking for big projects [#1122](https://github.com/yonaskolb/XcodeGen/pull/1122) @PaulTaykalo
|
||||||
|
|
||||||
|
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.25.0...2.26.0)
|
||||||
|
|
||||||
## 2.25.0
|
## 2.25.0
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -834,6 +834,7 @@ A multiline script can be written using the various YAML multiline methods, for
|
|||||||
- [x] **name**: **String** - The name of the target
|
- [x] **name**: **String** - The name of the target
|
||||||
- [ ] **parallelizable**: **Bool** - Whether to run tests in parallel. Defaults to false
|
- [ ] **parallelizable**: **Bool** - Whether to run tests in parallel. Defaults to false
|
||||||
- [ ] **randomExecutionOrder**: **Bool** - Whether to run tests in a random order. Defaults to false
|
- [ ] **randomExecutionOrder**: **Bool** - Whether to run tests in a random order. Defaults to false
|
||||||
|
- [ ] **location**: **String** - GPX file or predefined value for simulating location. See [Simulate Location](#simulate-location) for location examples.
|
||||||
- [ ] **skipped**: **Bool** - Whether to skip all of the test target tests. Defaults to false
|
- [ ] **skipped**: **Bool** - Whether to skip all of the test target tests. Defaults to false
|
||||||
- [ ] **skippedTests**: **[String]** - List of tests in the test target to skip. Defaults to empty
|
- [ ] **skippedTests**: **[String]** - List of tests in the test target to skip. Defaults to empty
|
||||||
- [ ] **selectedTests**: **[String]** - List of tests in the test target to whitelist and select. Defaults to empty. This will override `skippedTests` if provided
|
- [ ] **selectedTests**: **[String]** - List of tests in the test target to whitelist and select. Defaults to empty. This will override `skippedTests` if provided
|
||||||
|
4
Makefile
4
Makefile
@ -1,6 +1,6 @@
|
|||||||
TOOL_NAME = XcodeGen
|
TOOL_NAME = XcodeGen
|
||||||
export EXECUTABLE_NAME = xcodegen
|
export EXECUTABLE_NAME = xcodegen
|
||||||
VERSION = 2.25.0
|
VERSION = 2.26.0
|
||||||
|
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
|
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
|
||||||
@ -46,4 +46,4 @@ brew:
|
|||||||
brew bump-formula-pr --url=$(RELEASE_TAR) XcodeGen
|
brew bump-formula-pr --url=$(RELEASE_TAR) XcodeGen
|
||||||
|
|
||||||
archive: build
|
archive: build
|
||||||
./scripts/archive.sh $(EXECUTABLE_PATH)
|
./scripts/archive.sh "$(EXECUTABLE_PATH)"
|
||||||
|
@ -78,8 +78,8 @@
|
|||||||
"repositoryURL": "https://github.com/tuist/XcodeProj.git",
|
"repositoryURL": "https://github.com/tuist/XcodeProj.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": null,
|
"branch": null,
|
||||||
"revision": "446f3a0db73e141c7f57e26fcdb043096b1db52c",
|
"revision": "aa2a42c7a744ca18b5918771fdd6cf40f9753db5",
|
||||||
"version": "8.3.1"
|
"version": "8.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,7 @@ let package = Package(
|
|||||||
.package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.2.0"),
|
.package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.2.0"),
|
||||||
.package(url: "https://github.com/kylef/Spectre.git", from: "0.9.2"),
|
.package(url: "https://github.com/kylef/Spectre.git", from: "0.9.2"),
|
||||||
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.0.0"),
|
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.0.0"),
|
||||||
.package(url: "https://github.com/tuist/XcodeProj.git", from: "8.3.1"),
|
.package(url: "https://github.com/tuist/XcodeProj.git", from: "8.6.0"),
|
||||||
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.3"),
|
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.3"),
|
||||||
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
|
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
|
||||||
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", .exact("0.2.0")),
|
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", .exact("0.2.0")),
|
||||||
|
@ -113,7 +113,7 @@ swift run xcodegen
|
|||||||
Add the following to your Package.swift file's dependencies:
|
Add the following to your Package.swift file's dependencies:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.25.0"),
|
.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.26.0"),
|
||||||
```
|
```
|
||||||
|
|
||||||
And then import wherever needed: `import XcodeGenKit`
|
And then import wherever needed: `import XcodeGenKit`
|
||||||
|
@ -184,6 +184,7 @@ public struct Scheme: Equatable {
|
|||||||
public var deleteScreenshotsWhenEachTestSucceeds: Bool
|
public var deleteScreenshotsWhenEachTestSucceeds: Bool
|
||||||
|
|
||||||
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
|
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
|
||||||
|
|
||||||
public static let randomExecutionOrderDefault = false
|
public static let randomExecutionOrderDefault = false
|
||||||
public static let parallelizableDefault = false
|
public static let parallelizableDefault = false
|
||||||
|
|
||||||
@ -191,6 +192,7 @@ public struct Scheme: Equatable {
|
|||||||
public let targetReference: TargetReference
|
public let targetReference: TargetReference
|
||||||
public var randomExecutionOrder: Bool
|
public var randomExecutionOrder: Bool
|
||||||
public var parallelizable: Bool
|
public var parallelizable: Bool
|
||||||
|
public var location: String?
|
||||||
public var skipped: Bool
|
public var skipped: Bool
|
||||||
public var skippedTests: [String]
|
public var skippedTests: [String]
|
||||||
public var selectedTests: [String]
|
public var selectedTests: [String]
|
||||||
@ -199,6 +201,7 @@ public struct Scheme: Equatable {
|
|||||||
targetReference: TargetReference,
|
targetReference: TargetReference,
|
||||||
randomExecutionOrder: Bool = randomExecutionOrderDefault,
|
randomExecutionOrder: Bool = randomExecutionOrderDefault,
|
||||||
parallelizable: Bool = parallelizableDefault,
|
parallelizable: Bool = parallelizableDefault,
|
||||||
|
location: String? = nil,
|
||||||
skipped: Bool = false,
|
skipped: Bool = false,
|
||||||
skippedTests: [String] = [],
|
skippedTests: [String] = [],
|
||||||
selectedTests: [String] = []
|
selectedTests: [String] = []
|
||||||
@ -206,6 +209,7 @@ public struct Scheme: Equatable {
|
|||||||
self.targetReference = targetReference
|
self.targetReference = targetReference
|
||||||
self.randomExecutionOrder = randomExecutionOrder
|
self.randomExecutionOrder = randomExecutionOrder
|
||||||
self.parallelizable = parallelizable
|
self.parallelizable = parallelizable
|
||||||
|
self.location = location
|
||||||
self.skipped = skipped
|
self.skipped = skipped
|
||||||
self.skippedTests = skippedTests
|
self.skippedTests = skippedTests
|
||||||
self.selectedTests = selectedTests
|
self.selectedTests = selectedTests
|
||||||
@ -216,6 +220,7 @@ public struct Scheme: Equatable {
|
|||||||
targetReference = try TargetReference(value)
|
targetReference = try TargetReference(value)
|
||||||
randomExecutionOrder = false
|
randomExecutionOrder = false
|
||||||
parallelizable = false
|
parallelizable = false
|
||||||
|
location = nil
|
||||||
skipped = false
|
skipped = false
|
||||||
skippedTests = []
|
skippedTests = []
|
||||||
selectedTests = []
|
selectedTests = []
|
||||||
@ -536,6 +541,7 @@ extension Scheme.Test.TestTarget: JSONObjectConvertible {
|
|||||||
targetReference = try TargetReference(jsonDictionary.json(atKeyPath: "name"))
|
targetReference = try TargetReference(jsonDictionary.json(atKeyPath: "name"))
|
||||||
randomExecutionOrder = jsonDictionary.json(atKeyPath: "randomExecutionOrder") ?? Scheme.Test.TestTarget.randomExecutionOrderDefault
|
randomExecutionOrder = jsonDictionary.json(atKeyPath: "randomExecutionOrder") ?? Scheme.Test.TestTarget.randomExecutionOrderDefault
|
||||||
parallelizable = jsonDictionary.json(atKeyPath: "parallelizable") ?? Scheme.Test.TestTarget.parallelizableDefault
|
parallelizable = jsonDictionary.json(atKeyPath: "parallelizable") ?? Scheme.Test.TestTarget.parallelizableDefault
|
||||||
|
location = jsonDictionary.json(atKeyPath: "location") ?? nil
|
||||||
skipped = jsonDictionary.json(atKeyPath: "skipped") ?? false
|
skipped = jsonDictionary.json(atKeyPath: "skipped") ?? false
|
||||||
skippedTests = jsonDictionary.json(atKeyPath: "skippedTests") ?? []
|
skippedTests = jsonDictionary.json(atKeyPath: "skippedTests") ?? []
|
||||||
selectedTests = jsonDictionary.json(atKeyPath: "selectedTests") ?? []
|
selectedTests = jsonDictionary.json(atKeyPath: "selectedTests") ?? []
|
||||||
@ -559,6 +565,9 @@ extension Scheme.Test.TestTarget: JSONEncodable {
|
|||||||
if parallelizable != Scheme.Test.TestTarget.parallelizableDefault {
|
if parallelizable != Scheme.Test.TestTarget.parallelizableDefault {
|
||||||
dict["parallelizable"] = parallelizable
|
dict["parallelizable"] = parallelizable
|
||||||
}
|
}
|
||||||
|
if let location = location {
|
||||||
|
dict["location"] = location
|
||||||
|
}
|
||||||
if skipped {
|
if skipped {
|
||||||
dict["skipped"] = skipped
|
dict["skipped"] = skipped
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,6 @@ import ProjectSpec
|
|||||||
import XcodeGenCLI
|
import XcodeGenCLI
|
||||||
import Version
|
import Version
|
||||||
|
|
||||||
let version = Version("2.25.0")
|
let version = Version("2.26.0")
|
||||||
let cli = XcodeGenCLI(version: version)
|
let cli = XcodeGenCLI(version: version)
|
||||||
cli.execute()
|
cli.execute()
|
||||||
|
27
Sources/XcodeGenCore/Atomic.swift
Normal file
27
Sources/XcodeGenCore/Atomic.swift
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// Atomic.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Vladislav Lisianskii on 23.02.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
@propertyWrapper
|
||||||
|
struct Atomic<Value> {
|
||||||
|
private let queue = DispatchQueue(label: "com.xcodegencore.atomic")
|
||||||
|
private var value: Value
|
||||||
|
|
||||||
|
init(wrappedValue: Value) {
|
||||||
|
self.value = wrappedValue
|
||||||
|
}
|
||||||
|
|
||||||
|
var wrappedValue: Value {
|
||||||
|
get {
|
||||||
|
return queue.sync { value }
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
queue.sync { value = newValue }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -57,7 +57,7 @@ public class Glob: Collection {
|
|||||||
|
|
||||||
public static let defaultBlacklistedDirectories = ["node_modules", "Pods"]
|
public static let defaultBlacklistedDirectories = ["node_modules", "Pods"]
|
||||||
|
|
||||||
private var isDirectoryCache = [String: Bool]()
|
@Atomic private var isDirectoryCache = [String: Bool]()
|
||||||
|
|
||||||
public let behavior: Behavior
|
public let behavior: Behavior
|
||||||
public let blacklistedDirectories: [String]
|
public let blacklistedDirectories: [String]
|
||||||
|
@ -187,12 +187,28 @@ public class SchemeGenerator {
|
|||||||
runPostActionsOnFailure: scheme.build.runPostActionsOnFailure
|
runPostActionsOnFailure: scheme.build.runPostActionsOnFailure
|
||||||
)
|
)
|
||||||
|
|
||||||
let testables = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuilEntries in
|
let testables: [XCScheme.TestableReference] = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuildEntries in
|
||||||
XCScheme.TestableReference(
|
|
||||||
|
var locationScenarioReference: XCScheme.LocationScenarioReference?
|
||||||
|
if var location = testTarget.location {
|
||||||
|
|
||||||
|
if location.contains(".gpx") {
|
||||||
|
var path = Path(components: [project.options.schemePathPrefix, location])
|
||||||
|
path = path.simplifyingParentDirectoryReferences()
|
||||||
|
location = path.string
|
||||||
|
}
|
||||||
|
|
||||||
|
let referenceType = location.contains(".gpx") ? "0" : "1"
|
||||||
|
locationScenarioReference = XCScheme.LocationScenarioReference(identifier: location, referenceType: referenceType)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return XCScheme.TestableReference(
|
||||||
skipped: testTarget.skipped,
|
skipped: testTarget.skipped,
|
||||||
parallelizable: testTarget.parallelizable,
|
parallelizable: testTarget.parallelizable,
|
||||||
randomExecutionOrdering: testTarget.randomExecutionOrder,
|
randomExecutionOrdering: testTarget.randomExecutionOrder,
|
||||||
buildableReference: testBuilEntries.buildableReference,
|
buildableReference: testBuildEntries.buildableReference,
|
||||||
|
locationScenarioReference: locationScenarioReference,
|
||||||
skippedTests: testTarget.skippedTests.map(XCScheme.TestItem.init),
|
skippedTests: testTarget.skippedTests.map(XCScheme.TestItem.init),
|
||||||
selectedTests: testTarget.selectedTests.map(XCScheme.TestItem.init),
|
selectedTests: testTarget.selectedTests.map(XCScheme.TestItem.init),
|
||||||
useTestSelectionWhitelist: !testTarget.selectedTests.isEmpty ? true : nil
|
useTestSelectionWhitelist: !testTarget.selectedTests.isEmpty ? true : nil
|
||||||
|
@ -53,6 +53,10 @@
|
|||||||
BlueprintName = "App_iOS_Tests"
|
BlueprintName = "App_iOS_Tests"
|
||||||
ReferencedContainer = "container:Project.xcodeproj">
|
ReferencedContainer = "container:Project.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
|
<LocationScenarioReference
|
||||||
|
identifier = "New York, NY, USA"
|
||||||
|
referenceType = "1">
|
||||||
|
</LocationScenarioReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
|
@ -426,6 +426,7 @@ schemes:
|
|||||||
- name: App_iOS_Tests
|
- name: App_iOS_Tests
|
||||||
parallelizable: true
|
parallelizable: true
|
||||||
randomExecutionOrder: true
|
randomExecutionOrder: true
|
||||||
|
location: New York, NY, USA
|
||||||
customLLDBInit: ${SRCROOT}/.lldbinit
|
customLLDBInit: ${SRCROOT}/.lldbinit
|
||||||
targetTemplates:
|
targetTemplates:
|
||||||
MyTemplate:
|
MyTemplate:
|
||||||
|
@ -790,6 +790,7 @@ class SpecLoadingTests: XCTestCase {
|
|||||||
"name": "ExternalProject/Target2",
|
"name": "ExternalProject/Target2",
|
||||||
"parallelizable": true,
|
"parallelizable": true,
|
||||||
"skipped": true,
|
"skipped": true,
|
||||||
|
"location": "test.gpx",
|
||||||
"randomExecutionOrder": true,
|
"randomExecutionOrder": true,
|
||||||
"skippedTests": ["Test/testExample()"],
|
"skippedTests": ["Test/testExample()"],
|
||||||
],
|
],
|
||||||
@ -836,6 +837,7 @@ class SpecLoadingTests: XCTestCase {
|
|||||||
targetReference: "ExternalProject/Target2",
|
targetReference: "ExternalProject/Target2",
|
||||||
randomExecutionOrder: true,
|
randomExecutionOrder: true,
|
||||||
parallelizable: true,
|
parallelizable: true,
|
||||||
|
location: "test.gpx",
|
||||||
skipped: true,
|
skipped: true,
|
||||||
skippedTests: ["Test/testExample()"]
|
skippedTests: ["Test/testExample()"]
|
||||||
),
|
),
|
||||||
@ -856,6 +858,7 @@ class SpecLoadingTests: XCTestCase {
|
|||||||
[
|
[
|
||||||
"name": "ExternalProject/Target2",
|
"name": "ExternalProject/Target2",
|
||||||
"parallelizable": true,
|
"parallelizable": true,
|
||||||
|
"location": "New York, NY, USA",
|
||||||
"randomExecutionOrder": true,
|
"randomExecutionOrder": true,
|
||||||
"selectedTests": ["Test/testExample()"],
|
"selectedTests": ["Test/testExample()"],
|
||||||
],
|
],
|
||||||
@ -877,6 +880,7 @@ class SpecLoadingTests: XCTestCase {
|
|||||||
targetReference: "ExternalProject/Target2",
|
targetReference: "ExternalProject/Target2",
|
||||||
randomExecutionOrder: true,
|
randomExecutionOrder: true,
|
||||||
parallelizable: true,
|
parallelizable: true,
|
||||||
|
location: "New York, NY, USA",
|
||||||
selectedTests: ["Test/testExample()"]
|
selectedTests: ["Test/testExample()"]
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
@ -49,11 +49,14 @@ class SchemeGeneratorTests: XCTestCase {
|
|||||||
let preAction = Scheme.ExecutionAction(name: "Script", script: "echo Starting", settingsTarget: app.name)
|
let preAction = Scheme.ExecutionAction(name: "Script", script: "echo Starting", settingsTarget: app.name)
|
||||||
let simulateLocation = Scheme.SimulateLocation(allow: true, defaultLocation: "New York, NY, USA")
|
let simulateLocation = Scheme.SimulateLocation(allow: true, defaultLocation: "New York, NY, USA")
|
||||||
let storeKitConfiguration = "Configuration.storekit"
|
let storeKitConfiguration = "Configuration.storekit"
|
||||||
let scheme = Scheme(
|
let scheme = try Scheme(
|
||||||
name: "MyScheme",
|
name: "MyScheme",
|
||||||
build: Scheme.Build(targets: [buildTarget], preActions: [preAction]),
|
build: Scheme.Build(targets: [buildTarget], preActions: [preAction]),
|
||||||
run: Scheme.Run(config: "Debug", askForAppToLaunch: true, launchAutomaticallySubstyle: "2", simulateLocation: simulateLocation, storeKitConfiguration: storeKitConfiguration, customLLDBInit: "/sample/.lldbinit"),
|
run: Scheme.Run(config: "Debug", askForAppToLaunch: true, launchAutomaticallySubstyle: "2", simulateLocation: simulateLocation, storeKitConfiguration: storeKitConfiguration, customLLDBInit: "/sample/.lldbinit"),
|
||||||
test: Scheme.Test(config: "Debug", customLLDBInit: "/test/.lldbinit"),
|
test: Scheme.Test(config: "Debug", targets: [
|
||||||
|
Scheme.Test.TestTarget(targetReference: TargetReference(framework.name), location: "test.gpx"),
|
||||||
|
Scheme.Test.TestTarget(targetReference: TargetReference(framework.name), location: "New York, NY, USA")
|
||||||
|
], customLLDBInit: "/test/.lldbinit"),
|
||||||
profile: Scheme.Profile(config: "Release", askForAppToLaunch: true)
|
profile: Scheme.Profile(config: "Release", askForAppToLaunch: true)
|
||||||
)
|
)
|
||||||
let project = Project(
|
let project = Project(
|
||||||
@ -109,6 +112,13 @@ class SchemeGeneratorTests: XCTestCase {
|
|||||||
try expect(xcscheme.launchAction?.customLLDBInitFile) == "/sample/.lldbinit"
|
try expect(xcscheme.launchAction?.customLLDBInitFile) == "/sample/.lldbinit"
|
||||||
try expect(xcscheme.testAction?.customLLDBInitFile) == "/test/.lldbinit"
|
try expect(xcscheme.testAction?.customLLDBInitFile) == "/test/.lldbinit"
|
||||||
try expect(xcscheme.testAction?.systemAttachmentLifetime).to.beNil()
|
try expect(xcscheme.testAction?.systemAttachmentLifetime).to.beNil()
|
||||||
|
|
||||||
|
try expect(xcscheme.testAction?.testables[0].locationScenarioReference?.referenceType) == "0"
|
||||||
|
try expect(xcscheme.testAction?.testables[0].locationScenarioReference?.identifier) == "../test.gpx"
|
||||||
|
|
||||||
|
try expect(xcscheme.testAction?.testables[1].locationScenarioReference?.referenceType) == "1"
|
||||||
|
try expect(xcscheme.testAction?.testables[1].locationScenarioReference?.identifier) == "New York, NY, USA"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let frameworkTarget = Scheme.BuildTarget(target: .local(framework.name), buildTypes: [.archiving])
|
let frameworkTarget = Scheme.BuildTarget(target: .local(framework.name), buildTypes: [.archiving])
|
||||||
|
@ -10,7 +10,7 @@ LICENSE=LICENSE
|
|||||||
# copy
|
# copy
|
||||||
|
|
||||||
mkdir -p $BINDIR
|
mkdir -p $BINDIR
|
||||||
cp -f $1 $BINDIR
|
cp -f "$1" $BINDIR
|
||||||
|
|
||||||
mkdir -p $SHAREDIR
|
mkdir -p $SHAREDIR
|
||||||
cp -R SettingPresets $SHAREDIR/SettingPresets
|
cp -R SettingPresets $SHAREDIR/SettingPresets
|
||||||
|
Loading…
Reference in New Issue
Block a user