When they are on a single line, the `or` should be short-circuiting, so the second condition won't be executed.

If you're trying to break up the line, you could do something like:

    cache_exists = File.exists?(cache_file)
    fingerprint_changed = cache_exists and compute_fingerprint(files, dirs) != File.read(cache_file)
    if !cache_exists or fingerprint_changed
        ...
    end