mirror of
				https://github.com/GayPizzaSpecifications/darwin-apk.git
				synced 2025-11-04 07:59:38 +00:00 
			
		
		
		
	Quick n' dirty SwiftGraph
This commit is contained in:
		@ -14,28 +14,41 @@ struct DpkGraphCommand: AsyncParsableCommand {
 | 
			
		||||
    let graph: ApkPackageGraph
 | 
			
		||||
    do {
 | 
			
		||||
      let localRepositories = try await ApkRepositoriesConfig()
 | 
			
		||||
      graph = ApkPackageGraph(index: try await ApkIndexReader.resolve(localRepositories.repositories, fetch: .lazy))
 | 
			
		||||
      graph.buildGraphNode()
 | 
			
		||||
 | 
			
		||||
      try graph.pkgIndex.description.write(to: URL(filePath: "packages.txt"), atomically: false, encoding: .utf8)
 | 
			
		||||
      var timerStart = DispatchTime.now()
 | 
			
		||||
      var pkgIndex = try await ApkIndexReader.resolve(localRepositories.repositories, fetch: .lazy)
 | 
			
		||||
      print("Index build took \(timerStart.distance(to: .now()).seconds) seconds")
 | 
			
		||||
      try pkgIndex.description.write(to: URL(filePath: "packages.txt"), atomically: false, encoding: .utf8)
 | 
			
		||||
 | 
			
		||||
      timerStart = DispatchTime.now()
 | 
			
		||||
      try graph = ApkPackageGraph(from: &pkgIndex)
 | 
			
		||||
      print("Graph build took \(timerStart.distance(to: .now()).seconds) seconds")
 | 
			
		||||
 | 
			
		||||
      try graph.shallowIsolates.map { pkgIndex.packages[$0].nameDescription }.joined(separator: "\n")
 | 
			
		||||
        .write(to: URL(filePath: "shallowIsolates.txt"), atomically: false, encoding: .utf8)
 | 
			
		||||
      try graph.deepIsolates.map { pkgIndex.packages[$0].nameDescription }.joined(separator: "\n")
 | 
			
		||||
        .write(to: URL(filePath: "deepIsolates.txt"), atomically: false, encoding: .utf8)
 | 
			
		||||
 | 
			
		||||
      let sorted = try graph.sorted(breakCycles: false)
 | 
			
		||||
      try sorted.map { pkgIndex.packages[$0].nameDescription }.joined(separator: "\n")
 | 
			
		||||
        .write(to: URL(filePath: "sorted.txt"), atomically: false, encoding: .utf8)
 | 
			
		||||
 | 
			
		||||
    } catch {
 | 
			
		||||
      fatalError(error.localizedDescription)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if false
 | 
			
		||||
    if var out = TextFileWriter(URL(filePath: "shallowIsolates.txt")) {
 | 
			
		||||
      for node in graph.shallowIsolates { print(node, to: &out) }
 | 
			
		||||
    }
 | 
			
		||||
    if var out = TextFileWriter(URL(filePath: "deepIsolates.txt")) {
 | 
			
		||||
      for node in graph.deepIsolates { print(node, to: &out) }
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    do {
 | 
			
		||||
      let sorted = try graph.parallelOrderSort()
 | 
			
		||||
      print(sorted)
 | 
			
		||||
    } catch {
 | 
			
		||||
      fatalError(error.localizedDescription)
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fileprivate extension DispatchTimeInterval {
 | 
			
		||||
  var seconds: Double {
 | 
			
		||||
    switch self {
 | 
			
		||||
    case .seconds(let value):      Double(value)
 | 
			
		||||
    case .milliseconds(let value): Double(value) / 1_000
 | 
			
		||||
    case .microseconds(let value): Double(value) / 1_000_000
 | 
			
		||||
    case .nanoseconds(let value):  Double(value) / 1_000_000_000
 | 
			
		||||
    case .never: .infinity
 | 
			
		||||
    @unknown default:
 | 
			
		||||
    fatalError("Unsupported")
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user