diff --git a/README.ninja b/README.ninja
new file mode 100644
index 0000000..1a8e92d
--- /dev/null
+++ b/README.ninja
@@ -0,0 +1,26 @@
+Ninja for Windows and Linux are custom built binaries that contain Steel
+specific modifications.
+
+ninja.exe built with MSVC 2012
+from
+https://github.com/rjogrady/ninja/commit/2feb1180afe21bbc6453dd7a95fe53c2e25fbb55
+
+ninja_linux64 built with gcc
+from
+https://github.com/rjogrady/ninja/commit/613d89893e56acc8c3670a66a33fcd2caf7d9050
+
+For Windows, we provide a simple_echo.exe for ninja to use when building with SN-DBS.
+Code is as follows:
+
+#include <stdio.h>
+int main(int argc, char** argv) {
+  int i;
+  for (i = 1; i < argc; ++i) {
+    if (i != 1) {
+      putc(' ', stdout);
+    }
+    fputs(argv[i], stdout);
+  }
+  putc('\n', stdout);
+}
+
diff --git a/WATCHLISTS b/WATCHLISTS
old mode 100755
new mode 100644
index 47ee79e..247ed98
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -18,10 +18,7 @@
 
   'WATCHLISTS': {
     'this_file': [],
-    'depot_tools': [
-      'dpranke+depot_tools@chromium.org',
-      'iannucci+depot_tools@chromium.org',
-    ],
+    'depot_tools': [],
   },
 
 }
diff --git a/bootstrap/win/win_tools.bat b/bootstrap/win/win_tools.bat
index 278376f..a804bdb 100644
--- a/bootstrap/win/win_tools.bat
+++ b/bootstrap/win/win_tools.bat
@@ -115,8 +115,8 @@
 call copy /y "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\ssh-keygen.bat" "%WIN_TOOLS_ROOT_DIR%\ssh-keygen.bat" 1>nul
 
 :: Ensure autocrlf and filemode are set correctly.
-call "%WIN_TOOLS_ROOT_DIR%\git.bat" config --system core.autocrlf false
-call "%WIN_TOOLS_ROOT_DIR%\git.bat" config --system core.filemode false
+call "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\cmd\git.cmd" config --system core.autocrlf false
+call "%WIN_TOOLS_ROOT_DIR%\%GIT_BIN_DIR%\cmd\git.cmd" config --system core.filemode false
 goto :SVN_CHECK
 
 
diff --git a/breakpad.py b/breakpad.py
index 2248e35..46a5ecd 100644
--- a/breakpad.py
+++ b/breakpad.py
@@ -40,6 +40,12 @@
     _HOST_NAME.endswith(('.google.com', '.chromium.org')))
 
 
+# TODO(uzhilinsky): Disable breakpad to avoid spamming the Chromium team.
+# Eventually this should be re-enabled and the exceptions should be forwarded
+# to our own server.
+IS_ENABLED = False
+
+
 def post(url, params):
   """HTTP POST with timeout when it's supported."""
   if not IS_ENABLED:
diff --git a/codereview.settings b/codereview.settings
index ae258f8..a4b341a 100644
--- a/codereview.settings
+++ b/codereview.settings
@@ -1,7 +1,4 @@
 # This file is used by gcl to get repository specific information.
-CODE_REVIEW_SERVER: codereview.chromium.org
-CC_LIST: chromium-reviews@chromium.org
-VIEW_VC: http://src.chromium.org/viewvc/chrome?view=rev&revision=
-GITCL_PREUPLOAD: http://src.chromium.org/viewvc/chrome/trunk/tools/depot_tools/git-cl-upload-hook?revision=HEAD
-GITCL_PREDCOMMIT: http://src.chromium.org/viewvc/chrome/trunk/tools/depot_tools/git-cl-upload-hook?revision=HEAD
-PROJECT: depot_tools
+GERRIT_HOST: lbshell-internal-review.googlesource.com
+GERRIT_AUTODETECT_BRANCH: true
+CODE_REVIEW_SERVER: lbshell-internal-review.googlesource.com
diff --git a/git-lg b/git-lg
new file mode 100755
index 0000000..10c6e66
--- /dev/null
+++ b/git-lg
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Copyright 2014 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This will print a pretty git commit history graph.
+
+git log --graph --all \
+    --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white) - %an%C(reset)%C(bold yellow)%d%C(reset)'  \
+    --abbrev-commit --date=relative $*
diff --git a/git_cl.py b/git_cl.py
index 68d4339..8b474a1 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -411,6 +411,7 @@
     self.viewvc_url = None
     self.updated = False
     self.is_gerrit = None
+    self.is_gerrit_autodetect_branch = None
     self.git_editor = None
     self.project = None
     self.force_https_commit_url = None
@@ -576,6 +577,13 @@
       self.is_gerrit = self._GetConfig('gerrit.host', error_ok=True)
     return self.is_gerrit
 
+  def GetIsGerritAutoDetectBranch(self):
+    """Return true if the remote branch should be auto-detected."""
+    if self.is_gerrit_autodetect_branch is None:
+      self.is_gerrit_autodetect_branch = self._GetConfig(
+          'gerrit.autodetect-branch', error_ok=True)
+    return self.is_gerrit_autodetect_branch
+
   def GetGitEditor(self):
     """Return the editor specified in the git config, or None if none is."""
     if self.git_editor is None:
@@ -1364,6 +1372,10 @@
   if 'GERRIT_HOST' in keyvals:
     RunGit(['config', 'gerrit.host', keyvals['GERRIT_HOST']])
 
+  if 'GERRIT_AUTODETECT_BRANCH' in keyvals:
+    RunGit(['config', 'gerrit.autodetect-branch',
+            keyvals['GERRIT_AUTODETECT_BRANCH']])
+
   if 'PUSH_URL_CONFIG' in keyvals and 'ORIGIN_URL_CONFIG' in keyvals:
     #should be of the form
     #PUSH_URL_CONFIG: url.ssh://gitrw.chromium.org.pushinsteadof
@@ -1451,6 +1463,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDbaseurl(parser, args):
   """Gets or sets base-url for this branch."""
   branchref = RunGit(['symbolic-ref', 'HEAD']).strip()
@@ -1624,6 +1637,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDstatus(parser, args):
   """Show status of changelists.
 
@@ -1732,6 +1746,7 @@
   CMDstatus.__doc__ = '\n'.join(colorize_line(l) for l in lines)
 
 
+@subcommand.hidden
 @subcommand.usage('[issue_number]')
 def CMDissue(parser, args):
   """Sets or displays the current code review issue number.
@@ -1773,6 +1788,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDcomments(parser, args):
   """Shows or posts review comments for any changelist."""
   parser.add_option('-a', '--add-comment', dest='comment',
@@ -1814,6 +1830,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDdescription(parser, args):
   """Brings up the editor for the current CL's description."""
   parser.add_option('-d', '--display', action='store_true',
@@ -1905,8 +1922,8 @@
 
 def CMDpresubmit(parser, args):
   """Runs presubmit tests on the current changelist."""
-  parser.add_option('-u', '--upload', action='store_true',
-                    help='Run upload hook instead of the push/dcommit hook')
+  parser.add_option('-c', '--commit', action='store_true',
+                    help='Run commit hook instead of the upload hook')
   parser.add_option('-f', '--force', action='store_true',
                     help='Run checks even if tree is dirty')
   auth.add_auth_options(parser)
@@ -1925,7 +1942,7 @@
     base_branch = cl.GetCommonAncestorWithUpstream()
 
   cl.RunHook(
-      committing=not options.upload,
+      committing=options.commit,
       may_prompt=False,
       verbose=options.verbose,
       change=cl.GetChange(base_branch, None))
@@ -1950,11 +1967,18 @@
   """upload the current branch to gerrit."""
   # We assume the remote called "origin" is the one we want.
   # It is probably not worthwhile to support different workflows.
-  gerrit_remote = 'origin'
+  remote = 'origin'
+  branch = 'master'
 
-  remote, remote_branch = cl.GetRemoteBranch()
-  branch = GetTargetRef(remote, remote_branch, options.target_branch,
-                        pending_prefix='')
+  if options.target_branch:
+    remote = 'origin'
+    branch = options.target_branch
+  elif settings.GetIsGerritAutoDetectBranch() == 'true':
+    retcode, result = RunGitWithCode(['rev-parse', '--abbrev-ref', '@{u}'])
+    if retcode != 0:
+      print('Unable to auto-detect remote branch.')
+      return 1
+    remote, branch = result.strip().split('/')
 
   change_desc = ChangeDescription(
       options.message or CreateDescriptionFromLog(args))
@@ -2028,7 +2052,8 @@
     print('git log %s..%s' % (parent, ref_to_push))
     print('You can also use `git squash-branch` to squash these into a single '
           'commit.')
-    ask_for_data('About to upload; enter to confirm.')
+    if ask_for_data('About to upload; continue (y/N)? ').lower() != 'y':
+      return 0
 
   if options.reviewers or options.tbr_owners:
     change_desc.update_reviewers(options.reviewers, options.tbr_owners, change)
@@ -2817,6 +2842,7 @@
   return '(prohibited by Gerrit)' in push_stdout
 
 
+@subcommand.hidden
 @subcommand.usage('[upstream branch to apply against]')
 def CMDdcommit(parser, args):
   """Commits the current changelist via git-svn."""
@@ -2840,6 +2866,7 @@
   return SendUpstream(parser, args, 'dcommit')
 
 
+@subcommand.hidden
 @subcommand.usage('[upstream branch to apply against]')
 def CMDland(parser, args):
   """Commits the current changelist via git."""
@@ -2851,6 +2878,7 @@
   return SendUpstream(parser, args, 'land')
 
 
+@subcommand.hidden
 @subcommand.usage('<patch url or issue id>')
 def CMDpatch(parser, args):
   """Patches in a code review."""
@@ -2967,6 +2995,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDrebase(parser, args):
   """Rebases current branch on top of svn repo."""
   # Provide a wrapper for git svn rebase to help avoid accidental
@@ -3033,6 +3062,7 @@
   return result_master, None
 
 
+@subcommand.hidden
 def CMDtree(parser, args):
   """Shows the status of the tree."""
   _, args = parser.parse_args(args)
@@ -3049,6 +3079,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDtry(parser, args):
   """Triggers a try job through Rietveld."""
   group = optparse.OptionGroup(parser, "Try job options")
@@ -3231,6 +3262,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDweb(parser, args):
   """Opens the current CL in the web browser."""
   _, args = parser.parse_args(args)
@@ -3246,6 +3278,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDset_commit(parser, args):
   """Sets the commit bit to trigger the Commit Queue."""
   auth.add_auth_options(parser)
@@ -3261,6 +3294,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDset_close(parser, args):
   """Closes the issue."""
   auth.add_auth_options(parser)
@@ -3275,6 +3309,7 @@
   return 0
 
 
+@subcommand.hidden
 def CMDdiff(parser, args):
   """Shows differences between local tree and last upload."""
   auth.add_auth_options(parser)
@@ -3505,11 +3540,21 @@
 
 def CMDlol(parser, args):
   # This command is intentionally undocumented.
-  print zlib.decompress(base64.b64decode(
-      'eNptkLEOwyAMRHe+wupCIqW57v0Vq84WqWtXyrcXnCBsmgMJ+/SSAxMZgRB6NzE'
-      'E2ObgCKJooYdu4uAQVffUEoE1sRQLxAcqzd7uK2gmStrll1ucV3uZyaY5sXyDd9'
-      'JAnN+lAXsOMJ90GANAi43mq5/VeeacylKVgi8o6F1SC63FxnagHfJUTfUYdCR/W'
-      'Ofe+0dHL7PicpytKP750Fh1q2qnLVof4w8OZWNY'))
+  print('\n'.join((
+      ' _______        _             _        ',
+      '(_______)      | |           | |   _   ',
+      ' _        ___  | |__   _____ | | _| |_ ',
+      '| |      / _ \ |  _ \ (____ || |(_   _)',
+      '| |_____| |_| || |_) )/ ___ || |  | |_ ',
+      ' \______)\___/ |____/ \_____| \_)  \__)',
+      '                                       ',
+      '                                                ',
+      '                                      _         ',
+      '  ___    ____  _   _   ____  _____  _| |_   ___ ',
+      ' / _ \  / _  || | | | / ___)| ___ |(_   _) /___)',
+      '| |_| |( (_| || |_| || |    | ____|  | |_ |___ |',
+      ' \___/  \___ ||____/ |_|    |_____)   \__)(___/ ',
+      '       (_____|                                  ')))
   return 0
 
 
@@ -3540,6 +3585,10 @@
   global settings
   settings = Settings()
 
+  # All Rietveld only commands are marked as hidden. Unhide them if not using
+  # Gerrit, to restore the default behavior.
+  subcommand.SHOW_HIDDEN_COMMANDS = not settings.GetIsGerrit()
+
   colorize_CMDstatus_doc()
   dispatcher = subcommand.CommandDispatcher(__name__)
   try:
diff --git a/ninja-linux64 b/ninja-linux64
index e4a6202..6ef086d 100755
--- a/ninja-linux64
+++ b/ninja-linux64
Binary files differ
diff --git a/ninja.exe b/ninja.exe
index 40f662e..c240d73 100755
--- a/ninja.exe
+++ b/ninja.exe
Binary files differ
diff --git a/perl.bat b/perl.bat
new file mode 100644
index 0000000..ad5c90a
--- /dev/null
+++ b/perl.bat
@@ -0,0 +1,5 @@
+@echo off
+
+setlocal
+set PERL5LIB=/lib/perl5
+"%~dp0git-1.9.0.chromium.6_bin\bin\perl.exe" %*
diff --git a/recipes/cobalt.py b/recipes/cobalt.py
new file mode 100644
index 0000000..5f77e7a
--- /dev/null
+++ b/recipes/cobalt.py
@@ -0,0 +1,46 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+import recipe_util  # pylint: disable=F0401
+
+
+# This class doesn't need an __init__ method, so we disable the warning
+# pylint: disable=W0232
+class Cobalt(recipe_util.Recipe):
+  """Basic Recipe class for Cobalt."""
+
+  @staticmethod
+  def fetch_spec(props):
+    ref = 'remotes/origin/COBALT'
+    url = 'https://lbshell-internal.googlesource.com/chromium.git@%s' % ref
+    solution = { 'name'   :'src',
+                 'url'    : url,
+                 'deps_file': 'DEPS',
+                 'managed'   : True,
+                 'custom_deps': {},
+                 'safesync_url': '',
+    }
+    spec = {
+      'solutions': [solution],
+    }
+    checkout_type = 'gclient_git'
+    spec_type = '%s_spec' % checkout_type
+    return {
+      'type': checkout_type,
+      spec_type: spec,
+    }
+
+  @staticmethod
+  def expected_root(_props):
+    return 'src'
+
+
+def main(argv=None):
+  return Cobalt().handle_args(argv)
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv))
diff --git a/simple_echo.exe b/simple_echo.exe
new file mode 100644
index 0000000..612e33a
--- /dev/null
+++ b/simple_echo.exe
Binary files differ
diff --git a/subcommand.py b/subcommand.py
index a9ebae0..9262a4c 100644
--- a/subcommand.py
+++ b/subcommand.py
@@ -45,6 +45,16 @@
 import textwrap
 
 
+# If set to true, will show hidden commands in help.
+SHOW_HIDDEN_COMMANDS = False
+
+
+def hidden(cmd):
+  """Decorator that hides a CMD function from being shown in help."""
+  cmd.hidden = True
+  return cmd
+
+
 def usage(more):
   """Adds a 'usage_more' property to a CMD function."""
   def hook(fn):
@@ -158,6 +168,10 @@
   def _gen_commands_list(self):
     """Generates the short list of supported commands."""
     commands = self.enumerate_commands()
+    if not SHOW_HIDDEN_COMMANDS:
+      commands = dict(
+        (name, handler) for name, handler in commands.iteritems()
+        if not getattr(handler, 'hidden', None))
     docs = sorted(
         (cmd_name, self._create_command_summary(cmd_name, handler))
         for cmd_name, handler in commands.iteritems())
diff --git a/update_depot_tools b/update_depot_tools
index bd20609..81d9979 100755
--- a/update_depot_tools
+++ b/update_depot_tools
@@ -32,7 +32,7 @@
   cmd /c `cygpath -w "$base_dir/bootstrap/win/win_tools.bat"`
 fi
 
-CANONICAL_GIT_URL="https://chromium.googlesource.com/chromium/tools/depot_tools.git"
+CANONICAL_GIT_URL="https://lbshell-internal.googlesource.com/depot_tools.git"
 
 SVN="svn"
 if [ -d "$base_dir/svn_bin" -a $MINGW = 0 ]; then
@@ -41,7 +41,11 @@
 
 GIT="git"
 if [ -e "$base_dir/git.bat" -a $MINGW = 0 ]; then
-  GIT="cmd.exe //c \"$base_dir\\git.bat\""
+  GIT="cmd.exe //c git.bat"
+fi
+
+if [ -e "$base_dir/git.bat" -a $CYGWIN = 0 ]; then
+  GIT="cmd.exe /C git.bat"
 fi
 
 # Test git and git --version.
diff --git a/update_depot_tools.bat b/update_depot_tools.bat
index 983a29e..9b2439c 100644
--- a/update_depot_tools.bat
+++ b/update_depot_tools.bat
@@ -19,7 +19,7 @@
 set DEPOT_TOOLS_DIR=%1
 SHIFT
 
-set GIT_URL=https://chromium.googlesource.com/chromium/tools/depot_tools.git
+set GIT_URL=https://lbshell-internal.googlesource.com/depot_tools.git
 
 :: Will download git, svn and python.
 call "%DEPOT_TOOLS_DIR%bootstrap\win\win_tools.bat"
