1 /* 2 * Copyright 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package bench.flame.diff.interop 17 18 import com.github.ajalt.clikt.core.CliktCommand 19 import java.io.File 20 import java.nio.file.InvalidPathException 21 import java.nio.file.Path 22 isValidFileNamenull23internal fun String.isValidFileName() = isNotBlank() && isValidPath() && isFileNameOnly() 24 25 private fun String.isValidPath(): Boolean = try { 26 Path.of(this) 27 true 28 } catch (_: InvalidPathException) { 29 false 30 } 31 isFileNameOnlynull32private fun String.isFileNameOnly(): Boolean = isNotBlank() && isValidPath() && 33 Path.of(this).parent == null 34 35 internal fun CliktCommand.openFileInOs(target: File) = execWithChecks( 36 if (Os.isMac) "open" else "xdg-open", target.absolutePath 37 ) 38 39 internal typealias FileWithId = IndexedValue<File> 40 internal val FileWithId.id get() = index + 1 41 internal val FileWithId.file get() = value 42 internal fun Sequence<File>.withId(): Sequence<FileWithId> = withIndex() 43