diff --git a/Library/Homebrew/cmd/test-bot.rb b/Library/Homebrew/cmd/test-bot.rb
index d91601b2991a1a38bf9e5f06f073b49b59ef7d0d..21d328eaae0e36e44a722b7bc68da48be0df0cd4 100644
--- a/Library/Homebrew/cmd/test-bot.rb
+++ b/Library/Homebrew/cmd/test-bot.rb
@@ -664,11 +664,14 @@ module Homebrew
       jenkins = ENV['JENKINS_HOME']
       job = ENV['UPSTREAM_JOB_NAME']
       id = ENV['UPSTREAM_BUILD_ID']
-      raise "Missing Jenkins variables!" unless jenkins and job and id
+      raise "Missing Jenkins variables!" if !jenkins || !job || !id
 
-      user = ENV["BINTRAY_USER"]
-      key = ENV["BINTRAY_KEY"]
-      raise "Missing Bintray variables!" unless user && key
+      bintray_user = ENV["BINTRAY_USER"]
+      bintray_key = ENV["BINTRAY_KEY"]
+      # Skip taps for now until we're using Bintray for Homebrew/homebrew
+      if !tap && (!bintray_user || !bintray_key)
+        raise "Missing BINTRAY_USER or BINTRAY_KEY variables!"
+      end
 
       ARGV << '--verbose'
 
@@ -700,6 +703,14 @@ module Homebrew
         safe_system "brew", "pull", "--clean", pull_pr
       end
 
+      existing_bottles = {}
+      Dir.glob("*.bottle*.tar.gz") do |filename|
+        # Skip taps for now until we're using Bintray for Homebrew/homebrew
+        next if tap
+        formula = bottle_filename_formula_name filename
+        existing_bottles[formula.name] = !!formula.bottle
+      end
+
       ENV["GIT_AUTHOR_NAME"] = ENV["GIT_COMMITTER_NAME"]
       ENV["GIT_AUTHOR_EMAIL"] = ENV["GIT_COMMITTER_EMAIL"]
       safe_system "brew", "bottle", "--merge", "--write", *Dir["*.bottle.rb"]
@@ -710,19 +721,6 @@ module Homebrew
       tag = pr ? "pr-#{pr}" : "testing-#{number}"
       safe_system "git", "push", "--force", remote, "master:master", ":refs/tags/#{tag}"
 
-      # SourceForge upload (will be removed soon)
-      path = "/home/frs/project/m/ma/machomebrew/Bottles/"
-      if tap
-        tap_user, tap_repo = tap.split "/"
-        path += "#{tap_repo}/"
-      end
-      url = "BrewTestBot,machomebrew@frs.sourceforge.net:#{path}"
-
-      rsync_args = %w[--partial --progress --human-readable --compress]
-      rsync_args += Dir["*.bottle*.tar.gz"] + [url]
-
-      safe_system "rsync", *rsync_args
-
       # Bintray upload (will take over soon)
       repo = if tap
         tap.sub("/", "-") + "-bottles"
@@ -735,22 +733,38 @@ module Homebrew
         next if tap
         version = BottleVersion.parse(filename).to_s
         formula = bottle_filename_formula_name filename
+        existing_bottle = existing_bottles[formula.name]
 
         repo_url = "https://api.bintray.com/packages/homebrew/#{repo}"
         package_url = "#{repo_url}/#{formula}"
         unless system "curl", "--silent", "--fail", "--output", "/dev/null", package_url
-          safe_system "curl", "--silent", "--fail", "-u#{user}:#{key}",
+          safe_system "curl", "--silent", "--fail",
+            "-u#{bintray_user}:#{bintray_key}",
             "-H", "Content-Type: application/json",
             "-d", "{\"name\":\"#{formula}\"}", repo_url
           puts
         end
 
         content_url = "https://api.bintray.com/content/homebrew/#{repo}/#{formula}/#{version}/#{filename}"
-        safe_system "curl", "--silent", "--fail", "-u#{user}:#{key}",
-          "-T", filename, content_url
+        content_url += "?publish=1&override=1" if existing_bottle
+        safe_system "curl", "--silent", "--fail",
+          "-u#{bintray_user}:#{bintray_key}", "-T", filename, content_url
         puts
       end
 
+      # SourceForge upload (will be removed soon)
+      path = "/home/frs/project/m/ma/machomebrew/Bottles/"
+      if tap
+        tap_user, tap_repo = tap.split "/"
+        path += "#{tap_repo}/"
+      end
+      url = "BrewTestBot,machomebrew@frs.sourceforge.net:#{path}"
+
+      rsync_args = %w[--partial --progress --human-readable --compress]
+      rsync_args += Dir["*.bottle*.tar.gz"] + [url]
+
+      safe_system "rsync", *rsync_args
+
       safe_system "git", "tag", "--force", tag
       safe_system "git", "push", "--force", remote, "refs/tags/#{tag}"
       return