scm.GIT.IsValidRevision: Only return True if the given object is a commit

BUG=383476

Review URL: https://codereview.chromium.org/329823002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@276487 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/scm.py b/scm.py
index eb5c524..d60453d 100644
--- a/scm.py
+++ b/scm.py
@@ -491,12 +491,15 @@
       sha = GIT.Capture(['rev-parse', lookup_rev], cwd=cwd).lower()
       if lookup_rev != rev:
         # Make sure we get the original 40 chars back.
-        return rev.lower() == sha
+        if rev.lower() != sha:
+          return False
       if sha_only:
-        return sha.startswith(rev.lower())
-      return True
+        if not sha.startswith(rev.lower()):
+          return False
     except subprocess2.CalledProcessError:
       return False
+    obj_type = GIT.Capture(['cat-file', '-t', rev], cwd=cwd).strip()
+    return obj_type == 'commit'
 
   @classmethod
   def AssertVersion(cls, min_version):