        (map prn)
        )
   )
+
+  (defn main-code-age
+    []
+    (let [edn-file "tmp/code-age_all_2018-08-30_parse-source-args.edn"
+          csv-file "tmp/code-age_all_2018-08-30_parse-source-args.csv"]
+      (println (str (now)))
+      (atoms-on-the-first-of-every-month edn-file)
+      (summarize-code-age edn-file csv-file)
+      ))

'((def code-age-repo (->> "~/opt/src/atom-finder/gcc" expand-home gitp/load-repo)))
;(def code-age-repo linux-historical-repo)

(->> "~/opt/src/atom-finder-histories"
     expand-home
     list-dirs
     (map #(juxt->> % .getName gitp/load-repo))
     (into {})
     (def history-repos))

'((print (now)))
'((-<>>
   "first-commits-per-month.txt"
   read-data
   (partition-by (fn [line] (-> line :date year-month first)))
   (map first)
   (drop-while #(not= "ba68e9715ac5e695f105cbb6a3a1cf4e9b5422d1" (:rev-str %))) rest
   ;(map pap)
   ;(take 2) (map prn))
   (map (fn [h]
          (let [repo (-> h :project history-repos)]
                {:project (:project h) :repo repo :rev-commit (find-rev-commit repo (-> h :rev-str))})))
   (mapcat (fn [h] (map (partial-right assoc :project (:project h)) (repo-files (:repo h) (:rev-commit h)))))
 (filter (comp c-file? :path))
 (pmap (fn [rev-file]
    (log-err (str "parsing/finding atoms in " (juxt->> rev-file :path :rev-str)) nil
             (with-timeout 120
        (if-let [ast (mem-tu (:path rev-file) (:content rev-file))]
          (assoc (dissoc rev-file :content)
                 :atoms (->> ast find-all-atoms-non-atoms (map-values count))))))))
 (map prn)
 dorun
 (log-to "tmp/code-age_all_2018-01-16_03_per-year_skipped-clang-emacs_continued.edn")
 time-mins
 ))


   (filter :date)
   (sort-by (juxt :project :date))
   reverse
   (maps-to-csv csv-file)
   time-mins
   ))

