I understand this complain as it is not obvious why things are like they are, but there are somewhat good reasons!
> I expected to be able to compute a hash and see whether the file is in the IPFS network; then upload it if it not in the network.
There is no upload in IPFS. Either you serve the file from your peer or you don't. It should be irrelevant whether that file was already present in the network or not.