-
Notifications
You must be signed in to change notification settings - Fork 596
/
CacheBase.groovy
99 lines (74 loc) · 2.71 KB
/
CacheBase.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* Copyright 2013-2024, Seqera Labs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package nextflow.cli
import java.nio.file.Path
import groovy.transform.CompileStatic
import groovy.transform.PackageScope
import nextflow.cache.CacheDB
import nextflow.cache.CacheFactory
import nextflow.exception.AbortOperationException
import nextflow.util.HistoryFile
/**
* Common cache operations shared by {@link CmdLog} and {@link CmdClean}
*
* @author Paolo Di Tommaso <paolo.ditommaso@gmail.com>
*/
@CompileStatic
trait CacheBase {
@PackageScope
Path basePath
@PackageScope
HistoryFile history
abstract String getBut()
abstract String getBefore()
abstract String getAfter()
abstract List<String> getArgs()
void init() {
if( !history ) {
history = !basePath ? HistoryFile.DEFAULT : new HistoryFile(basePath.resolve(HistoryFile.FILE_NAME))
}
if( !history.exists() || history.empty() )
throw new AbortOperationException("It looks like no pipeline was executed in this folder (or execution history is empty)")
if( after && before )
throw new AbortOperationException("Options `after` and `before` cannot be used in the same command")
if( after && but )
throw new AbortOperationException("Options `after` and `but` cannot be used in the same command")
if( before && but )
throw new AbortOperationException("Options `before` and `but` cannot be used in the same command")
}
CacheDB cacheFor(HistoryFile.Record entry) {
CacheFactory.create(entry.sessionId, entry.runName, basePath)
}
List<HistoryFile.Record> listIds() {
if( but ) {
return history.findBut(but)
}
if( before ) {
return history.findBefore(before)
}
else if( after ) {
return history.findAfter(after)
}
// -- get the session ID from the command line if specified or retrieve from
if( !args )
return history.findByIdOrName('last')
List<HistoryFile.Record> result = []
for( String name : args ) {
result.addAll(history.findByIdOrName(name))
}
return result
}
}