equal
deleted
inserted
replaced
257 def export_files( |
257 def export_files( |
258 store: Sessions.Store, |
258 store: Sessions.Store, |
259 session_name: String, |
259 session_name: String, |
260 export_dir: Path, |
260 export_dir: Path, |
261 progress: Progress = No_Progress, |
261 progress: Progress = No_Progress, |
|
262 export_prune: Int = 0, |
262 export_list: Boolean = false, |
263 export_list: Boolean = false, |
263 export_patterns: List[String] = Nil, |
264 export_patterns: List[String] = Nil, |
264 export_prefix: String = "") |
265 export_prefix: String = "") |
265 { |
266 { |
266 using(store.open_database(session_name))(db => |
267 using(store.open_database(session_name))(db => |
285 for { |
286 for { |
286 (theory_name, group) <- exports.toList.groupBy(_._1).toList.sortBy(_._1) |
287 (theory_name, group) <- exports.toList.groupBy(_._1).toList.sortBy(_._1) |
287 name <- group.map(_._2).sorted |
288 name <- group.map(_._2).sorted |
288 entry <- read_entry(db, session_name, theory_name, name) |
289 entry <- read_entry(db, session_name, theory_name, name) |
289 } { |
290 } { |
290 val path = export_dir + Path.basic(theory_name) + Path.explode(name) |
291 val elems = theory_name :: space_explode('/', name) |
|
292 val path = |
|
293 if (elems.length < export_prune + 1) { |
|
294 error("Cannot prune path by " + export_prune + " element(s): " + Path.make(elems)) |
|
295 } |
|
296 else export_dir + Path.make(elems.drop(export_prune)) |
|
297 |
291 progress.echo(export_prefix + "export " + path) |
298 progress.echo(export_prefix + "export " + path) |
292 Isabelle_System.mkdirs(path.dir) |
299 Isabelle_System.mkdirs(path.dir) |
293 Bytes.write(path, entry.uncompressed(cache = store.xz_cache)) |
300 Bytes.write(path, entry.uncompressed(cache = store.xz_cache)) |
294 } |
301 } |
295 } |
302 } |
309 var export_dir = default_export_dir |
316 var export_dir = default_export_dir |
310 var dirs: List[Path] = Nil |
317 var dirs: List[Path] = Nil |
311 var export_list = false |
318 var export_list = false |
312 var no_build = false |
319 var no_build = false |
313 var options = Options.init() |
320 var options = Options.init() |
|
321 var export_prune = 0 |
314 var system_mode = false |
322 var system_mode = false |
315 var export_patterns: List[String] = Nil |
323 var export_patterns: List[String] = Nil |
316 |
324 |
317 val getopts = Getopts(""" |
325 val getopts = Getopts(""" |
318 Usage: isabelle export [OPTIONS] SESSION |
326 Usage: isabelle export [OPTIONS] SESSION |
321 -O DIR output directory for exported files (default: """ + default_export_dir + """) |
329 -O DIR output directory for exported files (default: """ + default_export_dir + """) |
322 -d DIR include session directory |
330 -d DIR include session directory |
323 -l list exports |
331 -l list exports |
324 -n no build of session |
332 -n no build of session |
325 -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
333 -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
|
334 -p NUM prune path of exported files by NUM elements |
326 -s system build mode for session image |
335 -s system build mode for session image |
327 -x PATTERN extract files matching pattern (e.g. "*:**" for all) |
336 -x PATTERN extract files matching pattern (e.g. "*:**" for all) |
328 |
337 |
329 List or export theory exports for SESSION: named blobs produced by |
338 List or export theory exports for SESSION: named blobs produced by |
330 isabelle build. Option -l or -x is required; option -x may be repeated. |
339 isabelle build. Option -l or -x is required; option -x may be repeated. |
336 "O:" -> (arg => export_dir = Path.explode(arg)), |
345 "O:" -> (arg => export_dir = Path.explode(arg)), |
337 "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
346 "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
338 "l" -> (_ => export_list = true), |
347 "l" -> (_ => export_list = true), |
339 "n" -> (_ => no_build = true), |
348 "n" -> (_ => no_build = true), |
340 "o:" -> (arg => options = options + arg), |
349 "o:" -> (arg => options = options + arg), |
|
350 "p:" -> (arg => export_prune = Value.Int.parse(arg)), |
341 "s" -> (_ => system_mode = true), |
351 "s" -> (_ => system_mode = true), |
342 "x:" -> (arg => export_patterns ::= arg)) |
352 "x:" -> (arg => export_patterns ::= arg)) |
343 |
353 |
344 val more_args = getopts(args) |
354 val more_args = getopts(args) |
345 val session_name = |
355 val session_name = |
364 |
374 |
365 |
375 |
366 /* export files */ |
376 /* export files */ |
367 |
377 |
368 val store = Sessions.store(options, system_mode) |
378 val store = Sessions.store(options, system_mode) |
369 export_files(store, session_name, export_dir, progress = progress, |
379 export_files(store, session_name, export_dir, progress = progress, export_prune = export_prune, |
370 export_list = export_list, export_patterns = export_patterns) |
380 export_list = export_list, export_patterns = export_patterns) |
371 }) |
381 }) |
372 } |
382 } |