aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/update_copyright.janet
blob: 71fdf611f7403e81735a5afd6621d42bb14f6637 (plain) (blame)
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
(def usage (string "usage: janet " (first (dyn :args)) " <last-year> <this-year>"))

(def ignores [".git"])
(def exts ["LICENSE" "Makefile" ".build" ".c" ".h" ".janet"])

(defn arg [i]
  (defn bail [] (print usage) (quit))
  (if-not (= 3 (length (dyn :args)))
    (bail)
    (if-let [val (get (dyn :args) i)]
      val
      (bail))))

(def oy (arg 1))
(def ny (arg 2))
(def od (string "Copyright (c) " oy " Calvin Rose"))
(def nd (string "Copyright (c) " ny " Calvin Rose"))

(defn join [dir name]
  (os/realpath (string dir "/" name)))

(defn add-children [dir paths]
  (loop [name :in (os/dir dir)
              :unless (has-value? ignores name)]
   (array/push paths (join dir name))))

(defn ends-in? [exts s]
  (find (fn [ext] (string/has-suffix? ext s)) exts))

(defn update-disclaimer [path]
  (if-let [_   (ends-in? exts path)
           oc  (slurp path)
           pos (string/find od oc)
           nc  (string (string/slice oc 0 pos) nd (string/slice oc (+ pos (length od))))]
    (spit path nc)))

(def cwd (os/cwd))
(def paths (if (string/has-suffix? "janet" cwd)
             @[cwd]
             @[(join cwd "..")]))
(loop [p :in paths]
  (if (= :directory ((os/stat p) :mode))
    (add-children p paths)
    (update-disclaimer p)))