-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodhmm_utility.go
68 lines (60 loc) · 2.16 KB
/
modhmm_utility.go
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
/* Copyright (C) 2018 Philipp Benner
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package main
/* -------------------------------------------------------------------------- */
import "log"
import "os"
import . "github.com/pbenner/modhmm/config"
/* file utilities
* -------------------------------------------------------------------------- */
func updateRequired(config ConfigModHmm, target TargetFile, deps ...string) bool {
if s1, err := os.Stat(target.Filename); err != nil {
if target.Static {
log.Fatalf("Target `%s' is marked static but does not exist\n", target)
}
printStderr(config, 2, "Target `%s' does not exist...\n", target.Filename)
return true
} else {
if target.Static {
printStderr(config, 2, "Target `%s' is static and requires no update...\n", target)
return false
}
for _, dep := range deps {
if s2, err := os.Stat(dep); err == nil {
if s1.ModTime().Before(s2.ModTime()) {
printStderr(config, 2, "Target `%s' requires update...\n", target.Filename)
printStderr(config, 3, " -> `%s' has more recent timestamp\n", dep)
return true
}
}
}
}
printStderr(config, 2, "Target `%s' is up to date...\n", target.Filename)
return false
}
/* string slice utilities
* -------------------------------------------------------------------------- */
func uniqueStrings(a []string) []string {
m := make(map[string]struct{})
r := []string{}
for _, s := range a {
if _, ok := m[s]; !ok {
r = append(r, s)
m[s] = struct{}{}
}
}
return r
}