 (defn fetch-repo-repl-options []
   (first (keep parse-known-repl-opts (read-all-ns-forms "cljs.repl" :compiler))))
 
+(def ignored-repo-options
+  {:compiler
+   #{:ups-externs       ; this is implicitly computed from upstream deps (user input ignored)
+     :ups-foreign-libs  ; this is implicitly computed from upstream deps (user input ignored)
+     :ups-libs          ; this is implicitly computed from upstream deps (user input ignored)
+     :source-map-inline ; only applies to repl
+     :emit-constants}    ; this is implicitly computed from optimize-constants (user input ignored)
+   :repl
+   #{:watch-fn}}) ; already in compiler options
+
 (defn fetch-repo-options []
   (with-version! (last @published-cljs-tags)
     {:compiler (fetch-repo-compiler-options)
      :repl (fetch-repo-repl-options)}))
 
-;; TODO: track ignored compiler/repl options (for each source?)
-
 (defn notify-new-options-from-site []
   (let [{:keys [compiler repl]} (fetch-site-options)
-        new-compiler (apply disj compiler (keys compiler-options))
-        new-repl (apply disj repl (keys repl-options))]
+        new-compiler (difference compiler
+                       (set (keys compiler-options))
+                       (:compiler ignored-site-options))
+        new-repl (difference repl
+                   (set (keys repl-options))
+                   (:repl ignored-site-options))]
     (when (seq new-compiler)
       (println "\nNew Compiler Options (via site):\n")
       (doseq [opt (sort new-compiler)]

  {:compiler (fetch-site-options* "compiler-options")
   :repl (fetch-site-options* "repl-options")})

(defn parse-known-opts [form]
  (when (and (list? form)
             (= (take 2 form) '(def known-opts)))

   :compiler-stats {:added "0.0-2629"}
   :dump-core {:added "1.7.10"}
   :elide-asserts {:added "0.0-2156"}
   ; :emit-constants {:added "0.0-2014"} ; (see ignored below)
   :externs {:added "0.0-971"}
   :fn-invoke-direct {:added "1.9.660"}
   :foreign-libs {:added "0.0-971"}
