   "env or workdir can be nil to signify inherit from parent process"
   ;  .waitFor
   [^String cmd 
-   ^{:tag "[Ljava.lang.String;"} env ;array of String 
+   ^{:tag "[Ljava.lang.String;"} env ;clojure type hint for java's array of String 
    ^File workdir]
   (let [^Runtime rt (Runtime/getRuntime)
         ^Process process (.exec rt cmd env workdir)]


(def symlink-filemode "120000")

(defn get_all_symlinks_from_repo 
  "returns a list of all symlinks inside the specified git repository 
   as relative paths to the provided repo-path"
  [repo-path]
  (with-open [^BufferedReader input (shellify gitlstree_cmd repo-path)]
    (let [lazylines (line-seq input)
          ]
      (disj 
        (set
          (map #(
                  let [ss (clojure.string/split ^String % #"\s")
                       ^String filemode (first ss)
                       ]
                  (if (.equals filemode symlink-filemode)
                    (last ss)
                    nil
                    )
                  )
            lazylines
            )
          )

(defn get_points_to [parsed_ff]
  {:pre [(map? parsed_ff)]
   }
  (let [found (find parsed_ff KEY_PointsTo)
        _ (assert found "you tried to access a 'field' that didn't exist, you should've checked before!")
        ;ie. non nil, it's [key value] vector
        ]
